MySQL高可用架构

来源:互联网 发布:junit数据库自动回滚 编辑:程序博客网 时间:2024/06/05 17:50

MySQL学习笔记


一,高可用架构

对于一个企业来讲,设计一个高可用的架构非常重要,包括前端的高可用和后端数据库的高可用。企业业务每暂停一分钟,可能会造成大量的金钱流失,因此只有在整个架构的设计上足够的高可用,才可以保证应用程序对外提供不间断的服务,进而把因软件/硬件/人为造成的故障对业务的影响降低到最小程度,把损失降低到最低。

MySQL数据库高可用方面的两个主流架构:MMM和MHA。


二,MMM架构

MMM(Master-Master replication manager for MySQL)是一套支持双主故障切换和双主日常管理的脚本程序。MMM使用Perl语言开发,主要用来监控和管理MySQL Master-Master(双主)复制,虽然叫做双主复制,但是业务上同一时刻只允许对一个主进行写入,另一台备选主上提供部分读服务,以加速在主猪切换时备选主的预热,可以说MMM这套脚本程序一方面实现了故障切换的功能,另一方面其内部附加的工具脚本也可以实现多个slaves的read负载均衡。

这里写图片描述

MMM提供了自动和手动两种方式移除一组服务器中复制延迟较高的服务器的虚拟IP,同时它还可以备份数据、实现两节点之间的数据同步等。

由于MMM无法完全地保证数据一致性,所以MMM适用于对数据的一致性要求不是很高,但是又想最大程度的保证业务可用性的场景,对于那么对数据的一致性要求很高的业务,非常不建议采用MMM这种高可用架构。


三,MHA架构

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,是一套优秀的作为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。整个故障转移过程对应用程序是完全透明的。

在MHA自动故障切换过程中,MHA视图从宕掉的主服务器上保存二进制日志,最大程度低保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新数据。使用MySQL5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此它们彼此保持一致性。

目前MHA主要支持一主多从的架构,搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另一台充当从库,因为至少需要三台数据库,出于机器成本考虑,淘宝也在此基础上进行了改造,目前淘宝TMHA已经支持一主一从。

MHA Manager管理多组主从复制,如图。
这里写图片描述

MHA的工作原理总结为以下几条:
1,从宕机奔溃的master保存二进制日志事件(binlog events);
2,识别含有最新更新的slave;
3,应用差异的中继日志(relay log)到其他slave;
4,应用从master保存的二进制日志事件(binlog events);
5,提升一个slave为新的master;
6,使其他的slave连接性的master进行复制。


四,参考资料

《深入浅出MySQL 数据库开发、优化与管理维护》

原创粉丝点击