注意
在这个安装之前如果没有安装过Mysql的主从复制,请参考这篇博文再进行以下操作:https://blog.youkuaiyun.com/java1_boy/article/details/108331303
简介
MHA(Master High Availability)是一套比较成熟的 MySQL 高可用方案,也是一款优秀的故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。MHA还支持在线快速将Master切换到其他主机,通常只需0.5-2秒。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。
MHA由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。
- MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。负责检测master是否宕机、控制故障转移、检查MySQL复制状况等。
- MHA Node运行在每台MySQL服务器上,不管是Master角色,还是Slave角色,都称为Node,是被监控管理的对象节点,负责保存和复制master的二进制日志、识别差异的中继日志事件并将其差异的事件应用于其他的slave、清除中继日志。
MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master,整个故障转移过程对应用程序完全透明。
MHA故障处理机制:
- 把宕机master的binlog保存下来
- 根据binlog位置点找到最新的slave
- 用最新slave的relay log修复其它slave
- 将保存下来的binlog在最新的slave上恢复
- 将最新的slave提升为master
- 将其它slave重新指向新提升的master,并开启主从复制
MHA优点:
- 自动故障转移快
- 主库崩溃不存在数据一致性问题
- 性能优秀,支持半同步复制和异步复制
- 一个Manager监控节点可以监控多个集群
MHA配置过程
1:服务器说明
192.168.108.116 master #主节点
192.168.108.115 slave1 #备节点
192.168.108.117 slave2 #备节点
192.168.108.118 MHA #管理节点
将以上信息分别写入每台机器的/etc/hosts文件中
2:设置服务器间无密码SSH登录
# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #此处实验没有设置密码;
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.108.115
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.108.117
# ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.108.118
上面命令是以master(192.168.108.116)服务器操作的,每台服务器都要操作以上命令,区别是:ssh-copy-id -i /root/.ssh/id_rsa.pub root@ 后的host除了自己的服务器不发送,其他的都发送此命令;
3:下载MHA
MHA下载地址 ,如果不能下载的话,可以访问百度云盘获取链接 密码 6j8j
4:对所有服务器节点操作如下命令
# yum install -y perl-DBD-MySQL
# rpm -ivh mha4mysql-node-0.54-0.el6.noarch.rpm
5:在管理节点操作如下命令
# yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager
# rpm -ivh mha4mysql-manager-0.55-0.el6.noarch.rpm
注意
所有master和slave上的配置要一致,因为任意一台服务器都有可能成为主,所以保持一致的配置不会出错,上面安装Mysql的链接 要把master的配置和slave的配置一致;
6:在管理节点服务器上建一个cnf文件进行配置 ,操作如下:
# mkdir /etc/mha
# mkdir -p /var/log/mha/app1
[root@manage mysql]# vi /etc/mha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log # mha_master自己的日志文件;
manager_workdir=/var/log/mha/app1 # mha_master自己的工作路径,需要手动创建;
master_binlog_dir=/var/lib/mysql # bin_logr日志文件路径
user=root # MHA管理服务器用户名
password=root # MHA管理服务器密码
ping_interval=2 # ping间隔时长;
repl_password=root # 数据库密码;
repl_user=root # 数据库用户名;
ssh_user=root # 基于ssh秘钥认证用户;
[server1]
hostname=192.168.108.116
port=3306
[server2]
candidate_master=1 # 将来可不可以作为master候选主节点;
check_repl_delay=0
hostname=192.168.108.115
port=3306
[server3]
hostname=192.168.108.117
port=3306
7:检查MHA是否安装成功
// 检查ssh登录
# masterha_check_ssh --conf=/etc/mha/app1.cnf
**如果看到,All SSH connection tests passed successfully,就说明ssh配置成功了
// 检查mysql replication是否配置成功
# masterha_check_repl --conf=/etc/mha/app1.cnf
**如果看到,MySQL Replication Health is OK.说明配置就可以了
8:配置到这就说明MHA可以用了,下面是启动MHA
# nohup masterha_manager --conf=/etc/mha/app1.cnf > /tmp/mha_manager.log 2>&1 & //开启MHA
# masterha_check_status --conf=/etc/mha/app1.cnf //查看状态
** 如果看到app1 (pid:13675) is running(0:PING_OK), master:192.168.10.103 //说明已经启用
9:参考命令;
manager节点:
masterha_check_ssh :MHA依赖的ssh环境监测工具
masterha_check_repl : MYSQL复制环境检测工具;
masterga_manager : MHA 服务主程序
masterha_check_status : MHA 运行状态探测工具;
masterha_master_monitor :MYSQL master节点可用性监测工具;
masterha_master_swith :master节点切换工具;
masterha_conf_host :添加或删除配置的节点;
masterha_stop :关闭MHA服务的工具。
node节点:
save_binary_logs :保存和复制master的二进制日志;
apply_diff_relay_logs :识别差异的中继日志事件并应用于其他slave;
purge_relay_logs :清除中继日志(不会阻塞SQL线程) ;自定义扩展
secondary_check_script :通过多条网络路由检测master的可用性;
master_ip_failover_script :更新application使用的masterip;
report_script :发送报告
init_conf_load_script :加载初始配置参数;
master_ip_online_change_script :更新master节点ip地址;