容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群

作者:程润科 数据库研发工程师

目前从事 RadonDB MySQL Kubernetes 研发,热衷于研究数据库内核、K8s 相关技术。

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

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

本教程主要演示如何使用 Git 和 Repo 命令行两种方式在 Kubernetes 上部署 RadonDB MySQL 集群。

部署准备

已准备可用 Kubernetes 集群。

方式一:通过 Git 部署

执行如下命令,将 RadonDB MySQL Chart 克隆到 Kubernetes 中。

$ git clone https://github.com/radondb/radondb-mysql-kubernetes.git

在 radondb-mysql-kubernetes 目录路径下,选择如下方式,部署 release 实例。

release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令方式部署,需指定 release 名称。

以下命令指定 release 名为demo,将创建一个名为demo-radondb-mysql的有状态副本集。

  • 默认部署方式
<For Helm v3>
 cd charts/helm
 helm install demo .
  • 指定参数部署方式

helm install时使用--set key=value[,key=value],可指定参数部署。

以创建一个标准用户,且创建指定可访问数据库为例。用户名为my-user、密码为my-password、授权数据库为my-database

cd charts/helm
helm install demo \
 --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database .
  • 配置 yaml 参数方式

执行如下命令,可通过 value.yaml 配置文件,在安装时指定参数配置。

cd charts/helm
helm install demo -f values.yaml .

方式二:通过 repo 部署

添加并更新 helm 仓库。

$ helm repo add test https://charts.kubesphere.io/test
$ helm repo update

以下命令指定 release 名为demo,将创建一个名为demo-radondb-mysql的有状态副本集。

$ helm install demo test/radondb-mysql
NAME: demo
LAST DEPLOYED: Wed Apr 28 08:08:15 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The cluster is comprised of 3 pods: 1 leader and 2 followers. Each instance is accessible within the cluster through:
    <pod-name>.demo-radondb-mysql
To connect to your database:
1. Get mysql user `qingcloud`s password:
    kubectl get secret -n default demo-radondb-mysql -o jsonpath="{.data.mysql-password}" | base64 --decode; echo
2. Run an Ubuntu pod that you can use as a client:
    kubectl run ubuntu -n default --image=ubuntu:focal -it --rm --restart='Never' -- bash -il
3. Install the mysql client:
    apt-get update && apt-get install mysql-client -y
4. To connect to leader service in the Ubuntu pod:
    mysql -h demo-radondb-mysql-leader -u qingcloud -p
5. To connect to follower service (read-only) in the Ubuntu pod:
    mysql -h demo-radondb-mysql-follower -u qingcloud -p    

部署校验

集群创建成功后,默认将创建一个有状态副本集(StatefulSet ),以及三个用于访问节点的服务。

以默认部署为例,可获取如下资源信息,则集群部署成功。

$ kubectl get statefulset,svc
NAME                                  READY   AGE
statefulset.apps/demo-radondb-mysql   3/3     45m
NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/demo-radondb-mysql            ClusterIP   None            <none>        3306/TCP   45m
service/demo-radondb-mysql-follower   ClusterIP   10.96.84.254    <none>        3306/TCP   45m
service/demo-radondb-mysql-leader     ClusterIP   10.96.178.195   <none>        3306/TCP   45m

连接 RadonDB MySQL

您需要准备一个用于连接 MySQL 的客户端。

与客户端在同一 NameSpace 中

当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 IP 和端口。

  • 连接主节点(读写节点)。
$ mysql -h <leader service 名称> -u <用户名> -p
用户名为 `radondb_mysql`,release 名为 `demo` ,连接示例如下:
$ mysql -h demo-radondb-mysql-leader -u radondb_mysql -p
  • 连接从节点(只读节点)。
$ mysql -h <follower service 名称> -u <用户名> -p

用户名为 radondb_mysql,release 名为 demo ,连接示例如下:

$ mysql -h demo-radondb-mysql-follower -u qradondb_mysql-p  

与客户端不在同一 NameSpace 中

当客户端与 RadonDB MySQL 集群不在同一个 NameSpace 中时,可以通过 podIP或服务ClusterIP来连接对应节点。

  • 查询 pod 列表和服务列表,分别获取需要连接的节点所在的pod 名称或对应的服务名称。
$ kubectl get pod,svc
  • 查看 pod/服务的详细信息,获取对应的IP。
$ kubectl describe pod <pod 名称>
$ kubectl describe svc <服务名称>

注意:pod 重启后 pod IP 会更新,每次重启后需重新获取 pod IP。

  • 连接节点。
$ mysql -h <pod IP/服务 ClusterIP> -u <用户名> -p

用户名为 radondb_mysql,pod IP 为 10.10.128.136 ,连接示例如下:

$ mysql -h 10.10.128.136 -u radondb_mysql -p

持久化

MySQL 镜像在容器路径/var/lib/mysql中存储 MySQL 数据和配置。

默认情况下,会创建一个 PVC 并将其挂载到指定目录中。 若想禁用此功能,您可以更改values.yaml禁用持久化,改用 emptyDir。

当 Pod 分配给节点后,将首先创建一个 emptyDir 卷,只要 Pod 在节点上持续运行,则存储卷便持续存在;当 Pod 节点中删除时 ,emptyDir 中的数据也将被永久删除。

注意

  • PVC 中可以使用不同特性的持久卷(PersistentVolume,PV),其 I/O 性能会影响数据库的初始化性能。所以当使用 PVC 启用持久化存储时,可能需要调整 livenessProbe.initialDelaySeconds 的值。
  • 数据库初始化的默认限制是60秒 (livenessProbe.initialDelaySeconds + livenessProbe.periodSeconds * livenessProbe.failureThreshold)。如果初始化时间超过限制,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。

自定义 MySQL 配置

mysql.configFiles中添加/更改 MySQL 配置。

configFiles:
   node.cnf: |
    [mysqld]
    default_storage_engine=InnoDB
    max_connections=65535
    
    # custom mysql configuration.
    expire_logs_days=7

参考

[1].RadonDB MySQLkubernetes:https://github.com/radondb/radondb-mysql-kubernetes
[2].MySQL 镜像:https://hub.docker.com/repository/docker/zhyass/percona57
[3].PVC:https://kubernetes.io/zh/docs/concepts/storage/persistent-volumes/
[4].Helm Charts 配置:https://github.com/radondb/radondb-mysql-kubernetes/tree/main/charts/helm

关于 RadonDB

RadonDB 开源社区是一个面向云原生、容器化的数据库开源社区, 为数据库技术爱好者提供围绕主流开源数据库(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技术分享平台,并提供企业级 RadonDB 开源产品及服务。

目前 RadonDB 开源数据库系列产品已被 光大银行、浦发硅谷银行、哈密银行、泰康保险、太平保险、安盛保险、阳光保险、百年人寿、安吉物流、安畅物流、蓝月亮、天财商龙、罗克佳华、升哲科技、无锡汇跑体育、北京电信、江苏交通控股、四川航空、昆明航空、国控生物 等上千家企业及社区用户采用。

RadonDB 可基于云平台与 Kubernetes 容器平台交付,不仅提供覆盖多场景的数据库产品解决方案,而且提供专业的集群管理和自动化运维能力,主要功能特性包括:高可用主从切换、数据强一致性、读写分离、一键安装部署、多维指标监控&告警、弹性扩容&缩容、横向自由扩展、自动备份&恢复、同城多活、异地灾备 等。RadonDB 仅需企业及社区用户专注于业务层逻辑开发,无需关注集群高可用选型、管理和运维等复杂问题,帮助企业及社区用户大幅度提升业务开发与价值创新的效率!

GitHub:

https://github.com/radondb

微信群: 请搜索添加群助手微信号 radondb

本文由博客一文多发平台 OpenWrite 发布!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容