### **体验简介** 场景将提供一台配置了CentOS 8.5操作系统和安装部署PolarDB-X集群的ECS实例(云服务器)。通过本教程的操作,带您体验如何使用PolarDB-X搭建一个高可用系统,通过直接kill容器模拟节点故障,以观察PolarDB-X 的自动恢复情况。[立即前往](https://developer.aliyun.com/adc/scenario/70d3ad96a23e4cfeabbd72fb9e729644)  ### 实验准备 1\. 创建实验资源 开始实验之前,您需要先创建ECS实例资源。 1. 在实验室页面,单击**创建资源**。 2. (可选)在实验室页面左侧导航栏中,单击**云产品资源**列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。 **说明:**资源创建过程需要1~3分钟。 2\. 安装环境 本步骤将指导您如何安装Docker、kubectl、minikube和Helm3。 1. 安装Docker。 a.执行如下命令,安装Docker。 ``` curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun ``` b.执行如下命令,启动Docker。 ``` systemctl start docker ``` 2. 安装kubectl。 a.执行如下命令,下载kubectl文件。 ``` curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl ``` b.执行如下命令,赋予可执行权限。 ``` chmod +x ./kubectl ``` c.执行如下命令,移动到系统目录。 ``` mv ./kubectl /usr/local/bin/kubectl ``` 3. 安装minikube。 执行如下命令,下载并安装minikube。 ``` curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube ``` 4. 安装Helm3。 a.执行如下命令,下载Helm3。 ``` wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/helm-v3.9.0-linux-amd64.tar.gz ``` b.执行如下命令,解压Helm3。 ``` tar -zxvf helm-v3.9.0-linux-amd64.tar.gz ``` c.执行如下命令,移动到系统目录。 ``` mv linux-amd64/helm /usr/local/bin/helm ``` 5.安装MySQL。 ``` yum install mysql -y ``` 3\. 使用PolarDB-X Operator安装PolarDB-X 本步骤将指导您如何创建一个简单的Kubernetes集群并部署PolarDB-X Operator ,使用Operator部署一个完整的PolarDB-X集群,详细文档请参考[通过Kubernetes安装PolarDB-X](https://doc.polardbx.com/quickstart/topics/quickstart-k8s.html)。 1. 使用minikube创建Kubernetes集群。 [minikube](https://minikube.sigs.k8s.io/docs/start/)是由社区维护的用于快速创建Kubernetes测试集群的工具,适合测试和学习Kubernetes。使用minikube创建的Kubernetes集群可以运行在容器或是虚拟机中,本实验场景以CentOS 8.5上创建Kubernetes为例。 **说明:**如果您使用其他操作系统部署minikube,例如macOS或Windows,部分步骤可能略有不同。 a.执行如下命令,新建账号galaxykube,并将galaxykube加入docker组中。minikube要求使用非root账号进行部署,所有您需要新建一个账号。 ``` useradd -ms /bin/bash galaxykube usermod -aG docker galaxykube ``` b.执行如下命令,切换到账号galaxykube。 ``` su galaxykube ``` c.执行如下命令,进入到home/galaxykube目录。 ``` cd ``` d.执行如下命令,启动一个minikube。 **说明:**这里我们使用了阿里云的minikube镜像源以及USTC提供的docker镜像源来加速镜像的拉取。 ``` minikube start --cpus 4 --memory 12288 --image-mirror-country cn --registry-mirror=https://docker.mirrors.sjtug.sjtu.edu.cn --kubernetes-version 1.23.3 ``` 返回结果如下,表示minikube已经正常运行,minikube将自动设置kubectl的配置文件。  e.执行如下命令,使用kubectl查看集群信息。 ``` kubectl cluster-info ``` 返回如下结果,您可以查看到集群相关信息。  2. 部署 PolarDB-X Operator。 a.执行如下命令,创建一个名为polardbx-operator-system的命名空间。 ``` kubectl create namespace polardbx-operator-system ``` b.执行如下命令,安装PolarDB-X Operator。 ``` helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com helm install --namespace polardbx-operator-system polardbx-operator polardbx/polardbx-operator ``` c.执行如下命令,查看PolarDB-X Operator组件的运行情况。 ``` kubectl get pods --namespace polardbx-operator-system ``` 返回结果如下,请您耐心等待2分钟,等待所有组件都进入Running状态,表示PolarDB-X Operator已经安装完成。  3. 部署 PolarDB-X 集群。 a.执行如下命令,创建polardb-x.yaml。 ``` vim polardb-x.yaml ``` b.按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。 ``` apiVersion: polardbx.aliyun.com/v1 kind: PolarDBXCluster metadata: name: polardb-x spec: config: dn: mycnfOverwrite: |- print_gtid_info_during_recovery=1 gtid_mode = ON enforce-gtid-consistency = 1 recovery_apply_binlog=on slave_exec_mode=SMART topology: nodes: cdc: replicas: 1 template: resources: limits: cpu: "1" memory: 1Gi requests: cpu: 100m memory: 500Mi cn: replicas: 2 template: resources: limits: cpu: "2" memory: 4Gi requests: cpu: 100m memory: 1Gi dn: replicas: 1 template: engine: galaxy hostNetwork: true resources: limits: cpu: "2" memory: 4Gi requests: cpu: 100m memory: 500Mi gms: template: engine: galaxy hostNetwork: true resources: limits: cpu: "1" memory: 1Gi requests: cpu: 100m memory: 500Mi serviceType: ClusterIP upgradeStrategy: RollingUpgrade ``` c.执行如下命令,创建PolarDB-X集群。 ``` kubectl apply -f polardb-x.yaml ``` d.执行如下命令,查看PolarDB-X集群创建状态。 ``` kubectl get polardbxCluster polardb-x -o wide -w ``` 返回结果如下,请您耐心等待七分钟左右,当PHASE显示为Running时,表示PolarDB-X集群已经部署完成。  e.按Ctrl+C键,退出查看PolarDB-X集群创建状态。 4\. 连接PolarDB-X集群 本步骤将指导您如何连接通过K8s部署的PolarDB-X集群。 1. 执行如下命令,查看PolarDB-X集群登录密码。 ``` kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: " ``` 返回结果如下,您可以查看到PolarDB-X集群登录密码。  2. 执行如下命令,将PolarDB-X集群端口转发到3306端口。 说明:使用MySQL Client方式登录通过k8s部署的PolarDB-X集群前,您需要进行获取PolarDB-X集群登录密码和端口转发。 ``` kubectl port-forward svc/polardb-x 3306 ``` 3. 在实验页面,单击右上角的图标,创建新的终端二。  4. 执行如下命令,连接PolarDB-X集群。 说明: - 您需要将<PolarDB-X集群登录密码>替换为实际获取到的PolarDB-X集群登录密码。 - 如遇到mysql: \[Warning\] Using a password on the command line interface can be insecure.ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0报错,请您稍等一分钟,重新转发端口并连接PolarDB-X集群即可。 ``` mysql -h127.0.0.1 -P3306 -upolardbx_root -p<PolarDB-X集群登录密码> ``` 5\. 启动业务 本步骤将指导您如何使用Sysbench OLTP场景模拟业务流量。 1. 准备压测数据。 1. 执行如下SQL语句,创建压测数据库sysbench_test。 ``` create database sysbench_test; ``` 2. 输入exit退出数据库。  3. 执行如下命令,切换到账号galaxykube。 ``` su galaxykube ``` 4. 执行如下命令,进入到/home/galaxykube目录。 ``` cd ``` 5. 执行如下命令,创建准备压测数据的sysbench-prepare.yaml文件。 ``` vim sysbench-prepare.yaml ``` 6. 按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。 ``` apiVersion: batch/v1 kind: Job metadata: name: sysbench-prepare-data-test namespace: default spec: backoffLimit: 0 template: spec: restartPolicy: Never containers: - name: sysbench-prepare image: severalnines/sysbench env: - name: POLARDB_X_USER value: polardbx_root - name: POLARDB_X_PASSWD valueFrom: secretKeyRef: name: polardb-x key: polardbx_root command: [ 'sysbench' ] args: - --db-driver=mysql - --mysql-host=$(POLARDB_X_SERVICE_HOST) - --mysql-port=$(POLARDB_X_SERVICE_PORT) - --mysql-user=$(POLARDB_X_USER) - --mysql_password=$(POLARDB_X_PASSWD) - --mysql-db=sysbench_test - --mysql-table-engine=innodb - --rand-init=on - --max-requests=1 - --oltp-tables-count=1 - --report-interval=5 - --oltp-table-size=160000 - --oltp_skip_trx=on - --oltp_auto_inc=off - --oltp_secondary - --oltp_range_size=5 - --mysql_table_options=dbpartition by hash(`id`) - --num-threads=1 - --time=3600 - /usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua - run ``` 7. 执行如下命令,运行准备压测数据的sysbench-prepare.yaml文件,初始化测试数据。 ``` kubectl apply -f sysbench-prepare.yaml ``` 8. 执行如下命令,获取任务进行状态。 ``` kubectl get jobs ``` 返回结果如下,请您耐心等待大约1分钟,当任务状态COMPLETIONS为1/1时,表示数据已经初始化完成。  2. 启动压测流量。 1. 执行如下命令,创建启动压测的sysbench-oltp.yaml文件。 ``` vim sysbench-oltp.yaml ``` 2. 按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。 ``` apiVersion: batch/v1 kind: Job metadata: name: sysbench-oltp-test namespace: default spec: backoffLimit: 0 template: spec: restartPolicy: Never containers: - name: sysbench-oltp image: severalnines/sysbench env: - name: POLARDB_X_USER value: polardbx_root - name: POLARDB_X_PASSWD valueFrom: secretKeyRef: name: polardb-x key: polardbx_root command: [ 'sysbench' ] args: - --db-driver=mysql - --mysql-host=$(POLARDB_X_SERVICE_HOST) - --mysql-port=$(POLARDB_X_SERVICE_PORT) - --mysql-user=$(POLARDB_X_USER) - --mysql_password=$(POLARDB_X_PASSWD) - --mysql-db=sysbench_test - --mysql-table-engine=innodb - --rand-init=on - --max-requests=0 - --oltp-tables-count=1 - --report-interval=5 - --oltp-table-size=160000 - --oltp_skip_trx=on - --oltp_auto_inc=off - --oltp_secondary - --oltp_range_size=5 - --mysql-ignore-errors=all - --num-threads=8 - --time=3600 - /usr/share/sysbench/tests/include/oltp_legacy/oltp.lua - run ``` 3. 执行如下命令,运行启动压测的sysbench-oltp.yaml文件,开始压测。 ``` kubectl apply -f sysbench-oltp.yaml ``` 4. 执行如下命令,查找压测脚本运行的POD。 ``` kubectl get pods ``` 返回结果如下, 以‘sysbench-oltp-test-’开头的POD即为目标POD。  5. 执行如下命令,查看QPS等流量数据。 **说明:**您需要将命令中的目标POD替换为以‘sysbench-oltp-test-’开头的POD。 ``` kubectl logs -f 目标POD ``` 6\. 体验PolarDB-X高可用能力 经过前面的准备工作,我们已经用PolarDB-X+Sysbench OLTP搭建了一个正在运行的业务系统。本步骤将指导您通过使用kill POD的方式,模拟物理机宕机、断网等导致的节点不可用场景,并观察业务QPS的变化情况。 1. 在实验页面,单击右上角的图标,创建新的终端三。  2. kill CN。 1. 执行如下命令,切换到账号galaxykube。 ``` su galaxykube ``` 2. 执行如下命令,获取CN POD的名字。 ``` kubectl get pods ``` 返回结果如下,以‘polardb-x-xxxx-cn-default’开头的是CN POD的名字。  3. 执行如下命令,删除任意一个CN POD。**说明:**您需要将命令中的<CN POD>替换为任意一个以‘polardb-x-xxxx-cn-default’开头的CN POD的名字。 ``` kubectl delete pod <CN POD> ``` 4. 执行如下命令,查看CN POD自动创建情况。 ``` kubectl get pods ``` 返回结果如下,您可查看到CN POD已经处于自动创建中。  经过几十秒后,被kill的CN POD自动恢复正常。  5. 切换至终端二,您可查看kill CN之后业务QPS的情况。  3. kill DN。 1. 切换至终端三,执行如下命令,获取DN POD的名字。 ``` kubectl get pods ``` 返回结果如下,以‘polardb-x-xxxx-dn’开头的是DN POD的名字。  2. 执行如下命令,删除任意一个DN POD。 **说明:** - 您需要将命令中的<DN POD>替换为任意一个以‘polardb-x-xxxx-dn’开头的DN POD的名字。 - DN每个逻辑节点为三副本架构,也就是说一个DN节点对应3个POD,可任意选择一个进行删除操作。此外,GMS节点是一个特殊角色的DN,同样具备高可用能力,可选择任一POD进行删除。 ``` kubectl delete pod <DN POD> ``` 3. 执行如下命令,查看DN POD自动创建情况。 ``` kubectl get pods ``` 返回结果如下,您可查看到DN POD已经处于自动创建中。  经过几十秒后,被kill的DN POD自动恢复正常。  4. 切换至终端二,您可查看kill DN之后业务QPS的情况。  4. kill CDC。 1. 切换至终端三,执行如下命令,获取CDC POD的名字。 ``` kubectl get pods ``` 返回结果如下,以‘polardb-x-xxxx-cdc-defaul’开头的是CDC POD的名字。  2. 执行如下命令,删除任意一个CDC POD。 **说明:**您需要将命令中的<CDC POD>替换为任意一个以‘polardb-x-xxxx-cdc-defaul’开头的CDC POD的名字。 ``` kubectl delete pod <CDC POD> ``` 3. 执行如下命令,查看CDC POD自动创建情况。 ``` kubectl get pods ``` 返回结果如下,您可查看到CDC POD已经处于自动创建中。  经过几十秒后,被kill的CDC POD自动恢复正常。  4. 切换至终端二,您可查看kill CDC之后业务QPS的情况。  7\. 了解更多 如果您想了解更多有关PolarDB-X高可用知识,详情请参见如下内容。 - [PolarDB-X一致性共识协议——X-Paxos](https://zhuanlan.zhihu.com/p/302845832) - [PolarDB-X存储架构之“基于Paxos的最佳生产实践”](https://zhuanlan.zhihu.com/p/315596644) - [数据库架构杂谈(2)高可用与一致性](https://zhuanlan.zhihu.com/p/340189997) - [PolarDB-X源码解读(番外):如何实现一个Paxos](https://zhuanlan.zhihu.com/p/490329189) - [PolarDB-Xon Kubernetes(一)](https://zhuanlan.zhihu.com/p/382877178) - [PolarDB-XOperator之弹性扩缩容](https://zhuanlan.zhihu.com/p/474003785) 恭喜完成
阿里云有奖体验:用PolarDB-X搭建一个高可用系统
来源:这里教程网
时间:2026-03-02 12:21:07
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 电脑虚拟内存设置及使用情况查看方法
电脑虚拟内存设置及使用情况查看方法
26-03-02 - 阿里云有奖体验:用PolarDB-X搭建一个高可用系统
阿里云有奖体验:用PolarDB-X搭建一个高可用系统
26-03-02 - DistSQL 深度解析:打造动态化的分布式数据库
DistSQL 深度解析:打造动态化的分布式数据库
26-03-02 - 阿里云体验有奖:使用PolarDB-X与Flink搭建实时数据大屏
阿里云体验有奖:使用PolarDB-X与Flink搭建实时数据大屏
26-03-02 - 【数据库数据恢复】SQL Server数据库磁盘空间不足的数据恢复案例
【数据库数据恢复】SQL Server数据库磁盘空间不足的数据恢复案例
26-03-02 - 【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
26-03-02 - 探究Presto SQL引擎(2)-浅析Join
探究Presto SQL引擎(2)-浅析Join
26-03-02 - 万能的平台爆文写作法,谁用谁先爆!
万能的平台爆文写作法,谁用谁先爆!
26-03-02 - MSSQL几个动态性能视图
MSSQL几个动态性能视图
26-03-02 - 如何加快电脑运行速度_win10速度起飞的小技巧
如何加快电脑运行速度_win10速度起飞的小技巧
26-03-02
