PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。
本期实验将指导您如何对PolarDB-X的存储节点发起备库重搭。
前置准备
假设已经根据前一讲内容完成了PolarDB-X的搭建部署,使用PolarDB-X Operator安装PolarDB-X,并且可以成功链接上PolarDB-X数据库。
准备业务数据
本步骤将指导您如何准备业务数据。
1.设置本地转发。
1.1 执行如下命令,设置端口转发并保持进程存活。
nohup kubectl port-forward svc/polardb-x 3306 > forward.log 2>&1 &
1.2 执行如下命令,查看输出日志,确认是否转发成功。
cat forward.log
返回结果如下,表示转发成功。
2.执行如下命令,获取登录密码。
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
返回结果如下,你可查看到密码。
3.执行如下命令,建库。
说明:您需要将命令中的{上文获得的密码}替换为上一步骤获取的密码。
mysql -h127.1 -upolardbx_root -p{上文获得的密码} -Ac -e "create database sysbench_test"
4.导入数据。
4.1 依次执行如下命令,安装sysbench。
#回到root用户 exit #安装sysbench sudo yum -y install sysbench #登录到galaxykube su galaxykube cd
说明:您可通过sysbench --help查看是否安装成功。
4.2 执行如下命令,导入数据。
说明:您需要将命令中的{数据库密码}替换为上文中获取的密码。
sysbench oltp_insert --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=polardbx_root --mysql-password={数据库密码} --mysql-db=sysbench_test --db-driver=mysql --tables=1 --table-size=10000 --report-interval=1 prepare
模拟DN节点无法提供服务的场景
本步骤将指导您如何模拟DN节点无法提供服务的场景。备库重搭的目标节点,不允许是leader节点。
1.执行如下命令,登录角色为follower的DN Pod。
说明:本实验中只有一个follower dn pod,因此可使用如下命令。
kubectl exec -it `kubectl get pods -l xstore/name,xstore/role=follower,polardbx/role=dn -o name` bash
2.查看某个表的checksum。
2.1 执行如下命令,登录mysql控制台。
myc
2.2 执行如下命令,选择一个分库。
show databases; use sysbench_test_single
2.3 执行如下命令,查看这个库下的表,通过checksum table {表名}来查看这个表的checksum值。
show tables; #查看表 checksum table {表名}; #查看该表的checksum exit
返回结果如下,您需要记录库表名及其checksum。
3.破坏数据文件。
3.1 执行如下命令,删除数据文件。
rm -fR /data/mysql/data
3.2 执行如下命令,登录mysql控制台,执行shutdown。
myc shutdown;
3.3 查看该Pod的状态。
在实验页面,单机右上角的+图标,创建新的终端。在新的终端中,执行如下命令,切换到galaxykube用户。
su galaxykube cd
在新的终端中,执行如下命令,查看Pod状态。
kubectl get pods -l xstore/name,xstore/role=follower,polardbx/role=dn -w
返回结果如下,您可看见该Pod的状态会变为NotReady。
发起备库重搭
本步骤将指导您如何发起备库重搭。
1.执行如下命令,获取输入参数。
- 需要重搭的POD的名称
- 需要重搭的POD所在的xstore名称(可查看POD的label xstore/name的值)
kubectl get pods -l xstore/name,xstore/role=follower,polardbx/role=dn --show-labels
返回结果如下,您可查看到重搭的POD的名称和重搭的POD所在的xstore名称。
2. 发起备库重搭任务。
2.1 执行如下命令,通过vi创建rebuildjob.yaml文件.
vi rebuildjob.yaml
2.2按i键进入编辑模式,将如下代码复制到文件中,填入“需要重搭(无法提供服务)的POD名称”和“被重搭(无法提供服务)的POD所在xstore的名称”,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: polardbx.aliyun.com/v1 kind: XStoreFollower metadata: name: rebuildjob spec: local: false targetPodName: {{需要重搭的POD名称}} xStoreName: {{被重搭的POD所在xstore的名称}}
2.3 执行如下命令,创建重搭任务。
kubectl apply -f rebuildjob.yaml
3.观察重搭任务状态
3.1 执行如下命令,观察重搭任务状态。
最后返回结果为FollowerPhaseSuccess则表示重搭成功。
kubectl get xf -w
3.2 执行如下命令,查看POD状态。如果READY为3/3,且STATUS为Running表示重搭成功。
kubectl get pods -l xstore/name,xstore/role=follower,polardbx/role=dn
4.校验数据。
4.1 执行如下命令,登录POD。
kubectl exec -it `kubectl get pods -l xstore/name,xstore/role=follower,polardbx/role=dn -o name` bash
4.2 执行如下命令,登录mysql控制台。
myc
4.3 执行校验语句,检查checksum是否和破坏数据前一致。
show databases; use sysbench_test_single show tables; checksum table {记录的表名}; #查看该表的checksum exit
5. 清除重搭任务。
退出Pod后,清理重搭任务。
kubectl delete xf rebuildjob
本文来源:PolarDB-X知乎号,欢迎关注阅读更多技术干货。