作者:高日耀 资深 MySQL 内核研发
本文源于作者在 KubeSphere & Friends 2021 上海站的演讲内容《MySQL on K8s:开源凋谢的 MySQL 高可用容器编排计划》。
MySQL 是世界上最风行的开源数据库,在容器及 K8s 技术进去之前,就曾经在各行各业中宽泛的利用。本文将为大家分享 MySQL 容器化方面的一些实际。
| MySQL 运维有哪些挑战?
传统的物理部署形式,即把数据库部署在物理机上。对运维人员而言,会遇到图 1 中四个维度的挑战。
1、老本
自建 MySQL 数据库集群,须要的硬件设施包含: 服务器、网络交换机、内存、CPU、硬盘等 硬件设施。
硬件设施老本包含: 选型、购买、保护、降级、损坏、数据失落等 。
2、传统部署
每新增一套集群,都要进行操作系统装置、环境配置、MySQL 数据库装置、调试、性能优化、调参,后续还有系统升级,数据库降级 …
3、运维
针对不同对场景,比方一源一副本,一源两正本,多源多正本(MGR)等,须要编写对应的运维脚本。
在集群规模不大,MySQL 实例不多的状况下,运维人员尚且能应酬,然而当集群一直减少,MySQL 实例达到成千上万个的时候,会极大的减少运维人员的累赘,效率也会变得低下。
规模越大,呈现误操作的概率会越高,重大的甚至要 “从删库跑路”。误删除要害数据,对于个别企业而言,应答能力较弱,危害很可能是致命的。
4、资源弹性
传统物理机部署不具备秒级弹性的能力,来针对 MySQL 在顶峰或低谷时资源的主动弹性伸缩。例如,在业务顶峰扩大 CPU、内存等资源,在低峰期发出闲置资源。
如果设计一次电商秒杀的场景持续时间是 30 分钟,那么咱们能够在 30 分钟内,将网络、CPU、内存、磁盘等资源晋升到最大。在秒杀完结之后,开释这些资源,极大节省成本。
支流解决方案
针对如上挑战,支流的解决方案有两种:
-
物理机 + 治理平台
通过数据库治理平台,对数据库的对立治理,加重数据库运维老本,进步数据库整体的可用性。
-
上云
将数据库部署到一个虚构计算环境中,也就是常说的数据库上云。市面上各大云厂商都提供了 RDS 服务。
数据库上云能够实现按需付费、按需扩大、高可用性以及存储整合等劣势。大大降低运维人员大规模部署和运维数据库的难度。
那么,还有没有其它计划来解决这些挑战呢?接下来为大家介绍数据库容器化。
| 为什么要做数据库容器化?
据 CNCF 云原生产业联盟公布的《中国云原生用户调查报告 2020 年》[1] 显示,60% 以上的中国企业已在生产环境中利用容器技术,其中 43% 的企业已将容器技术用于外围生产业务。
容器技术
Docker 横空出世
-
相当轻量镜像标准化制作
使装置部署和交付十分高效。解决了 Pass 服务打包简单,环境不统一等问题。
-
轻量级虚拟化 (rootfs/cgroup/namespace)
有助于资源共享,降级性能损耗
Kubernetes 容器编排的事实标准
依靠着 Google Borg 我的项目的实践劣势,继承了 Google 的大规模生产环境的教训。K8s 提供了一套基于容器构建分布式系统的根底依赖。K8s 也成为容器编排的事实标准。
-
运维能力
路由网关、程度扩大、监控、备份、劫难复原等。
-
申明式 API
形容容器化业务和容器间关系。
-
容器编排
依照用户的志愿和整个零碎的规定,齐全自动化地解决好容器之间的各种关系。
通过观察用户理论应用 MySQL 时对容器化产品的迫切需要,能够看出 MySQL 容器化过程势在必行。以 KubeSphere 开源社区 [2] 为例,在其利用商店呼声最高的就是高可用版的 MySQL。
| MySQL 容器化摸索
RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。反对一主多从高可用架构,并具备平安、主动备份、监控告警、主动扩容等全套治理性能。目前曾经在生产环境中大规模的应用,蕴含 银行,保险,传统大企业 等。
RadonDB MySQL Kubernetes[3] 反对在 Kubernetes 和 KubeSphere 上装置部署和治理,主动执行与运行 RadonDB MySQL 集群无关的工作。服务高可用由曾经开源的 MySQL 集群高可用工具 Xenon 来实现。
架构图
每一个 Pod 外面的 Xenon 治理以后 Pod 中的 MySQL,次要获取并保留以后状态,获取以后执行的复制状态信息。
Helm 版
通用的包管理工具,将 K8s 资源模版化,不便共享。次要解决如下问题:
- 部署利用资源,配置拆散;
- 治理其生命周期;
- MySQL 的降级更新;
- 资源的删除。
次要性能:
-
MySQL 高可用
- 无中心化领导者主动选举
- 主从秒级切换
- 数据强一致性
- 集群治理
- 监控告警
- 集群日志治理
- 账户治理
KubeSphere 利用治理
能够通过终端执行命令部署回显信息。
$ xenoncli cluster status
+------------------------------------------------------+-------------------------------+--------+---------+--------------------------+---------------------+----------------+------------------------------------------------------+
| ID | Raft | Mysqld | Monitor | Backup | Mysql | IO/SQL_RUNNING | MyLeader |
+------------------------------------------------------+-------------------------------+--------+---------+--------------------------+---------------------+----------------+------------------------------------------------------+
| demo-radondb-mysql-0.demo-radondb-mysql.default:8801 | [ViewID:1 EpochID:2]@LEADER | UNKNOW | OFF | state:[NONE]
| [ALIVE] [READWRITE] | [true/true] | demo-radondb-mysql-0.demo-radondb-mysql.default:8801 |
| | | | | LastError: | | | |
+------------------------------------------------------+-------------------------------+--------+---------+--------------------------+---------------------+----------------+------------------------------------------------------+
| demo-radondb-mysql-1.demo-radondb-mysql.default:8801 | [ViewID:1 EpochID:2]@FOLLOWER | UNKNOW | OFF | state:[NONE]
| [ALIVE] [READONLY] | [true/true] | demo-radondb-mysql-0.demo-radondb-mysql.default:8801 |
| | | | | LastError: | | | |
+------------------------------------------------------+-------------------------------+--------+---------+--------------------------+---------------------+----------------+------------------------------------------------------+
| demo-radondb-mysql-2.demo-radondb-mysql.default:8801 | [ViewID:1 EpochID:2]@FOLLOWER | UNKNOW | OFF | state:[NONE]
| [ALIVE] [READONLY] | [true/true] | demo-radondb-mysql-0.demo-radondb-mysql.default:8801 |
| | | | | LastError: | | | |
+------------------------------------------------------+-------------------------------+--------+---------+--------------------------+---------------------+----------------+------------------------------------------------------+
$ xenoncli cluster gtid
+------------------------------------------------------+----------+-------+-------------------+--------------------+
| ID | Raft | Mysql | Executed_GTID_Set | Retrieved_GTID_Set |
+------------------------------------------------------+----------+-------+-------------------+--------------------+
| demo-radondb-mysql-1.demo-radondb-mysql.default:8801 | FOLLOWER | ALIVE | | |
+------------------------------------------------------+----------+-------+-------------------+--------------------+
| demo-radondb-mysql-2.demo-radondb-mysql.default:8801 | FOLLOWER | ALIVE | | |
+------------------------------------------------------+----------+-------+-------------------+--------------------+
| demo-radondb-mysql-0.demo-radondb-mysql.default:8801 | LEADER | ALIVE | | |
+------------------------------------------------------+----------+-------+-------------------+--------------------+
| RoadMap
Operator 版
Operator 版针对特定场景做有状态服务,针对简单利用的自动化治理。除了满足 Helm 版的需要之外,次要解决如下问题:
- 监听 Kubernetes API,在实例创立、伸缩、死亡等各个生命周期中做相应的解决来保障有状态利用中的数据连续性;
- 指定节点跨机房 / 异地灾备,IP 固定等;
- 主从复制出现异常或者复制延时超过失常范畴主动定位和主动修复等。
借助 Operator 框架,以及对精密粒度操控利用等性能需要。
【行将推出】次要性能:
- 增删节点
- 主动扩缩容
- 降级集群
- 备份与复原
- 故障主动转移
- 主动重建节点
- 主动重启服务
- 账户治理(提供 API 接口)
- 在线迁徙
- 自动化运维
- 多节点角色
- 灾备集群
- SSL 传输加密
- ……
心愿有对数据库容器化感兴趣的同学关注 RadonDB 开源社区 ,一个面向云原生、容器化的数据库开源社区!
[1]. 2020 年中国云原生调查报告:https://www.cncf.io/blog/2021…
[2]. KubeSphere 开源社区 : https://kubesphere.com.cn
[3]. RadonDB MySQL Kubernetes:https://github.com/radondb/ra…
对于 RadonDB
RadonDB 开源社区是一个面向云原生、容器化的数据库开源社区,为数据库技术爱好者提供围绕支流开源数据库(MySQL、PostgreSQL、Redis、MongoDB、ClickHouse 等)的技术分享平台,并提供企业级 RadonDB 开源产品及服务。
目前 RadonDB 开源数据库系列产品已被 光大银行、浦发硅谷银行、哈密银行、泰康保险、太平保险、安盛保险、阳光保险、百年人寿、安吉物流、安畅物流、蓝月亮、天财商龙、罗克佳华、升哲科技、无锡汇跑体育、北京电信、江苏交通控股、四川航空、昆明航空、国控生物 等上千家企业及社区用户采纳。
RadonDB 可基于云平台与 Kubernetes 容器平台交付,不仅提供笼罩多场景的数据库产品解决方案,而且提供业余的集群治理和自动化运维能力,次要性能个性包含: 高可用主从切换、数据强一致性、读写拆散、一键装置部署、多维指标监控 & 告警、弹性扩容 & 缩容、横向自在扩大、主动备份 & 复原、同城多活、异地灾备 等。RadonDB 仅需企业及社区用户专一于业务层逻辑开发,无需关注集群高可用选型、治理和运维等简单问题,帮忙企业及社区用户大幅度晋升业务开发与价值翻新的效率!
GitHub:
https://github.com/radondb
微信群: 请搜寻增加群助手微信号 radondb