MySQL MHA (Master High Availability) 架构
MySQL MHA (Master High Availability) 架构
1. MHA 架构概述
graph TB
MHA_Manager[MHA Manager]
Master[(Master DB)]
Slave1[(Slave DB 1)]
Slave2[(Slave DB 2)]
Slave3[(Slave DB 3)]
MHA_Manager -->|监控| Master
MHA_Manager -->|监控| Slave1
MHA_Manager -->|监控| Slave2
MHA_Manager -->|监控| Slave3
Master -->|复制| Slave1
Master -->|复制| Slave2
Master -->|复制| Slave3
2. MHA 工作原理
sequenceDiagram
participant Manager as MHA Manager
participant Master as Master DB
participant Slave1 as Slave1 DB
participant Slave2 as Slave2 DB
Manager->>Master: 定期检测存活状态
Manager->>Slave1: 定期检测存活状态
Manager->>Slave2: 定期检测存活状态
Note over Master: Master发生故障
Manager->>Master: 检测到故障
Manager->>Slave1: 检查复制状态
Manager->>Slave2: 检查复制状态
Manager->>Slave1: 应用剩余日志
Manager->>Slave1: 提升为新Master
Manager->>Slave2: 指向新Master
3. MHA 核心组件
-
MHA Manager
- 负责监控Master节点
- 执行故障检测
- 执行自动故障转移
- 管理复制关系
-
MHA Node
- 运行在每个MySQL服务器上
- 执行日志传输
- 提供远程命令执行能力
4. 故障转移流程
graph TD
A[检测到Master故障] --> B[确认Slave状态]
B --> C[选择最新的Slave]
C --> D[应用未传输的日志]
D --> E[提升Slave为新Master]
E --> F[调整其他Slave指向]
F --> G[更新路由配置]
5. 具体实例说明
假设有如下配置:
- Master: 192.168.1.100
- Slave1: 192.168.1.101
- Slave2: 192.168.1.102
- MHA Manager: 192.168.1.200
配置示例:
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/var/lib/mysql
remote_workdir=/var/log/masterha
[server1]
hostname=192.168.1.100
candidate_master=1
[server2]
hostname=192.168.1.101
candidate_master=1
[server3]
hostname=192.168.1.102
no_master=1
6. MHA 优势特点
-
数据一致性保证
- 保存所有中继日志
- 应用所有未传输的日志
- 确保零数据丢失
-
快速故障转移
- 通常在10秒内完成
- 自动化程度高
- 无需人工干预
-
灵活的配置选项
- 支持复杂的拓扑结构
- 可自定义故障转移策略
- 支持脚本扩展
7. 注意事项
-
网络要求
- 各节点间需要SSH互通
- 网络延迟要求低
- 带宽要求适中
-
配置建议
- 建议至少3个节点
- 关键业务建议使用GTID
- 定期进行故障演练
-
监控建议
- 配置邮件告警
- 集成现有监控系统
- 记录详细日志

浙公网安备 33010602011771号