简介node
MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就任于Facebook公司)开发,是一套优秀的做为MySQL高可用性环境下故障切换和主从提高的高可用软件。在MySQL故障切换过程当中,MHA能作到在0~30秒以内自动完成数据库的故障切换操做,而且在进行故障切换的过程当中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。mysql
该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager能够单独部署在一台独立的机器上管理多个master-slave集群,也能够部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它能够自动将最新数据的slave提高为新的master,而后将全部其余的slave从新指向新的master。整个故障转移过程对应用程序彻底透明。linux
在MHA自动故障切换过程当中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不老是可行的。例如,若是主服务器硬件故障或没法经过ssh访问,MHA无法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,能够大大下降数据丢失的风险。MHA能够与半同步复制结合起来。若是只有一个slave已经收到了最新的二进制日志,MHA能够将最新的二进制日志应用于其余全部的slave服务器上,所以能够保证全部节点的数据一致性。sql
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另一台充当从库,由于至少须要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。MHA 适合任何存储引擎, 只要能主从复制的存储引擎它都支持,不限于支持事物的 innodb 引擎。数据库
官方介绍:https://code.google.com/p/mysql-master-ha/服务器
下图展现如何经过MHA Manager管理多组主从复制架构
能够将MHA工做原理总结为以下:app
(1)从宕机崩溃的master保存二进制日志事件(binlog events); (2)识别含有最新更新的slave; (3)应用差别的中继日志(relay log)到其余的slave; (4)应用从master保存的二进制日志事件(binlog events); (5)提高一个slave为新的master; (6)使其余的slave链接新的master进行复制;
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明以下。ssh
Manager工具包主要包括如下几个工具:工具
masterha_check_ssh 检查MHA的SSH配置情况
masterha_check_repl 检查MySQL复制情况
masterha_manger 启动MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测master是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的server信息
Node工具包(这些工具一般由MHA Manager的脚本触发,无需人为操做)主要包括如下几个工具:
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差别的中继日志事件并将其差别的事件应用于其余的slave
filter_mysqlbinlog 去除没必要要的ROLLBACK事件(MHA已再也不使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
注意:
为了尽量的减小主库硬件损坏宕机形成的数据丢失,所以在配置MHA的同时建议配置成MySQL 5.5的半同步复制。关于半同步复制原理各位本身进行查阅。(不是必须)
1.部署MHA
接下来部署MHA,具体的搭建环境以下(全部操做系统均为CentOS7.4 64bit):
IP地址 |
主机名 |
角色 |
软件 |
192.168.1.30 |
linzi |
manager |
mha4mysql-manager、mha4mysql-node |
192.168.1.25 |
KVM1 |
master |
mha4mysql-node |
192.168.1.26 |
KVM2 |
Slave1,Candicate master |
mha4mysql-node |
192.168.1.27 |
KVM3 |
Slave2 |
mha4mysql-node |
其中master对外提供写服务,备选Candicate master(实际为slave1)提供读服务,slave2也提供读服务,一旦master宕机,将会把备选master提高为新的master,slave指向新的master
(1)在全部节点安装MHA node所需的perl模块(DBD:mysql),安装脚本以下:
先要安装epel源,
Centos6安装源:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
Centos7安装源: rpm -ivh http://www.rpmfind.net/linux/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
如下设置为CentOS6操做:
[epel] name=Extra Packages for Enterprise Linux 6 - $basearch baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #将注释的#去掉 #mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch#前面加上#
yum clean all yum list
使用yum安装所有依赖
yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken
(2)上传MHA相关包,在全部的节点安装mha-node: