MHA(Master High Availability)是一款开源的 MySQL 的高可用程序,目前在MySQL高可用方面是一个相对成熟的解决方案,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点,在此期间,MHA 会通过于其它从节点获取额外信息来避免一致性方面的问题。MHA 还提供了 master 节点的在线切换功能,即按需切换 master/slave 节点。MHA由日本DeNA公司的youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
MHA主要由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。
MHA Manager:
通常单独部署在一台独立机器上管理多个 master/slave 集群(组),每个 master/slave 集群称作一个 application,用来管理统筹整个集群。
MHA node:
运行在每台 MySQL 服务器上(master/slave/manager),它通过监控具备解析和清理 logs 功能的脚本来加快故障转移。
主要是接收管理节点所发出指令的代理,代理需要运行在每一个 mysql 节点上。简单讲 node 就是用来收集从节点服务器上所生成的 bin-log 。对比打算提升为新的主节点之上的从节点的是否拥有并完成操作,如果没有发给新主节点在本地应用后提升为主节点。
在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。
目前MHA主要支持一主多从的架构。要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库。
每个复制组内部和 Manager 之间都需要ssh实现无密码互连,只有这样,在 Master 出故障时, Manager 才能顺利的连接进去,实现主从切换功能。
MHA工作原理
MHA提供了如下功能:
MHA软件由两部分组成,Manager工具包和Node工具包,具体的说明如下。
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:(工具由MHA Manager的脚本自动触发)
save_binary_logs
:保存和复制 master 的二进制日志apply_diff_relay_logs
:识别差异的中继日志事件并应用于其他 slavepurge_relay_logs
:清除中继日志(不会阻塞 SQL 线程)自定义扩展:
secondary_check_script
:通过多条网络路由检测master的可用性master_ip_failover_script
:更新application使用的masteripreport_script
:发送报告init_conf_load_script
:加载初始配置参数master_ip_online_change_script
;更新master节点ip地址实验环境
要做到以下几点要求
首先检测半同步主从复制状况
检测复制功能
masterha_check_repl -conf=/etc/masterha/mha.cnf
在 master 节点关闭 mariadb 服务,模拟主节点数据崩溃
killall -9 mysqld mysqld_safe
rm -rf /var/lib/mysql/*
在 manger 节点查看日志
tail -100 /etc/masterha/manager.log
注意,故障转移完成后, manager将会自动停止, 此时使用 masterha_check_status 命令检测将会遇到错误提示
提供新的从节点以修复复制集群
原有 master 节点故障后,需要重新准备好一个新的 Mariadb 节点。基于来自于master 节点的备份恢复数据后,将其配置为新的 master 的从节点即可。
可用启动参数介绍:
--remove_dead_master_conf 该参数代表当发生主从切换后,老的主库的 IP 将会从配置文件中移除。
--manger_log 日志存放位置
--ignore_last_failover 在缺省情况下,如果 MHA 检测到连续发生宕机,且两次宕机间隔不足 8 小时的话,则不会进行 Failover,之所以这样限制是为了避免 ping-pong 效应。该参数代表忽略上次 MHA 触发切换产生的文件,默认情况下,MHA 发生切换后会在日志目录,也就是设置的/data 产生 app1.failover.complete 文件,下次再次切换的时候如果发现该目录下存在该文件将不允许触发切换,除非在第一次切换后收到删除该文件,为了方便,这里设置为--gnore_last_failover。
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --gnore_last_failover < /dev/null &> /var/log/masterha/app1/manager.log &
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
加入交流群
请使用微信扫一扫!