作者:程潤科 資料庫研發工程師 編輯:張莉梅 高級文檔工程師 視頻:錢芬 高級測試工程師 本文將演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Operator)的步驟,快速實現 MySQL 高可用集群部署,以及部署集群的校驗和卸載方式。 部署版本為 ...
作者:程潤科 資料庫研發工程師
編輯:張莉梅 高級文檔工程師
視頻:錢芬 高級測試工程師
本文將演示在 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)