探索MySQL高可用架构之MHA(1)node
-----构建mysql高可用系列(共9篇)mysql
什么是高可用性?sql
不少公司的服务都是24小时*365天不间断的。好比Call Center。这就要求高可用性。再好比购物网站,必须随时均可以交易。那么当购物网的server挂了一个的时候,不能对业务产生任何影响。这就是高可用性。数据库
如何处理failover?服务器
解释failover,意思就是当服务器down掉,或者出现错误的时候,能够自动的切换到其余待命的服务器,不影响服务器上App的运行。网络
以MySQL为例,什么样的架构才能保证其高可用性呢?架构
MySQL replication with manual failoverssh
同步数据是采用MySQL replication的方法,在MySQL分表分块到主从已经解释。简单的说就是从库根据主库的日志来作相应的处理,保证数据的一致。一般还配合MySQL Proxy或Amoeba等进行读写分离减小服务器压力。ide
manual failover,显然当Master挂掉时,利用本方式是须要手动来处理failover,通常来讲是将slave更改成server。oop
Master-Master with MMM manager(Multi-Master Replication Manager)
同步数据的方式是Multi-Master Replication Manager,在MySQL分表分块到主从解释,多主多从的设置,是一个loop环形,每一个DB既是前一个DB的Slave又是后一个的Master。优点就在于,一个Master挂掉,也还能够继续DB操做。每一个DB均可以进行读写,分散压力。
Heartbeat/SAN
处理failover的方式是Heartbeat,Heartbeat能够当作是一组程序,监控管理各个node间链接的网络。当node出现错误时,自动启动其余node开始服务。Heartbeat必须解决的一个问题就是split brain,在网络中的一个node down掉后,每一个node都会认为其余node down掉并尝试开始服务,由于产生数据冲突。
经过SAN来共享数据
SAN:Storage Area Network,是一种LAN来处理大数据量的传输,提供了计算机和存储系统之间的数据传输。各个计算机组成的集群能够经过SAN共享存储。
Heartbeat/DRBD
处理failover的方式依旧是Heartbeat。
同步数据使用DRBD:Distributed Replicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。和SAN网络不一样,它并不共享存储,而是经过服务器之间的网络复制数据。
MySQL Cluster
MySQL Cluster也是由各个DB node组成一个cluster,在这个cluster中由网络链接。能够自由的增减node的个数来对应数据库压力。
MySQL高可用性大杀器之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。整个故障转移过程对应用程序彻底透明。
在MHA自动故障切换过程当中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不老是可行的。例如,若是主服务器 硬件故障或没法经过ssh访问,MHA无法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,能够大大下降数据丢失的风险。MHA能够与半同步复制结合起来。若是只有一个slave已经收到了最新的二进制日志,MHA能够将最 新的二进制日志应用于其余全部的slave服务器上,所以能够保证全部节点的数据一致性。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另一台充当从库,由于至少须要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。