七十二、【Linux数据库】MySQL数据库MHA集群概述 、 部署MHA集群
MHA架构全景图
MySQL MHA 集群概述
MHA 核心功能
- 自动故障转移:主库故障时自动提升新主
- 数据一致性:确保故障切换后数据完整
- 主从监控:实时检测复制状态
- 透明切换:应用层无需修改配置
- 在线切换:计划内维护不中断服务
架构组件
组件 | 功能描述 | 部署位置 |
---|---|---|
MHA Manager | 监控主从状态、执行故障转移 | 独立服务器 |
MHA Node | 运行在主从库,执行具体命令 | 所有数据库服务器 |
VIP管理 | 虚拟IP漂移,实现透明切换 | 主库服务器 |
一、环境准备
1. 服务器规划
角色 | IP地址 | 主机名 |
---|---|---|
主库 | 192.168.1.101 | master |
从库1 | 192.168.1.102 | slave1 |
从库2 | 192.168.1.103 | slave2 |
MHA Manager | 192.168.1.100 | manager |
2. 配置SSH互信
# 所有节点生成密钥
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# ssh-copy-id root@master
[root@localhost ~]# ssh-copy-id root@slave1
[root@localhost ~]# ssh-copy-id root@slave2
[root@localhost ~]# ssh-copy-id root@manager
3. 安装MySQL主从复制
# 主库配置
[root@master ~]# vi /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=row# 从库配置
[root@slave1 ~]# vi /etc/my.cnf
[mysqld]
server-id=2
relay-log=relay-bin
read-only=1# 启动主从复制(参考主从配置章节)
二、MHA 集群部署
1. 安装依赖包
# 所有节点安装Perl模块
[root@localhost ~]# yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y
2. 安装MHA Node
# 所有数据库节点安装
[root@master ~]# yum install https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.noarch.rpm -y
3. 安装MHA Manager
# Manager节点安装
[root@manager ~]# yum install https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.noarch.rpm -y
4. 配置MHA
# 创建配置目录
[root@manager ~]# mkdir -p /etc/mha# 编辑配置文件
[root@manager ~]# vi /etc/mha/app1.cnf
[server default]
manager_workdir=/var/log/mha/app1
manager_log=/var/log/mha/app1/manager.log
ssh_user=root
repl_user=repl
repl_password=ReplPass123!
ping_interval=3[server1]
hostname=192.168.1.101
port=3306
candidate_master=1[server2]
hostname=192.168.1.102
port=3306
candidate_master=1[server3]
hostname=192.168.1.103
port=3306
no_master=1
5. 配置VIP漂移
# 安装ARPing
[root@master ~]# yum install arping -y# 编辑VIP脚本
[root@manager ~]# vi /usr/bin/vip_manager
#!/bin/bash
VIP=192.168.1.200
INTERFACE=eth0
case $1 instart)ssh $2 "ip addr add $VIP/24 dev $INTERFACE"ssh $2 "arping -c 3 -A -I $INTERFACE $VIP";;stop)ssh $2 "ip addr del $VIP/24 dev $INTERFACE";;
esac# 添加执行权限
[root@manager ~]# chmod +x /usr/bin/vip_manager# 配置MHA使用VIP
[root@manager ~]# vi /etc/mha/app1.cnf
master_ip_failover_script=/usr/bin/vip_manager
三、启动与测试
1. 检查MHA配置
[root@manager ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
Wed Jul 21 15:30:01 2025 - [info] All SSH connection tests passed successfully.[root@manager ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
MySQL Replication Health is OK.
2. 启动MHA监控
[root@manager ~]# nohup masterha_manager --conf=/etc/mha/app1.cnf > /var/log/mha/app1/manager.log 2>&1 &
3. 查看监控状态
[root@manager ~]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:1234) is running(0:PING_OK), master:192.168.1.101
4. 故障转移测试
# 模拟主库故障
[root@master ~]# systemctl stop mysqld# 查看MHA日志
[root@manager ~]# tail -f /var/log/mha/app1/manager.log
...
Wed Jul 21 15:32:22 2025 - [info] Master failover to 192.168.1.102(192.168.1.102:3306) completed successfully.
...# 验证VIP漂移
[root@slave1 ~]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000inet 192.168.1.200/24 scope global secondary eth0
5. 在线切换
# 计划内切换
[root@manager ~]# masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --new_master_host=192.168.1.103 --orig_master_is_new_slave
命令总结表格
演示命令 | 功能描述 | 关键参数 |
---|---|---|
masterha_check_ssh --conf=file | 检查SSH连接 | 配置文件路径 |
masterha_check_repl --conf=file | 检查复制状态 | 配置文件路径 |
masterha_manager --conf=file | 启动MHA监控 | 后台运行 |
masterha_check_status --conf=file | 查看MHA状态 | 显示运行状态 |
masterha_stop --conf=file | 停止MHA监控 | 无 |
masterha_master_switch --conf=file | 手动主从切换 | --new_master_host 新主库 |
master_ip_failover_script=path | VIP管理脚本 | 故障转移时执行 |
ip addr add VIP dev eth0 | 添加虚拟IP | VIP地址 |
arping -c 3 -A -I eth0 VIP | 广播ARP更新 | 通知网络设备 |
no_master=1 | 禁止提升为主 | 配置特定从库 |
功能作用详解
1. MHA 工作流程
故障转移流程
2. 数据一致性保障
差异日志处理
# 从库差异日志保存
save_binary_logs --command=save --start_pos=12345 --binlog_dir=/backup/binlogs
半同步增强
# 配置文件添加
[server default]
check_repl_delay=0
check_repl_filter=0
3. 高可用架构设计
推荐架构
多Manager防单点
# 备用Manager配置
[root@backup-manager ~]# masterha_secondary_check --conf=/etc/mha/app1.cnf