MHA概念
来历
MHA(Master High Availability)由日本DeNA公司youshimaton开发,是一套MySQL高可用性环境下故障切换和主从提升的高可用软件。
优点
其具有自动故障检测和故障转移的功能,可以在检测到mysql发生故障时,10~30秒之内自动完成数据库的故障切换操作,远快于手动切换,且能在切换过程中,最大程度上保证数据的一致性。
节省资源,仅部署一个Manager节点就能管理多个复制。
安装简单,且不需要修改现有的复制部署。
具有在线主库切换的功能,能够快速且安全的切换当前运行的主库到一个新的主库中。
限制
主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。
manager和node的服务器间可通过ssh访问。当服务器硬件故障或无法通过ssh访问时,MHA会无法保存到主库的二进制日志,只会进行故障转移而丢失最新数据。使用 MySQL的半同步复制,可以大大降低数据丢失的风险。
组成
manager管理节点
可单独部署在一台独立机器上,也可以部署在一台slave节点上。用于管理多个master/slave集群, 每个master/slave集群称作一个application。就像一个将军可以统领多个军队。
node数据节点
其运行在每台mysql服务器上,不论是master还是slave,其会接收manager发的指令。在manager检测到当前的master出现故障时,node可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。
工作原理
保存宕机的master的二进制日志事件
识别具有最新更新的slave
应用差异的中继日志到其他slave
应用从master保存二进制日志事件
提升一个slave为新的master
使用其他slave指向新的master进行复制
MHA工具
masterha_check_ssh 检查 MHA的SSH配置情况
masterha_check_repl 检查 MySQL 复制状况
masterha_manager 启动 MHA
masterha_check_status 检测当前MHA运行状态
masterha_master_monitor 检测 Master 是否宕机
masterha_master_switch 手动Master节点切换
masterha_conf_host 添加或删除配置的server信息
masterha_stop 关闭MHA服务的工具
下列为node节点的工具,通常由Manager节点的脚本触发,无需人工操作
save_binary_logs 保存和复制Master节点的binlog日志
apply_diff_relay_logs 识别差异的中级日志时间并将其应用到其他slave
filter_mysqlbinlog 去除不必要的 ROOLBACK 事件(已经废弃)
purge_relay_logs 清除中继日志
secondary_check_script 检测master的可用性
master_ip_failover_script 更新application使用的master的ip
report_script 发送报告
init_conf_load_script 加载初始配置参数
master_ip_online_change_script 更新master节点ip地址