Mysql MGR + Consul + Consul-template + Haproxy 搭建mysql 高可用集群 (一)

传统的mysql高可用集群都是建立在mysql主从同步复制基础上的,利用mysql原生的同步技术,搭配集群管理组件,以及对外输出组件,组成一个高可用的mysql集群。

其中最复杂的部分就是集群异常状态后的集群重构,包括重新选主、重新配置主从同步、异常实例恢复后的再加入等,这部分功能实现起来并不复杂,但对逻辑严谨性要求较高,因此市面上同类产品百花齐放,例如最流行的MHA开源产品,以及各大中小互联网公司都宣布的自研产品。

mysql同步技术经历了“异步复制” -> “半同步复制” - >“增强半同步复制” 后,在数据一致性保护方面已基本成熟,基于mysql5.7增强半同步技术,实现mysql集群高可用也就变得更安全可靠。

mysql同时也推出了组复制(MySQL Group Replication,简称MGR)技术,MGR依靠分布式一致性协议(Paxos协议的变体),实现了分布式下数据的最终一致性。简单来说,由若干个节点共同组成一个复制组,当一个事务的提交时,必须经过组内大多数节点(N / 2 + 1)决议并通过,才能最终得以提交。同时MGR支持单主模式和多主模式,单主模式时只有一个节点能够写入,其他节点只读,当主节点异常时,由其他节点重新选出新主 (这个就是本文最依赖的部分);多主模式下,所有节点均可读写,数据库场景下,多主同时读写一看就知道会有很多问题,因此官方建议生产系统使用单主模式。

MGR也是基于binlog、relaylog,在数据同步的底层实现上没什么不同,因此不用过多担心使用该技术后的数据安全性。

MGR技术自5.7.17推出,在生产上使用的案例还不是很多,但随着mysql版本的不断更新,使用MGR技术的场景也会越来越多,本文就是在利用MGR的基础上,组合服务发现和端口转发产品,编写简单脚本,最终实现一个mysql高可用集群。

 

架构如下:

物理机三台:

172.16.0.90 swarm1
172.16.0.76 swarm2
172.16.0.175 swarm3

混合部署模式:

3节点Mysql MGR集群

3节点Consul集群

每节点部署一个Consul-template

3节点haproxy集群