加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL高可用架构之MHA的原理解析

发布时间:2021-12-25 09:36:17 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍了MySQL高可用架构之MHA的原理分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 MHA 服务有两种角色,MHA Manager(管理节点)和MHA Node(数据节点): MHA Manag
这篇文章主要介绍了MySQL高可用架构之MHA的原理分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
  
MHA 服务有两种角色,MHA Manager(管理节点)和MHA Node(数据节点):
 
MHA Manager:通常单独部署在一台独立的机器上或者直接部署在其中一台slave上(不建议后者),管理多个master/slave集群,每个master/slave集群称作一个application;其作用有二:
 
(1)master自动切换及故障转移命令运行
 
(2)其他的帮助脚本运行:手动切换master;master/slave状态检测
 
MHA node:运行在每台MySQL服务器上(master/slave/manager),它通过监控具备解析和清理logs功能的脚本来加快故障转移。其作用有:
 
(1)复制主节点的binlog数据
 
(2)对比从节点的中继日志文件
 
(3)无需停止从节点的SQL线程,定时删除中继日志
 
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。
 
我们自己使用其实也可以使用1主1从,但是master主机宕机后无法切换,以及无法补全binlog。master的mysqld进程crash后,还是可以切换成功,以及补全binlog的。
 
官方介绍: https://code.google.com/p/mysql-master-ha/
 
下图展示了如何通过MHA Manager管理多组主从复制。可以将MHA工作原理总结为如下:
 
MySQL高可用架构之MHA的原理分析
 
(1)从宕机崩溃的master保存二进制日志事件(binlog events);
 
(2)识别含有最新更新的slave;
 
(3)应用差异的中继日志(relay log)到其他的slave;
 
(4)应用从master保存的二进制日志事件(binlog events);
 
(5)提升一个slave为新的master;
 
(6)使其他的slave连接新的master进行复制;
 
MHA组件
(1)、 Manager工具:
 
– masterha_check_ssh : 检查MHA的SSH配置。
 
– masterha_check_repl : 检查MySQL复制。
 
– masterha_manager : 启动MHA。
 
– masterha_check_status : 检测当前MHA运行状态。
 
– masterha_master_monitor : 监测master是否宕机。
 
– masterha_master_switch : 控制故障转移(自动或手动)。
 
– masterha_conf_host : 添加或删除配置的server信息。
 
(2)、 Node工具(这些工具通常由MHAManager的脚本触发,无需人手操作)。
 
– save_binary_logs : 保存和复制master的二进制日志。
 
– apply_diff_relay_logs : 识别差异的中继日志事件并应用于其它slave。
 
– filter_mysqlbinlog : 去除不必要的ROLLBACK事件(MHA已不再使用这个工具)。
 
– purge_relay_logs : 清除中继日志(不会阻塞SQL线程)。
 
(3)、自定义扩展:
 
-secondary_check_script:通过多条网络路由检测master的可用性;
 
-master_ip_failover_script:更新application使用的masterip; (需要修改)
 
-shutdown_script:强制关闭master节点;
 
-report_script:发送报告;
 
-init_conf_load_script:加载初始配置参数;
 
-master_ip_online_change:更新master节点ip地址;(需要修改)
 
MHA环境准备
OS:CentOS 6.8
 
MySQL :5.7.18
 
MHA 软件包: MHA 0.57
 
角色            ip地址                 主机名                server_id               "类型 "
Master       10.180.2.163       MHA-M1            13306                     "写入 "
S1              10.180.2.164      MHA-S1              23306                     "读 "  (其实可以一起部署监控,一组MHA 可以多个监控节点)
S2              10.180.2.165      MHA-S2              33306                     "读 ","监控复制组 " (监控一般不能部署到master 节点,防止Master 宕机不能切换)
 
安装完成将产生文件如下:
 
[root@MHA-S1 bin]# ll
total 48-r-xr-xr-x 1 root root 16381 Aug  7 14:06 apply_diff_relay_logs-r-xr-xr-x 1 root root  4807 Aug  7 14:06 filter_mysqlbinlog
lrwxrwxrwx 1 root root    26 Aug  8 17:10 mysql -> /usr/local/mysql/bin/mysql
lrwxrwxrwx 1 root root    32 Aug  8 17:09 mysqlbinlog -> /usr/local/mysql/bin/mysqlbinlog-r-xr-xr-x 1 root root  8261 Aug  7 14:06 purge_relay_logs-rwxr-xr-x 1 root root   314 Aug  8 16:21 purge_relay.sh-r-xr-xr-x 1 root root  7525 Aug  7 14:06 save_binary_logs
[root@MHA-S1 bin]# pwd/usr/local/bin
 
[root@MHA-S2 bin]# pwd/usr/local/bin
[root@MHA-S2 bin]# ll
total 140-r-xr-xr-x 1 root root 16381 Aug  7 14:07 apply_diff_relay_logs-r-xr-xr-x 1 root root  4807 Aug  7 14:07 filter_mysqlbinlog-rwxr-xr-x 1 root root   166 Aug  9 17:18 manager.sh-r-xr-xr-x 1 root root  1995 Aug  7 17:28 masterha_check_repl-r-xr-xr-x 1 root root  1779 Aug  7 17:28 masterha_check_ssh-r-xr-xr-x 1 root root  1865 Aug  7 17:28 masterha_check_status-r-xr-xr-x 1 root root  3201 Aug  7 17:28 masterha_conf_host-r-xr-xr-x 1 root root  2517 Aug  7 17:28 masterha_manager-r-xr-xr-x 1 root root  2165 Aug  7 17:28 masterha_master_monitor-r-xr-xr-x 1 root root  2373 Aug  7 17:28 masterha_master_switch-r-xr-xr-x 1 root root  5171 Aug  7 17:28 masterha_secondary_check-r-xr-xr-x 1 root root  1739 Aug  7 17:28 masterha_stop-rwxr-xr-x 1 root root  2169 Aug  9 10:49 master_ip_failover-rwxr-xr-x 1 root root  3648 Aug  7 17:30 master_ip_failover.old-rwxr-xr-x 1 root root 10369 Aug 12 21:33 master_ip_online_change-rwxr-xr-x 1 root root  9870 Aug  7 17:30 master_ip_online_change.old
lrwxrwxrwx 1 root root    26 Aug  8 17:10 mysql -> /usr/local/mysql/bin/mysql
lrwxrwxrwx 1 root root    32 Aug  8 17:09 mysqlbinlog -> /usr/local/mysql/bin/mysqlbinlog-rw------- 1 root root     0 Aug 12 20:04 nohup.out-rwxr-xr-x 1 root root 11867 Aug  7 17:30 power_manager-r-xr-xr-x 1 root root  8261 Aug  7 14:07 purge_relay_logs-rwxr-xr-x 1 root root   314 Aug  8 16:20 purge_relay.sh-r-xr-xr-x 1 root root  7525 Aug  7 14:07 save_binary_logs-rwxr-xr-x 1 root root  1360 Aug  7 17:30 send_report
复制相关脚本到/usr/local/bin目录(软件包解压缩后就有了,不是必须,因为这些脚本不完整,需要自己修改,这是软件开发着留给我们自己发挥的,如果开启下面的任何一个脚本对应的参数,而对应这里的脚本又没有修改,则会抛错,自己被坑的很惨)
 
[root@MHA-S2 scripts]# ll
total 32
-rwxr-xr-x 1 root root  3443 Jan  8  2012 master_ip_failover                #自动切换时vip管理的脚本,不是必须,如果我们使用keepalived的,我们可以自己编写脚本完成对vip的管理,比如监控mysql,如果mysql异常,我们停止keepalived就行,这样vip就会自动漂移
-rwxr-xr-x 1 root root  9186 Jan  8  2012 master_ip_online_change           #在线切换时vip的管理,不是必须,同样可以可以自行编写简单的shell完成
-rwxr-xr-x 1 root root 11867 Jan  8  2012 power_manager                     #故障发生后关闭主机的脚本,不是必须
-rwxr-xr-x 1 root root  1360 Jan  8  2012 send_report                       #因故障切换后发送报警的脚本,不是必须,可自行编写简单的shell完成。
[root@MHA-S2 scripts]# cp * /usr/local/bin/

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读