MGR
MGR, 即MySQL Group Replication(组复制),是MySQL官方推荐的一款高可用集群方案。MGR基于分布式协议Paxos,实现组复制,彻底解决了传统的异步复制和半同步复制中数据一致性无法保证的问题。
使MySQL的使用领域更加广泛,可以涉足互联网金融行业。

当客户端发起一个更新事务时,该事务先在本地执行。
执行完成之后,在发起事务的提交之前,会将产生的write set广播到其他节点,集群中节点进行冲突检测。
如果冲突检测成功,达成一致,组内决定该事务可以提交,其它成员可以应用,否则就回滚。
最终,所有组内成员以相同的顺序接收同一组事务。因此组内成员以相同的顺序应用相同的修改,保证组内数据强一致性。
MGR的两种模式:
单主模式
组复制具有自动选主功能,每次只有一个 Server成员接受更新,其它成员只提供读服务。
多主模式
所有的Server 成员都可以同时接受更新,没有主从之分,成员角色是完全对等的。
基于复制的冗余
基于MySQL原生的复制。

复制工作过程包括:
- 主库将数据更改记录到Binary Log
- 从库将主库上的二进制日志复制到自己的Relay log
- 从库读取中继日志,将主库的修改重放到从库上
基于复制的高可用方案主要包括MMM和MHA。
3.1 MMM
MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主主切换时刻备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slave的read负载均衡。

3.2 MHA
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。




