比较MMM和MHA两种MySQL高可用复制架构

一、MMM和MHA架构的作用

1、对主从复制集群中的master进行健康监控

2、当master宕机后,把写VIp迁移到新的master

3、重新配置集群中的其他slave对新的master的同步

 

二、MMM架构

1、概述

MMM架构中,有一个专门的监控服务器安装mmm_monitor组装,配合安装在各个实例节点的mmm_agent组件,来监控各个实例的健康状况。

MMM架构中,有两个主,但只有一个主提供服务,它们之间互为主备,互相同步数据。

MMM架构中,对外提供的访问IP分为写VIP和读VIP。写服务访问写VIP,读服务访问读VIP中的一个。

当主挂掉之后,主和主备之间的同步也会中断,MMM工具会把原来挂在主服务器的多个salve迁移到主备上面,并且把写VIP也迁移到主备服务器上。

当某个从挂掉之后,比如从-1宕机,MMM管理工具会根据slave的负载情况,把原来绑定在从-1的读VIP-1迁移到其他的从服务器上,比如迁移到读VIp-3。这时,实际上,在从-3服务器上,就绑定了两个读VIP。

2、组成MMM架构需要的资源
资源 数量 说明
主DB 2 用于主备模式的主主复制的配置
从DB 0-N 可以配置0到多台从服务器
IP地址 2N+1 每个实例有一个物理IP和一个虚拟IP,再加上一个监控工具使用的IP
监控用户 1 用于监控数据库状态的MySQL用户(拥有replication client权限)
代理用户 1 用于MMM的agent端用于改变read_only状态(拥有super、replication client、process权限)
复制用户 1 用于配置MySQL复制的MySQL用户(拥有replication slave权限)
3、配置MMM架构的步骤

(1)配置主主复制的集群架构

(2)安装yum扩展源

(3)安装所需的perl支持包

(4)安装MMM工具包

(5)配置并启用MMM服务

4、MMM架构的优缺点

(1)优点:

提供了读写VIP的配置,使读写请求都可以达到高可用

工具包相对完善,不需要额外开发脚本

完成故障转移后,可以持续对MySQL集群进行高可用监控

(2)缺点

(2.1)故障切换简单粗暴易丢事务

在MMM架构中,有两个主,互为主备,主下面又挂了多个从,但当主挂掉后,并不能保证主备一定是事务完全同步的,也并不能保证主备相对于从来说,数据完整性是最接近于主的。

这点可以通过在主备之间采用5.7版本以后开始支持的半同步复制来解决,使得主备的数据相对于从的数据来说,是最接近与主的。

(2.2)不支持基于GTID的复制方式

目前MMM社区已经缺少了必要的维护,因此对于新推出的基于GTID的复制方式,MMM
架构是不支持的

要解决该问题,只能执行修改MMM管理工具中的perl脚本来实现。

(2.3)社区并不活跃,很久未更新版本

5、MMM架构的适用场景

(1)使用基于日志点复制的主从复制方式

(2)当前正在使用主主复制的架构,可以考虑使用MMM管理工具来进行管理

(3)需要考虑读高可用的场景

MMM架构同时提供了读VIP和写VIP,而MHA架构则只提供了写VIP,也就是说在MHA中,并不会对slave的宕机进行监控。

 

三、MHA架构

1、概述

在监控服务器上,需要安装mha_manage和mha_node组件,在被监控的服务器上需要安装mha_node组件。

当master挂掉后,mha工具会从当前多个slave中找到数据同步最接近master的slave,将其提升为master,将写VIP迁移到新的master,并配置其他slave对新的master进行数据同步。

2、组成MHA架构需要的资源
资源 数量 说明
主DB 1 用于初始主从复制的master服务器
从DB 2~N 可以配置2到N台slave服务器
监控服务 1 用于监控
IP地址 N+2 N为MySQL服务器实例的数量, 另外两个分别用于写VIP和监控服务
监控用户 1 用于监控数据库状态的MySQL用户(all privileges)
复制用户 1 用于配置MySQL复制的MySQL用户(replication slave)
3、配置MHA架构的步骤

(1)配置一主多从的复制架构

(2)安装centos的yum扩展源及依赖包

(3)配置集群内各主机的ssh免认证

(4)在各节点安装mha_node软件

(5)在管理节点安装mha_manager

(6)配置并启动MHA管理进程

4、MHA架构的优点

(1)支持基于GTID的复制和基于日志点的复制方式

相比于MMM架构工具只支持基于日志点的复制方式,MHA添加了对基于GTID的复制方式的支持

(2)可以从多个slave中选举最合适的新master

(3)会尝试从旧的master中尽可能多的保存未同步日志

这一步可以保证在master宕机后,可以尽可能少的丢失事务。相比于MMM架构,MHA在这点上是MMM没有做到的。

4、MHA架构的缺点

(1)未必一定能获取到旧主未同步的日志

可以使用5.7版本以后开始支持的半同步复制来解决,通过半同步复制,可以很大程度的保证slave接收到master全部的二进制日志,这样就可以大幅度降低事务丢失的风险。

但与此同时,采用半同步复制虽然可以很大程度的降低事务丢失的风险,但也在一定程度上降低了事务写性能,因此需要进行一定的取舍。

(2)需要自行开发写VIP迁移脚本

虽然MHA提供了脚本模板,但要保证整个脚本都能正常运行,还需要我们具备一定的开发能力。

(3)只监控master,而没有对slave实现高可用

因为mha并没有对slave的监控,因此我们需要采用额外的方式来对slave进行监控

5、MHA适用场景

(1)使用基于GTID的主从复制方式

因为MMM架构只支持基于日志点复制的方式,因此如果我们的主从复制采用的是基于GTID的复制,那我们就只能选择MHA架构

(2)使用一主多从的复制架构

因为MMM架构必须要有两个主互为主备,下面再挂上多个slave,因此如果我们使用的是一主多从的架构,因为只有一主,就搭建不了MMM架构,这时也只能选择MHA架构

(3)希望更少的数据丢失的场景