Skip to content

Latest commit

 

History

History
198 lines (134 loc) · 6.97 KB

deploy_radondb-mysql_operator_on_k8s.md

File metadata and controls

198 lines (134 loc) · 6.97 KB

English | 简体中文

目录

在 Kubernetes 上部署 RadonDB MySQL 集群(Operator)

简介

RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。支持一主多从高可用架构,并具备安全、自动备份、监控告警、自动扩容等全套管理功能。目前已经在生产环境中大规模的使用,包含银行、保险、传统大企业等。

RadonDB MySQL 支持在 Kubernetes 上安装部署和管理,自动执行与运行 RadonDB MySQL 集群有关的任务。

本教程主要演示如何在 Kubernetes 上部署 RadonDB MySQL 集群(Operator)。

部署准备

  • 已准备可用 Kubernetes 集群。

部署步骤

步骤 1: 添加 Helm 仓库

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.0                          Open Source,High Availability Cluster,based on MySQL                     

步骤 2: 部署 Operator

以下指定 release 名为 demo,创建一个名为 demo-mysql-operatorDeployment

helm install demo radondb/mysql-operator

说明

在这一步骤中默认将同时创建集群所需的 CRD

步骤 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

部署校验

校验 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

访问 RadonDB MySQL

注意

准备可用于连接 MySQL 的客户端。

  • 当客户端的与数据库部署在不同 Kubernetes 集群,请参考 Kubernetes 访问集群中的应用程序,配置端口转发、负载均衡等连接方式。

  • 在 Kubernetes 集群内,支持使用 service_name 或者 clusterIP 方式,访问 RadonDB MySQL。

    说明

    RadonDB MySQL 提供 leader 服务和 follower 服务用于分别访问主从节点。leader 服务始终指向主节点(读写),follower 服务始终指向从节点(只读)。

以下为客户端与数据库在同一 Kubernetes 集群内,访问 RadonDB MySQL 的方式。

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

卸载 RadonDB MySQL

卸载 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