場景將提供一臺設定了CentOS 8.5作業系統和安裝部署PolarDB-X叢集的ECS範例(雲伺服器)。通過本教學的操作,帶您體驗如何使用PolarDB-X搭建一個高可用系統,通過直接kill容器模擬節點故障,以觀察PolarDB-X 的自動恢復情況。立即前往
1. 建立實驗資源
開始實驗之前,您需要先建立ECS範例資源。
在實驗室頁面,單擊建立資源。
(可選)在實驗室頁面左側導航欄中,單擊雲產品資源列表,可檢視本次實驗資源相關資訊(例如IP地址、使用者資訊等)。
說明:資源建立過程需要1~3分鐘。
2. 安裝環境
本步驟將指導您如何安裝Docker、kubectl、minikube和Helm3。
a.執行如下命令,安裝Docker。
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
b.執行如下命令,啟動Docker。
systemctl start docker
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
執行如下命令,下載並安裝minikube。
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
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。
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=https://docker.mirrors.sjtug.sjtu.edu.cn --kubernetes-version 1.23.3
返回結果如下,表示minikube已經正常執行,minikube將自動設定kubectl的組態檔。
e.執行如下命令,使用kubectl檢視叢集資訊。
kubectl cluster-info
返回如下結果,您可以檢視到叢集相關資訊。
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已經安裝完成。
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叢集。
kubectl get secret polardb-x -o jsonpath="{.data['polardbx_root']}" | base64 -d - | xargs echo "Password: "
返回結果如下,您可以檢視到PolarDB-X叢集登入密碼。
說明:使用MySQL Client方式登入通過k8s部署的PolarDB-X叢集前,您需要進行獲取PolarDB-X叢集登入密碼和埠轉發。
kubectl port-forward svc/polardb-x 3306
說明:
您需要將<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場景模擬業務流量。
準備壓測資料。
create database sysbench_test;
su galaxykube
cd
vim sysbench-prepare.yaml
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
kubectl apply -f sysbench-prepare.yaml
kubectl get jobs
返回結果如下,請您耐心等待大約1分鐘,當任務狀態COMPLETIONS為1/1時,表示資料已經初始化完成。
啟動壓測流量。
vim sysbench-oltp.yaml
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
kubectl apply -f sysbench-oltp.yaml
kubectl get pods
返回結果如下, 以‘sysbench-oltp-test-’開頭的POD即為目標POD。
說明:您需要將命令中的目標POD替換為以‘sysbench-oltp-test-’開頭的POD。
kubectl logs -f 目標POD
6. 體驗PolarDB-X高可用能力
經過前面的準備工作,我們已經用PolarDB-X+Sysbench OLTP搭建了一個正在執行的業務系統。本步驟將指導您通過使用kill POD的方式,模擬物理機宕機、斷網等導致的節點不可用場景,並觀察業務QPS的變化情況。
kill CN。
su galaxykube
kubectl get pods
返回結果如下,以‘polardb-x-xxxx-cn-default’開頭的是CN POD的名字。
kubectl delete pod <CN POD>
kubectl get pods
返回結果如下,您可檢視到CN POD已經處於自動建立中。
經過幾十秒後,被kill的CN POD自動恢復正常。
kill DN。
kubectl get pods
返回結果如下,以‘polardb-x-xxxx-dn’開頭的是DN POD的名字。
說明:
您需要將命令中的
DN每個邏輯節點為三副本架構,也就是說一個DN節點對應3個POD,可任意選擇一個進行刪除操作。此外,GMS節點是一個特殊角色的DN,同樣具備高可用能力,可選擇任一POD進行刪除。
kubectl delete pod <DN POD>
kubectl get pods
返回結果如下,您可檢視到DN POD已經處於自動建立中。
經過幾十秒後,被kill的DN POD自動恢復正常。
kill CDC。
kubectl get pods
返回結果如下,以‘polardb-x-xxxx-cdc-defaul’開頭的是CDC POD的名字。
說明:您需要將命令中的
kubectl delete pod <CDC POD>
kubectl get pods
返回結果如下,您可檢視到CDC POD已經處於自動建立中。
經過幾十秒後,被kill的CDC POD自動恢復正常。
7. 瞭解更多
如果您想了解更多有關PolarDB-X高可用知識,詳情請參見如下內容。
恭喜完成