作者:程潤科 資料庫研發工程師
編輯:張莉梅 高階文件工程師
視訊:錢芬 高階測試工程師
本文將演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Operator)的步驟,快速實現 MySQL 高可用叢集部署,以及部署叢集的校驗和解除安裝方式。
部署版本為 RadonDB MySQL Kubernetes 2.1.2。
部署準備
- Kubernetes 叢集
- MySQL 客戶端工具
部署過程
步驟 1: 新增 Helm 倉庫
新增 Helm 倉庫 radondb
。
helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/
校驗倉庫資訊,可檢視到名為 radondb/mysql-operator
的 chart。
$ helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
radondb/mysql-operator 0.1.0 v2.1.2 Open Source,High Availability Cluster,based on MySQL
步驟 2: 部署 Operator
以下指定 release 名為 demo
, 建立一個名為 demo-mysql-operator
的 Deployment[1]。
helm install demo radondb/mysql-operator
在這一步中,預設將同時建立叢集所需的 CRD[2]。
步驟 3: 部署 RadonDB MySQL 叢集
執行以下指令,以預設引數為 CRD mysqlclusters.mysql.radondb.com
建立一個例項,即建立 RadonDB MySQL 叢集。
kubectl apply -f https://github.com/radondb/radondb-mysql-kubernetes/releases/latest/download/mysql_v1alpha1_mysqlcluster.yaml
自定義叢集部署引數,可參考 配置引數[3]。
部署校驗
校驗 RadonDB MySQL Operator
檢視 demo
的 Deployment 和對應監控服務,回顯如下資訊則部署成功。
$ kubectl get deployment,svc
NAME READY UP-TO-DATE AVAILABLE AGE
demo-mysql-operator 1/1 1 1 7h50m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-operator-metrics ClusterIP 10.96.142.22 <none> 8443/TCP 8h
校驗 RadonDB MySQL 叢集
執行如下命令,將檢視到如下 CRD。
$ kubectl get crd | grep mysql.radondb.com
backups.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlclusters.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlusers.mysql.radondb.com 2021-11-02T07:00:01Z
以預設部署為例,執行如下命令將檢視到名為 sample-mysql
的三節點 RadonDB MySQL 叢集及用於訪問節點的服務。
$ kubectl get statefulset,svc
NAME READY AGE
sample-mysql 3/3 7h33m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sample-follower ClusterIP 10.96.131.84 <none> 3306/TCP 7h37m
service/sample-leader ClusterIP 10.96.111.214 <none> 3306/TCP 7h37m
service/sample-mysql ClusterIP None <none> 3306/TCP 7h37m
訪問叢集
在 Kubernetes 叢集內,支援使用 service_name
或者 clusterIP
方式,訪問 RadonDB MySQL。
RadonDB MySQL 提供 Leader 和 Follower 兩種服務,分別用於客戶端訪問主從節點。Leader 服務始終指向主節點(可讀寫),Follower 服務始終指向從節點(只讀)。
RadonDB MySQL 叢集架構圖
以下為客戶端與資料庫在同一 Kubernetes 叢集內,訪問 RadonDB MySQL 的方式。
當客戶端的與資料庫部署在不同 Kubernetes 叢集,請參考 Kubernetes 訪問叢集中的應用程式[4],配置埠轉發、負載均衡等連線方式。
ClusterIP 方式
RadonDB MySQL 的高可用讀寫 IP 指向 Leader 服務的 clusterIP
,高可用只讀 IP 指向 Follower 服務的 clusterIP
。
mysql -h <clusterIP> -P <mysql_Port> -u <user_name> -p
以下示例使用者名稱為 radondb_usr
, Leader 服務的 clusterIP 為 10.10.128.136
,連線示例如下:
mysql -h 10.10.128.136 -P 3306 -u radondb_usr -p
service_name 方式
Kubernetes 叢集的 Pod 之間支援通過 service_name
方式訪問 RadonDB MySQL。
service_name
方式不適用於從 Kubernetes 叢集的物理機訪問資料庫 Pod。
連線 Leader 服務(RadonDB MySQL 主節點)
mysql -h <leader_service_name>.<namespace> -u <user_name> -p
使用者名稱為 radondb_usr
,release 名為 sample
,RadonDB MySQL 名稱空間為 default
,連線示例如下:
mysql -h sample-leader.default -u radondb_usr -p
連線 Follower 服務(RadonDB MySQL 從節點)
mysql -h <follower_service_name>.<namespace> -u <user_name> -p
使用者名稱為 radondb_usr
,release 名為 sample
,RadonDB MySQL 名稱空間
為 default
,連線示例如下:
mysql -h sample-follower.default -u radondb_usr -p
解除安裝
解除安裝 Operator
解除安裝當前名稱空間下 release 名為 demo
的 RadonDB MySQL Operator。
helm delete demo
解除安裝叢集
解除安裝 release 名為 sample
RadonDB MySQL 叢集。
kubectl delete mysqlclusters.mysql.radondb.com sample
解除安裝自定義資源
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com
引用參考
- Deployment:https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/
- CRD:https://kubernetes.io/zh/docs/concepts/extend-kubernetes/api-extension/custom-resources/
- 配置引數:https://github.com/radondb/radondb-mysql-kubernetes/blob/main/docs/zh-cn/config_para.md
- Kubernetes 訪問叢集中的應用程式:https://kubernetes.io/zh/docs/tasks/access-application-cluster/
*相關部署視訊可至 RadonDB 開源社群 B 站賬號觀看(搜尋:RadonDB)