阿里云有奖体验:用PolarDB-X搭建一个高可用系统

来源:这里教程网 时间:2026-03-02 12:21:07 作者:

### **体验简介** 场景将提供一台配置了CentOS 8.5操作系统和安装部署PolarDB-X集群的ECS实例(云服务器)。通过本教程的操作,带您体验如何使用PolarDB-X搭建一个高可用系统,通过直接kill容器模拟节点故障,以观察PolarDB-X 的自动恢复情况。[立即前往](https://developer.aliyun.com/adc/scenario/70d3ad96a23e4cfeabbd72fb9e729644) ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114229794742.jpg) ### 实验准备 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的配置文件。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114232794748.jpg) e.执行如下命令,使用kubectl查看集群信息。 ``` kubectl cluster-info ``` 返回如下结果,您可以查看到集群相关信息。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114233794752.jpg) 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已经安装完成。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114233794755.jpg) 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集群已经部署完成。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114234794757.jpg) 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集群登录密码。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114235794760.jpg) 2.  执行如下命令,将PolarDB-X集群端口转发到3306端口。      说明:使用MySQL Client方式登录通过k8s部署的PolarDB-X集群前,您需要进行获取PolarDB-X集群登录密码和端口转发。 ``` kubectl port-forward svc/polardb-x 3306 ``` 3.  在实验页面,单击右上角的![](https://ucc.alicdn.com/pic/developer-ecology/ec75663aa0204147aa642d96343647b6.png)图标,创建新的终端二。      ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114236794763.jpg) 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退出数据库。      ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114236794764.jpg) 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时,表示数据已经初始化完成。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114239794777.jpg) 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。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114249794785.jpg) 5.  执行如下命令,查看QPS等流量数据。      **说明:**您需要将命令中的目标POD替换为以‘sysbench-oltp-test-’开头的POD。 ``` kubectl logs -f 目标POD ``` 6\. 体验PolarDB-X高可用能力 经过前面的准备工作,我们已经用PolarDB-X+Sysbench OLTP搭建了一个正在运行的业务系统。本步骤将指导您通过使用kill POD的方式,模拟物理机宕机、断网等导致的节点不可用场景,并观察业务QPS的变化情况。 1.  在实验页面,单击右上角的![](https://ucc.alicdn.com/pic/developer-ecology/fd8f9871eff543b087e964fde60d87b3.png)图标,创建新的终端三。      ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114252794799.jpg) 2.  kill CN。          1.  执行如下命令,切换到账号galaxykube。          ``` su galaxykube ``` 2.  执行如下命令,获取CN POD的名字。      ``` kubectl get pods ``` 返回结果如下,以‘polardb-x-xxxx-cn-default’开头的是CN POD的名字。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114253794801.jpg) 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已经处于自动创建中。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114253794802.jpg) 经过几十秒后,被kill的CN POD自动恢复正常。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114314794816.jpg) 5.  切换至终端二,您可查看kill CN之后业务QPS的情况。      ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114315794817.jpg) 3.  kill DN。          1.  切换至终端三,执行如下命令,获取DN POD的名字。          ``` kubectl get pods ``` 返回结果如下,以‘polardb-x-xxxx-dn’开头的是DN POD的名字。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114315794818.jpg) 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已经处于自动创建中。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114315794819.jpg) 经过几十秒后,被kill的DN POD自动恢复正常。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114315794820.jpg) 4.  切换至终端二,您可查看kill DN之后业务QPS的情况。      ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114316794821.jpg) 4.  kill CDC。          1.  切换至终端三,执行如下命令,获取CDC POD的名字。          ``` kubectl get pods ``` 返回结果如下,以‘polardb-x-xxxx-cdc-defaul’开头的是CDC POD的名字。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114316794822.jpg) 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已经处于自动创建中。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114316794823.jpg) 经过几十秒后,被kill的CDC POD自动恢复正常。 ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114320794828.jpg) 4.  切换至终端二,您可查看kill CDC之后业务QPS的情况。      ![](https://www.herecours.com/d/file/efpub/2026/02-02/20260302114320794829.jpg) 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)      恭喜完成

相关推荐