一、MHA概述
1.简介
-
MHA能够在较短的时间内实现自动故障检测和故障转移,通常在10-30秒以内;在复制框架中,MHA能够很好地解决复制过程中的数据一致性问题,由于不需要在现有的replication中添加额外的服务器,仅需要一个manager节点,而一个Manager能管理多套复制,所以能大大地节约服务器的数量;另外,安装简单,无性能损耗,以及不需要修改现有的复制部署也是它的优势之处。
-
MHA还提供在线主库切换的功能,能够安全地切换当前运行的主库到一个新的主库中(通过将从库提升为主库),大概0.5-2秒内即可完成。
-
MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以独立部署在一台独立的机器上管理多个Master-Slave集群,也可以部署在一台Slave上。当Master出现故障时,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master。整个故障转移过程对应用程序是完全透明的。
2.原理
- 当Master出现故障时,它可以自动将最新数据的Slave提升为新的Master,然后将所有其他的Slave重新指向新的Master。
整个故障转移过程对应用程序是完全透明的。
3.原理图解
1 2 3 4 5 6 7 8 9 10 11 12 |
#原理步骤 1.主库出现故障,立刻保存binlog(主库上的node节点) 2.对比多个从的relay-log找出数据最新的从库(从库上的node节点) 3.将数据最新的从库数据同步到其他从库 4.将数据最新的从库提升为主库(我们可以指定某一台机器优先提升为主库) 5.通过出现故障主库的binlog补全新的主库数据 6.其他从库重新做主从,以新的主库为主 #问题: 1.如果主库断电,如何保存binlog,或者将binlog给新的主库同步? 2.relay-log不是一直保存,执行完会删除,那如果删除怎么对比数据最新的从库? 3.从库开启binlog,也不记录,那么提升为主库之后,从库如何同步? |
4.MHA架构
1 2 3 4 5 6 7 8 9 |
#MHA架构特点: 1.MHA属于C/S结构(manager,node) 2.manager尽量避免和master主库放在一起 3.一个manager节点可以管理多套主从集群 4.所有的机器都要安装node节点 5.manager是通过ssh协议去管理node节点的,所以所有机器之间都要做ssh免密 6.MHA可以在mysql主从运行中添加,不影响mysql的使用 7.主库的binlog是node节点进行保存的 8.从库提升为主库也是由node节点完成的 |
二、MHA工具
1.manager相关工具
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#解压源码包 [root@db01 ~]# tar xf mha4mysql-manager-0.56.tar.gz #查看工具 [root@db01 ~]# ll mha4mysql-manager-0.56/bin/ masterha_check_repl #检查主从复制状态 masterha_check_ssh #检查ssh免密连接 masterha_check_status #检查MHA启动状态 masterha_conf_host #配置主机信息的工具 [server2] hostname=10.0.0.52 port=3306 [server3] hostname=10.0.0.53 port=3306 masterha_manager #manager的启动程序 masterha_master_monitor #监控MHA主节点状态 masterha_master_switch #切换主库 masterha_secondary_check #建立TCP连接工具 masterha_stop #停止MHA工具 #我们手动需要使用的工具: masterha_check_repl masterha_check_ssh masterha_manager masterha_stop |
2.node节点相关工具
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#解压包 [root@db01 ~]# tar xf mha4mysql-node-0.56.tar.gz #查看工具 [root@db01 ~]# ll mha4mysql-node-0.56/bin/ #对比从库的relay-log,选出数据最新的从库 apply_diff_relay_logs #防止数据回滚 filter_mysqlbinlog #删除relay-log,我们要关闭自动删除relay-log purge_relay_logs #保存binlog日志 save_binary_logs |
三、MHA优点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
1)Masterfailover and slave promotion can be done very quickly 自动故障转移快 2)Mastercrash does not result in data inconsistency 主库崩溃不存在数据一致性问题 3)Noneed to modify current MySQL settings (MHA works with regular MySQL) 不需要对当前mysql环境做重大修改 4)Noneed to increase lots of servers 不需要添加额外的服务器(仅一台manager就可管理上百个replication) 5)Noperformance penalty 性能优秀,可工作在半同步复制和异步复制,当监控mysql状态时,仅需要每隔N秒向master发送ping包(默认3秒),所以对性能无影响。你可以理解为MHA的性能和简单的主从复制框架性能一样。 #ping www.baidu.com(icmp协议) #sql ping 检测主库是否存活 6)Works with any storage engine 只要replication支持的存储引擎,MHA都支持,不会局限于innodb |