MySQL的MHA高可用配置及故障切换

发布时间 2024-01-04 19:47:32作者: 打开方式不对

MHA高可用

MHA(MasterHigh Availability)

传统MySQL主从架构存在单点故障问题 ,怎么解决呢?

传统上是根据keepalived来实现高可用

目前还有个较成熟的软件MHA,它可以在切换的过程中最大程度上保证数据的一致性,以达到真正意义上的高可用

mysql 集群高可用方案:

单主:keepalived MHA MMM

多主:MySQL cluster PXC

MHA工作原理

MHA Manager 可以单独部署在一台独立的机器上,管理多个 master-slave 集群;也可以部署在一台 slave 节点上。 MHA NoDe 运行在每台MySQL服务器上,MHA Manager 会定时探测集群中的 master 节点。当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。整个故障转移过程对应用程序完全透明。

manage节点:定时探测master的运行状态

MHA 的特点

●自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失

●使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性

目前MHA支持一主多从架构,最少三台服务,即一主两从

 

MHA部署过程

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软件