Mysql MHA实现主从自动切换

MHA(Master High Availability)是一种成熟的MySQL高可用解决方案,支持快速自动故障切换和数据一致性保障,适用于一主多从架构,至少需要三台服务器。MHA由管理节点和数据节点组成,能自动检测故障并将最新数据的备机升级为主机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意

在这个安装之前如果没有安装过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地址;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值