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镜像:
我们可以利用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
来源:https://juejin.im/post/5e3e618d6fb9a07cce74d308
评论