1 PolarDB-x集群创建
galaxykube$ kubectl get polardbxCluster polardb-x -o wide -w
NAME PROTOCOL GMS CN DN CDC PHASE DISK AGE
polardb-x 8.0 1/1 0/2 1/1 0/1 Creating 3m58s
polardb-x 8.0 1/1 0/2 1/1 1/1 Creating 5m6s
polardb-x 8.0 1/1 1/2 1/1 1/1 Creating 5m26s
polardb-x 8.0 1/1 2/2 1/1 1/1 Running 7.2 GiB 8.0.3-PXC-5.4.13-16534775/8.0.18 5m47s
polardb-x 8.0 1/1 2/2 1/1 1/1 Running 7.2 GiB 8.0.3-PXC-5.4.13-16534775/8.0.18 6m47s
集群有两个CN节点,一个GMS节点、一个CDC节点。
集群的登录密码可以用一下命令获得:
galaxykube@i$ kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base -d - | xargs echo "Password: "
Password: 8zpmncf5
可以看到,登录集群的密码存在k8s集群的资源secret ploardb-x中。
在创建集群的同时,PolarDB-X operator也创建了一个polardb-x服务,详细信息如下(kubectl get pod命令的-o wide 选项用来显示资源的详细信息):
galaxykube$ kubectl get svc polardb-x -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
polardb-x ClusterIP 10.106.6.253 <none> 3306/TCP,8081/TCP 30m polardbx/cn-type=rw,polardbx/name=polardb-x,polardbx/rand=4k6z,polardbx/role=c
需要将此服务转发至本地3306端口才能使用本地客户端访问PolarDB-X集群,转发后不能退出命令,需要保持执行命令的会话处于open状态。
galaxykube$kubectl port-forward svc/polardb-x 33061
2 连接至PolarDB-X集群
重新打开一个会话,连接至PolarDB-X所在集群服务器,在root用户下操作即可,服务器上需要提前安装号MySQL客户端,使用MySQL客户端即可登录到PolarDB-X集群,用户名是polardbx_root,密码用上节获得的,地址使用本地环回地址,端口为转发端口3306
root# mysql -h127.0.0.1 -P3306 -upolardbx_root -p8zpmncf5
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
........
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
3 使用sysbench模拟一个业务环境
创建sysbench所需数据库,数据库名字为sysbench_test
mysql> create database sysbench_test;
退出会话后登录galaxykube用户. 使用su命令时加上 - ,切换至galaxykube用户环境
su - galaxykube
下载sysbench-prepare.yaml(sysbench准备数据pod),sysbench-oltp.yaml(sysbench模拟业务pod文件)
wget https://labfileapp.oss-cn-hangzhou.aliyuncs.com/learn-some-polardb-x-main-class-5/sysbench-oltp.yaml
主备sysbench数据,创建sysbench-prepare job
galaxykube$ kubectl apply -f sysbench-prepare.yaml
检查job状态,
galaxykube@iZbp12b91re208jg1y8likZ ~]$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
sysbench-prepare-data-test 0/1 34s 34s
当COMPLETIONS为1/1时,sysben数据已经准备好,可以开始创建和启动模拟业务pod了
galaxykube$ kubectl apply -f sysbench-oltp.yaml
查看sysbench-oltp pod名称
galaxykube$ kubectl get pods
NAME READY STATUS RESTARTS AGE
polardb-x-rz2l-cdc-default-579b4b7549-qdrk8 2/2 Running 2 (10m ago) 9d
........
polardb-x-rz2l-gms-log-0 3/3 Running 3 (10m ago) 9d
sysbench-oltp-test-d5hhs
1/1 Running 0 27s
sysbench-prepare-data-test-btt7g 0/1 Completed 0 2m8s
从上面可以看到,业务模拟pod的名称是sysbench-oltp-test-d5hhs,持续监控这个pod的日志输出
galaxykube$ kubectl logs -f sysbench-oltp-test-d5hhs
WARNING: --num-threads is deprecated, use --threads instead
sysbench 1.0.17 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 8
Report intermediate results every 5 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
[ 5s ] thds: 8 tps: 40.45 qps: 745.28 (r/w/o: 582.90/162.38/0.00) lat (ms,95%): 287.38 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 8 tps: 49.35 qps: 887.70 (r/w/o: 690.09/197.60/0.00) lat (ms,95%): 314.45 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 8 tps: 62.68 qps: 1135.51 (r/w/o: 882.38/253.13/0.00) lat (ms,95%): 186.54 err/s: 0.00 reconn/s: 0.00
PolarDB-X集群目前的tps为62.68,qps为1135.31。
4 删除一个pod,观察PolarDB-X集群状态及业务负载的变化
[galaxykube@iZbp16rl52hr6rd8xo8rwyZ ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
polardb-x-t6jd-cdc-default-5c9c46bcbd-svhvb 2/2 Running 0 14m
polardb-x-t6jd-cn-default-b84868666-w6sbm
3/3 Running 0 14m
polardb-x-t6jd-cn-default-b84868666-wzbdg
3/3 Running 1 (13m ago) 14m
.....
集群内目前有两个cn pod,标红的字符串为这两个cn的名称,删除第二个pod
galaxykube$ kubectl delete pod polardb-x-t6jd-cn-default-b84868666-wzbdg
pod "polardb-x-t6jd-cn-default-b84868666-wzbdg" deleted
检查集群中pod的状态
galaxykube$ kubectl get pods
NAME READY STATUS RESTARTS AGE
polardb-x-t6jd-cdc-default-5c9c46bcbd-svhvb 2/2 Running 0 20m
polardb-x-t6jd-cn-default-b84868666-r6m7j 2/3 Running 0 13s
polardb-x-t6jd-cn-default-b84868666-w6sbm 3/3 Running 0 20m
集群重新创建了一个pod,名称同删除cn pod的名称不同,该pod正处于启动状态
启动完毕后,pod的ready为3/3
[galaxykube@iZbp16rl52hr6rd8xo8rwyZ ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
polardb-x-t6jd-cdc-default-5c9c46bcbd-svhvb 2/2 Running 0 21m
polardb-x-t6jd-cn-default-b84868666-r6m7j 3/3 Running 0 49s
polardb-x-t6jd-cn-default-b84868666-w6sbm 3/3 Running 0 21m
....
查看一下业务负载pod的日志,观察业务负载的变化
业务负载在删除cn pod、重建cn pod的时间段内有所降低,在cn pod重建完成后业务负载恢复到删除之前的数值,这个期间errs为0,有一个时间间隔内有重连,显示了在删除节点(pod)运行的业务重新连接到了正常的节点(pod),可以看出来,PolarDB-X集群cn节点的删除和重建不会影响到业务运行,可以在线执行。