容器化 | 在 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 中。
在 radondb-mysql-kubernetes 目录路径下,选择如下方式,部署 release 实例。
release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令方式部署,需指定 release 名称。
以下命令指定 release 名为demo
,将创建一个名为demo-radondb-mysql
的有状态副本集。
默认部署方式
指定参数部署方式
在helm install
时使用--set key=value[,key=value]
,可指定参数部署。
以创建一个标准用户,且创建指定可访问数据库为例。用户名为my-user
、密码为my-password
、授权数据库为my-database
。
配置 yaml 参数方式
执行如下命令,可通过 value.yaml 配置文件,在安装时指定参数配置。
方式二:通过 repo 部署
添加并更新 helm 仓库。
以下命令指定 release 名为demo
,将创建一个名为demo-radondb-mysql
的有状态副本集。
部署校验
集群创建成功后,默认将创建一个有状态副本集(StatefulSet ),以及三个用于访问节点的服务。
以默认部署为例,可获取如下资源信息,则集群部署成功。
连接 RadonDB MySQL
您需要准备一个用于连接 MySQL 的客户端。
与客户端在同一 NameSpace 中
当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 IP 和端口。
连接主节点(读写节点)。
连接从节点(只读节点)。
用户名为 radondb_mysql
,release 名为 demo
,连接示例如下:
与客户端不在同一 NameSpace 中
当客户端与 RadonDB MySQL 集群不在同一个 NameSpace 中时,可以通过 podIP 或服务 ClusterIP 来连接对应节点。
查询 pod 列表和服务列表,分别获取需要连接的节点所在的 pod 名称或对应的服务名称。
查看 pod/服务的详细信息,获取对应的 IP。
注意:pod 重启后 pod IP 会更新,每次重启后需重新获取 pod IP。
连接节点。
用户名为 radondb_mysql
,pod IP 为 10.10.128.136
,连接示例如下:
持久化
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 配置。
参考
[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:
微信群: 请搜索添加群助手微信号 radondb
版权声明: 本文为 InfoQ 作者【RadonDB开源社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/022336d4502df27a928ae0aec】。文章转载请联系作者。
评论