MySQL高可用平台须要达到的目标有如下几点:html
一、数据一致性保证这个是最基本的同时也是前提,若是主备的数据的不一致,那么切换就没法进行,固然这里的一致性也是一个相对的,可是要作到最终一致性。node
二、故障快速切换,当master故障时这里能够是机器故障或者是实例故障,要确保业务能在最短期切换到备用节点,使得业务受影响时间最短。这里也能够指业务例行维护操做,好比前面提到的没法使用在线进行DDL的DDL操做,不少分表批量的DDL操做,这些操做经过在线切换方式来滚动完成。数据库
三、简化平常维护,经过高可用平台来自动完成高可用的部署、维护、监控等任务,可以最大程度的解放DBA手动操做,提升平常运维效率。安全
四、统一管理,当复制集不少的状况下,可以统一管理高可用实例信息、实例信息、监控信息、切换信息等。服务器
五、高可用的部署要对现有的数据库架构无影响,若是由于部署高可用,须要更改或者调整数据库架构则会致使成本增长。架构
六、魅族RDS平台须要高可用支持,这个高可用平台也是做为RDS的一个子模块,为RDS提供高可用支持、切换等服务。框架
MHA做为线上MySQL高可用方案,主要基于以下几点:运维
一、自动探测,多重检测ssh
二、部署简单,对现有架构无影响性能
三、自动补齐数据,维护数据一致性
四、切换过程当中支持调用其余脚本的接口
五、支持在线切换
六、开源,perl编写,二次开发相对较容易
七、多实例集中管理
而这些特色中,支持调用外部脚本接口和在线切换尤其重要,固然perl编写,二次开发相对容易,能够根据本身业务需求适当的增长功能也不是难事。
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就任于Facebook公司)开发,是一套优秀的做为MySQL高可用性环境下故障切换和主从提高的高可用软件。在MySQL故障切换过程当中,MHA能作到在10~30秒以内自动完成数据库的故障切换操做,而且在进行故障切换的过程当中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA可以在较短的时间内实现自动故障检测和故障转移,一般在10-30秒之内;在复制 框架中,MHA可以很好地解决复制过程当中的数据一致性问题,因为不须要在现有的 replication中添加额外的服务器,仅须要一个manager节点,而一个Manager能管理多套复制,因此能大大地节约服务器的数量;另外,安装简单,无性能损耗,以及不须要修改现 有的复制部署也是它的优点之处。
MHA还提供在线主库切换的功能,可以安全地切换当前运行的主库到一个新的主库中 (经过将从库提高为主库),大概0.5-2秒内便可完成。
该软件由两部分组成: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已经支持一主一从。
一、保存master上的全部binlog事件
二、找到含有最新binlog位置点的slave
三、经过中继日志将数据恢复到其余的slave
四、将包含最新binlog位置点的slave提高为master
五、将其余从库slave指向新的master原slave01 并开启主从复制
六、将保存下来的binlog恢复到新的master上
一、监控全部node节点MHA功能说明:
二、自动故障切换(failover)
前提是必须有三个节点存在,而且有两个从库
(1)选主前提,按照配置文件的顺序进行,可是若是此节点后主库100M以上relay-log 就不会选
(2)若是你设置了权重,总会切换带此节点;通常在多地多中心的状况下,通常会把权重设置在本地节点。
(3)选择s1为新主
(4)保存主库binlog日志
三、从新构建主从
(1)将有问题的节点剔除MHA
进行第一阶段数据补偿,S2缺失部分补全90
(2)s1切换角色为新主,将s2指向新主S1
s2 change master to s1
(3) 第二阶段数据补偿
将保存过来的新主和原有主缺失部分的binlog,应用到新主。
(4)虚拟IP漂移到新主,对应用透明无感知
(5)通知管理员故障切换