作者:程润科 数据库研发工程师
编辑:张莉梅 高级文档工程师
视频:钱芬 高级测试工程师
本文将演示在 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…
- CRD:https://kubernetes.io/zh/docs…
- 配置参数 :https://github.com/radondb/ra…
- Kubernetes 拜访集群中的应用程序 :https://kubernetes.io/zh/docs…
* 相干部署视频可至 RadonDB 开源社区 B 站账号观看(搜寻:RadonDB)