MySQL的MHA高可用配置及故障切换
MHA高可用
MHA(MasterHigh Availability)
传统MySQL主从架构存在单点故障问题 ,怎么解决呢?
传统上是根据keepalived来实现高可用
目前还有个较成熟的软件MHA,它可以在切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用
mysql 集群高可用方案:
单主:keepalived MHA MMM
多主:MySQL cluster PXC
MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。 MHA NoDe 运行在每台MySQL服务器上,MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。
●自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
●使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性
●
1)所有mysql节点都做主从复制授权,和 mha manager 访问数据库的授权
2)做时间同步和mysql的主从复制,并设置所有的从节点为只读模式
3)所有节点安装 mha node 组件,在 manager 节点上还要再安装mha manager 组件
4)所有节点做 ssh 密钥对免交互登录认证
5)在mha manager 节点上准备好 故障切换脚本 和 mha 配置文件
6)在master 节点上使用 ifconfig 创建 vip
7)使用 master_check_ssh 和 master_check_repl 做 mha 启动前检查,再使用 master_manager 启动 mha 进程
8)做故障切换测试(VIP会漂移到新master节点上, 其它的从节点会自动指向新master做主从复制,故障切换后mha进程会自动退出,配置文件自动删除旧master的配置信息)
MHA高可用实验:
1,首先配置主从复制,一主两从
修改所有服务器的mysql的主配置文件/etc/my.cnf
修改主服务器配置
修改后重启MySQL服务
修改从服务器配置
两个从服务器配置一致,只有服务id不同
修改后重启MySQL服务器
从服务器同步到主服务器
通过 show slave status\G 命令查看数据同步结果
验证主从复制是否成功
在主服务器上创建一个新库
从服务器中查看是否有同步
安装MHA软件
在所有服务器上安装MHA依赖环境
安装MHA软件前必须先安装node组件
使用perl语言进行解析,在编译安装
随后在manager节点上安装manager组件
安装manager组件后会在/usr/local/bin 下生成以下几个工具
masterha_check_ssh 检查 MHA 的 SSH 配置状况
masterha_check_repl 检查 MySQL 复制状况
masterha_manger 启动 manager的脚本
masterha_check_status 检测当前 MHA 运行状态
masterha_master_monitor 检测 master 是否宕机
masterha_master_switch 控制故障转移(自动或者手动)
masterha_conf_host 添加或删除配置的 server 信息
masterha_stop 关闭manager
安装node组件后会在/usr/local/bin 下生成以下几个脚本
save_binary_logs 保存和复制 master 的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的 slave
filter_mysqlbinlog 去除不必要的 ROLLBACK 事件(MHA 已不再使用这个工具)
purge_relay_logs 清除中继日志(不会阻塞 SQL 线程)
为四台服务器设置免密交互
#在 manager 节点上配置到所有数据库节点的无密码认证
#在 mysql1 上配置到数据库节点 mysql2 和 mysql3 的无密码认证
#在 mysql2 上配置到数据库节点 mysql1 和 mysql3 的无密码认证
# 在 mysql3 上配置到数据库节点 mysql1 和 mysql2 的无密码认证
在 manager 节点上复制相关脚本到/usr/local/bin 目录
master_ip_failover #自动切换时 VIP 管理的脚本
master_ip_online_change #在线切换时 VIP 的管理
power_manager #故障发生后关闭主机的脚本
send_report #因故障切换后发送报警的脚本
复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录,这里使用master_ip_failover脚本来管理 VIP 和故障切换
修改文件内容:
创建 MHA 软件目录并拷贝配置文件,这里使用app1.cnf配置文件来管理 mysql 节点服务器
配置如下:
第一次配置需要在 Master 节点上手动开启虚拟IP
/sbin/ifconfig ens33:1 192.168.116.100/24
在 manager 节点上测试 ssh 无密码认证,如果正常最后会输出 successfully,如下所示。
masterha_check_ssh -conf=/opt/mysql-mha/mysql_mha.cnf
在 manager 节点上测试 mysql 主从连接情况,最后出现 MySQL Replication Health is OK 字样说明正常。如下所示。
masterha_check_repl -conf=/opt/mysql-mha/mysql_mha.cnf
在manager节点上启动MHA
nohup masterha_manager \ --conf=/opt/mysql-mha/mysql_mha.cnf \ --remove_dead_master_conf \ --ignore_last_failover < /dev/null > /var/log/mha_manager.log 2>&1 &
查看MHA状态,可以看到当前的master是mysql1节点
故障模拟
模拟主服务器故障断连
可以看到VIP地址自动漂移到了从服务器mysql2上面
mysql3上的数据库同步地址也发生了更改
manager节点中的配置文件也发生了更改
在主服务器mysql1死机以后,新主服务器mysql2自动代替成为主服务器
故障修复步骤:
重新启动mysql1
在mysql1数据库中设置主从同步
在将manager中配置文件更改如下:
在重新启动MHA软件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)