作者:程润科 数据库研发工程师
编辑:张莉梅 高级文档工程师
视频:钱芬 高级测试工程师
本文将演示在 Kubernetes 上部署 RadonDB MySQL Kubernetes 2.X(Operator)的步骤,快速实现 MySQL 高可用集群部署,以及部署集群的校验和卸载方式。
部署版本为 RadonDB MySQL Kubernetes 2.1.2。
添加 Helm 仓库 radondb 。
helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/校验仓库信息,可查看到名为 radondb/mysql-operator 的 chart。
$ helm search repoNAME CHART VERSION APP VERSION DESCRIPTION radondb/mysql-operator 0.1.0 v2.1.2 Open Source,High Availability Cluster,based on MySQL 以下指定 release 名为 demo , 创建一个名为 demo-mysql-operator 的 Deployment[1]。
helm install demo radondb/mysql-operator在这一步中,默认将同时创建集群所需的 CRD[2]。
执行以下指令,以默认参数为 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]。
查看 demo 的 Deployment 和对应监控服务,回显如下信息则部署成功。
$ kubectl get deployment,svcNAME READY UP-TO-DATE AVAILABLE AGEdemo-mysql-operator 1/1 1 1 7h50mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/mysql-operator-metrics ClusterIP 10.96.142.22 <none> 8443/TCP 8h执行如下命令,将查看到如下 CRD。
$ kubectl get crd | grep mysql.radondb.combackups.mysql.radondb.com 2021-11-02T07:00:01Zmysqlclusters.mysql.radondb.com 2021-11-02T07:00:01Zmysqlusers.mysql.radondb.com 2021-11-02T07:00:01Z以默认部署为例,执行如下命令将查看到名为 sample-mysql 的三节点 RadonDB MySQL 集群及用于访问节点的服务。
$ kubectl get statefulset,svcNAME READY AGEsample-mysql 3/3 7h33mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/sample-follower ClusterIP 10.96.131.84 <none> 3306/TCP 7h37mservice/sample-leader ClusterIP 10.96.111.214 <none> 3306/TCP 7h37mservice/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],配置端口转发、负载均衡等连接方式。
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 -pKubernetes 集群的 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 卸载当前命名空间下 release 名为 demo 的 RadonDB MySQL Operator。
helm delete demo卸载 release 名为 sample RadonDB MySQL 集群。
kubectl delete mysqlclusters.mysql.radondb.com samplekubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.comkubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.comkubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com*相关部署视频可至 RadonDB 开源社区 B 站账号观看(搜索:RadonDB)