MySQL高可用架构之MHA的原理解析
发布时间:2021-12-26 00:59:24 所属栏目:MySql教程 来源:互联网
导读:这篇文章主要介绍了MySQL高可用架构之MHA的原理分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 MHA 服务有两种角色,MHA Manager(管理节点)和MHA Node(数据节点): MHA Manager
这篇文章主要介绍了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/ (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |