k8s部署高可用Mysql集群(Master Slave以及Group Replication)

利用k8s编排文件,我们几乎可以在0.5人日时间内就可以部署好Mysql集群,而以前,往往需要做很多手工配置,很难在短时间将集群部署起来。虽然目前很多云厂商对外售卖Mysql服务器,主打特点就是高可用和可备份,但是这些Mysql服务器价格往往比普通的云服务器要贵很多,对于很多初创公司来说,是一笔不小的开支。所以自建高可用的Mysql服务器依然是性价比极高的方案。
我们可以利用k8s的StatefulSet来部署Mysql集群,StatefulSet是一种有状态的部署,只有当前节点部署完成之后才会进行下一节点的部署。在这种模式下,当前的节点可以快速地复制上一节点的Mysql数据,来构造自身的数据库。若不是采用复制的方式,当前节点的Mysql往往会从0开始执行主节点的bin log中记录的用户对数据库的操作,当数据量很大的时候,会有很大的性能开销,而且也不能在短时间内启动该节点,不太好应对突发的紧急情况。
我已将编排脚本上传至github(github.com/xiaochaoren…)以及gitee(gitee.com/superchaozc…),有需要的同学可以参考下。编排脚本里同时包含Master-Slave Replication以及Mysql Innodb Cluster(Group Replication)的部署。主备复制的时候,先将数据写入主节点,但是备份节点同步数据会有个时间差,而Mysql的Group Replication就很好的解决了这个问题,读和写之间可以是实时的,推荐使用Mysql Innodb Cluster的部署方式。
主要用的docker镜像:
  • 官方的Mysql 8.0.18版本的镜像,或者是自己修改过的Percona-Mysql 8.0.18镜像,Percona-Mysql拥有一些企业版Mysql才有的功能,比如线程池
  • 自制的Xtrabackup 8.0版本镜像,用于Mysql的备份以及安装了mysql-shell
下图是整个部署的过程,节点数可以根据实际情况来定。利用k8s的StatefulSet,如果后续需要扩充节点,可以很方便的使用k8s命令进行扩展。不过需要注意的地方是,Mysql Innodb Cluster目前最多只支持9个节点。


来源:https://juejin.im/post/5e3e618d6fb9a07cce74d308

评论

此博客中的热门博文

近期折腾 tailscale 的一些心得

高可用用户中心设计

群晖硬软件的的各种坑及解决方案

打造一个可国内访问的Blogger(Blogspot)方法

星际蜗牛安装黑裙(群晖)制作家用nas

Cloudflare免费版设置说明

N1 PT下载小钢炮固件下载及安装说明

分析redis key大小的几种方法

Windows7系统目录迁移:Users,Program Files,ProgramData

个性化推荐从入门到精通