# 1. 启动业务

本步骤将指导您如何使用Sysbench OLTP场景模拟业务流量。

# 1.1 准备压测数据

执行如下SQL语句,创建压测数据库sysbench_test。

create database sysbench_test;
1

执行如下命令,切换到账号galaxykube。

su galaxykube
1

执行如下命令,进入到/home/galaxykube目录。

cd
1

执行如下命令,创建准备压测数据的sysbench-prepare.yaml文件。

vim sysbench-prepare.yaml
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

执行如下命令,运行准备压测数据的sysbench-prepare.yaml文件,初始化测试数据。

kubectl apply -f sysbench-prepare.yaml
1

执行如下命令,获取任务进行状态。

kubectl get jobs
1

返回结果如下,请您耐心等待大约1分钟,当任务状态COMPLETIONS为1/1时,表示数据已经初始化完成。

img

# 1.2 启动压测流量

执行如下命令,创建启动压测的sysbench-oltp.yaml文件。

vim sysbench-oltp.yaml
1
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

执行如下命令,运行启动压测的sysbench-oltp.yaml文件,开始压测。

kubectl apply -f sysbench-oltp.yaml
1

执行如下命令,查找压测脚本运行的POD。

kubectl get pods
1

返回结果如下, 以‘sysbench-oltp-test-’开头的POD即为目标POD。

img

执行如下命令,查看QPS等流量数据。

**说明:**您需要将命令中的目标POD替换为以‘sysbench-oltp-test-’开头的POD。

kubectl logs -f 目标POD
1

# 2. 体验PolarDB-X高可用能力

经过前面的准备工作,我们已经用PolarDB-X+Sysbench OLTP搭建了一个正在运行的业务系统。本步骤将指导您通过使用kill POD的方式,模拟物理机宕机、断网等导致的节点不可用场景,并观察业务QPS的变化情况。

# 2.1 kill CN

执行如下命令,切换到账号galaxykube。

su galaxykube
1

执行如下命令,获取CN POD的名字。

kubectl get pods
1

返回结果如下,以polardb-x-xxxx-cn-default开头的是CN POD的名字。

img

执行如下命令,删除任意一个CN POD。 说明: 您需要将命令中的 CN POD 替换为任意一个以polardb-x-xxxx-cn-default开头的CN POD的名字。

kubectl delete pod CN POD
1

执行如下命令,查看CN POD自动创建情况。

kubectl get pods
1

返回结果如下,您可查看到CN POD已经处于自动创建中。

img

经过几十秒后,被kill的CN POD自动恢复正常。

img

您可查看kill CN之后业务QPS的情况。

img

# 2.2 kill DN

执行如下命令,获取DN POD的名字。

kubectl get pods
1

返回结果如下,以polardb-x-xxxx-dn开头的是DN POD的名字。

img

执行如下命令,删除任意一个DN POD。

说明:

  • 您需要将命令中的 DN POD 替换为任意一个以 polardb-x-xxxx-dn 开头的DN POD的名字。
  • DN每个逻辑节点为三副本架构,也就是说一个DN节点对应3个POD,可任意选择一个进行删除操作。此外,GMS节点是一个特殊角色的DN,同样具备高可用能力,可选择任一POD进行删除。
kubectl delete pod DN POD
1

执行如下命令,查看DN POD自动创建情况。

kubectl get pods
1

返回结果如下,您可查看到DN POD已经处于自动创建中。

img

经过几十秒后,被kill的DN POD自动恢复正常。

img

您可查看kill DN之后业务QPS的情况。

img

# 2.3 kill CDC

执行如下命令,获取CDC POD的名字。

kubectl get pods
1

返回结果如下,以polardb-x-xxxx-cdc-defaul开头的是CDC POD的名字。

img

执行如下命令,删除任意一个CDC POD。说明: 您需要将命令中的 CDC POD替换为任意一个以polardb-x-xxxx-cdc-defaul开头的CDC POD的名字。

kubectl delete pod CDC POD
1

执行如下命令,查看CDC POD自动创建情况。

kubectl get pods
1

返回结果如下,您可查看到CDC POD已经处于自动创建中。

img

经过几十秒后,被kill的CDC POD自动恢复正常。

img

您可查看kill CDC之后业务QPS的情况。

img

# 来源