阿里雲有獎體驗:用PolarDB-X搭建一個高可用系統
- 2022 年 7 月 4 日
- 筆記
體驗簡介
場景將提供一台配置了CentOS 8.5作業系統和安裝部署PolarDB-X集群的ECS實例(雲伺服器)。通過本教程的操作,帶您體驗如何使用PolarDB-X搭建一個高可用系統,通過直接kill容器模擬節點故障,以觀察PolarDB-X 的自動恢復情況。立即前往

實驗準備
1. 創建實驗資源
開始實驗之前,您需要先創建ECS實例資源。
-
在實驗室頁面,單擊創建資源。
-
(可選)在實驗室頁面左側導航欄中,單擊雲產品資源列表,可查看本次實驗資源相關資訊(例如IP地址、用戶資訊等)。
說明:資源創建過程需要1~3分鐘。
2. 安裝環境
本步驟將指導您如何安裝Docker、kubectl、minikube和Helm3。
- 安裝Docker。
a.執行如下命令,安裝Docker。
curl -fsSL //get.docker.com | bash -s docker --mirror Aliyun
b.執行如下命令,啟動Docker。
systemctl start docker
- 安裝kubectl。
a.執行如下命令,下載kubectl文件。
curl -LO //storage.googleapis.com/kubernetes-release/release/$(curl -s //storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
b.執行如下命令,賦予可執行許可權。
chmod +x ./kubectl
c.執行如下命令,移動到系統目錄。
mv ./kubectl /usr/local/bin/kubectl
- 安裝minikube。
執行如下命令,下載並安裝minikube。
curl -LO //storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
- 安裝Helm3。
a.執行如下命令,下載Helm3。
wget //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。
- 使用minikube創建Kubernetes集群。
minikube是由社區維護的用於快速創建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=//docker.mirrors.sjtug.sjtu.edu.cn --kubernetes-version 1.23.3
返回結果如下,表示minikube已經正常運行,minikube將自動設置kubectl的配置文件。

e.執行如下命令,使用kubectl查看集群資訊。
kubectl cluster-info
返回如下結果,您可以查看到集群相關資訊。

- 部署 PolarDB-X Operator。
a.執行如下命令,創建一個名為polardbx-operator-system的命名空間。
kubectl create namespace polardbx-operator-system
b.執行如下命令,安裝PolarDB-X Operator。
helm repo add polardbx //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已經安裝完成。

- 部署 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集群。
- 執行如下命令,查看PolarDB-X集群登錄密碼。
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
返回結果如下,您可以查看到PolarDB-X集群登錄密碼。

- 執行如下命令,將PolarDB-X集群埠轉發到3306埠。
說明:使用MySQL Client方式登錄通過k8s部署的PolarDB-X集群前,您需要進行獲取PolarDB-X集群登錄密碼和埠轉發。
kubectl port-forward svc/polardb-x 3306
- 在實驗頁面,單擊右上角的
圖標,創建新的終端二。

- 執行如下命令,連接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場景模擬業務流量。
-
準備壓測數據。
- 執行如下SQL語句,創建壓測資料庫sysbench_test。
create database sysbench_test;
- 輸入exit退出資料庫。

- 執行如下命令,切換到帳號galaxykube。
su galaxykube
- 執行如下命令,進入到/home/galaxykube目錄。
cd
- 執行如下命令,創建準備壓測數據的sysbench-prepare.yaml文件。
vim sysbench-prepare.yaml
- 按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
- 執行如下命令,運行準備壓測數據的sysbench-prepare.yaml文件,初始化測試數據。
kubectl apply -f sysbench-prepare.yaml
- 執行如下命令,獲取任務進行狀態。
kubectl get jobs
返回結果如下,請您耐心等待大約1分鐘,當任務狀態COMPLETIONS為1/1時,表示數據已經初始化完成。

-
啟動壓測流量。
- 執行如下命令,創建啟動壓測的sysbench-oltp.yaml文件。
vim sysbench-oltp.yaml
- 按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
- 執行如下命令,運行啟動壓測的sysbench-oltp.yaml文件,開始壓測。
kubectl apply -f sysbench-oltp.yaml
- 執行如下命令,查找壓測腳本運行的POD。
kubectl get pods
返回結果如下, 以『sysbench-oltp-test-』開頭的POD即為目標POD。

- 執行如下命令,查看QPS等流量數據。
說明:您需要將命令中的目標POD替換為以『sysbench-oltp-test-』開頭的POD。
kubectl logs -f 目標POD
6. 體驗PolarDB-X高可用能力
經過前面的準備工作,我們已經用PolarDB-X+Sysbench OLTP搭建了一個正在運行的業務系統。本步驟將指導您通過使用kill POD的方式,模擬物理機宕機、斷網等導致的節點不可用場景,並觀察業務QPS的變化情況。
- 在實驗頁面,單擊右上角的
圖標,創建新的終端三。

-
kill CN。
- 執行如下命令,切換到帳號galaxykube。
su galaxykube
- 執行如下命令,獲取CN POD的名字。
kubectl get pods
返回結果如下,以『polardb-x-xxxx-cn-default』開頭的是CN POD的名字。

- 執行如下命令,刪除任意一個CN POD。說明:您需要將命令中的
替換為任意一個以『polardb-x-xxxx-cn-default』開頭的CN POD的名字。
kubectl delete pod <CN POD>
- 執行如下命令,查看CN POD自動創建情況。
kubectl get pods
返回結果如下,您可查看到CN POD已經處於自動創建中。

經過幾十秒後,被kill的CN POD自動恢復正常。

- 切換至終端二,您可查看kill CN之後業務QPS的情況。

-
kill DN。
- 切換至終端三,執行如下命令,獲取DN POD的名字。
kubectl get pods
返回結果如下,以『polardb-x-xxxx-dn』開頭的是DN POD的名字。

- 執行如下命令,刪除任意一個DN POD。
說明:
-
您需要將命令中的
替換為任意一個以『polardb-x-xxxx-dn』開頭的DN POD的名字。 -
DN每個邏輯節點為三副本架構,也就是說一個DN節點對應3個POD,可任意選擇一個進行刪除操作。此外,GMS節點是一個特殊角色的DN,同樣具備高可用能力,可選擇任一POD進行刪除。
kubectl delete pod <DN POD>
- 執行如下命令,查看DN POD自動創建情況。
kubectl get pods
返回結果如下,您可查看到DN POD已經處於自動創建中。

經過幾十秒後,被kill的DN POD自動恢復正常。

- 切換至終端二,您可查看kill DN之後業務QPS的情況。

-
kill CDC。
- 切換至終端三,執行如下命令,獲取CDC POD的名字。
kubectl get pods
返回結果如下,以『polardb-x-xxxx-cdc-defaul』開頭的是CDC POD的名字。

- 執行如下命令,刪除任意一個CDC POD。
說明:您需要將命令中的
kubectl delete pod <CDC POD>
- 執行如下命令,查看CDC POD自動創建情況。
kubectl get pods
返回結果如下,您可查看到CDC POD已經處於自動創建中。

經過幾十秒後,被kill的CDC POD自動恢復正常。

- 切換至終端二,您可查看kill CDC之後業務QPS的情況。

7. 了解更多
如果您想了解更多有關PolarDB-X高可用知識,詳情請參見如下內容。
恭喜完成
圖標,創建新的終端二。
圖標,創建新的終端三。

