核心概念
高可用(High Availability)是指系统能够持续提供服务的能力,即使部分组件发生故障。
高可用指标
| 可用性 | 年停机时间 | 级别 |
|---|---|---|
| 99% | 3.65 天 | 基础可用 |
| 99.9% | 8.76 小时 | 高可用 |
| 99.99% | 52.6 分钟 | 极高可用 |
| 99.999% | 5.26 分钟 | 电信级 |
高可用核心要素
1. 冗余:多个数据库实例
2. 监控:实时健康检查
3. 故障检测:快速发现故障
4. 自动切换:故障自动转移
5. 数据一致性:切换后数据不丢失
MHA 高可用方案
MHA 架构
MHA(Master High Availability) 是 MySQL 主从复制的高可用解决方案。
架构:
MHA Manager(监控节点)
↓
MySQL Master
↓ ↓
Slave1 Slave2
组件:
- MHA Manager:监控和管理主从
- MHA Node:部署在 MySQL 服务器上
- VIP:虚拟 IP,指向当前主库
MHA 故障切换流程
1. MHA Manager 检测到主库故障
2. 选择最新从库(binlog 最接近)
3. 等待其他从库追平 binlog
4. 提升新主库
5. 更新 VIP 指向新主库
6. 通知应用层
切换时间: 10-30 秒
MHA 配置
# MHA Manager 配置
[server default]
user=mha_repl
password=password
ssh_user=ssh_user
repl_user=repl
repl_password=password
ping_interval=1
[server1]
hostname=192.168.1.100
port=3306
candidate_master=1
[server2]
hostname=192.168.1.101
port=3306
candidate_master=1
[server3]
hostname=192.168.1.102
port=3306
# 启动 MHA
masterha_manager --conf=/etc/mha/app.cnf
# 检查状态
masterha_check_status --conf=/etc/mha/app.cnf
# 手动切换
masterha_master_switch --conf=/etc/mha/app.cnf --master_state=dead
MHA 优缺点
| 优点 | 缺点 |
|---|---|
| 切换快(10-30 秒) | 需要额外部署 Manager |
| 数据一致性好 | Manager 单点故障 |
| 成熟稳定 | 配置复杂 |
Orchestrator 高可用方案
Orchestrator 架构
Orchestrator 是 GitHub 开源的 MySQL 高可用工具。
架构:
Orchestrator(Web UI + API)
↓
MySQL Master
↓ ↓
Slave1 Slave2
特点:
- Web 界面可视化
- API 自动化
- 拓扑发现
- 故障恢复
Orchestrator 功能
1. 拓扑管理
- 自动发现主从关系
- 可视化展示
2. 故障恢复
- 自动故障检测
- 自动切换
3. 维护操作
- 主从切换
- 负载均衡
- 数据一致性检查
配置示例
{
"DatabaseSQLType": "MYSQL",
"DatabaseHost": "orchestrator-db",
"DatabasePort": 3306,
"DatabaseUser": "orchestrator",
"DatabasePassword": "password",
"DefaultRecoveryPeriod": 60,
"FailureDetectionPeriodBlock": 60,
"CoMasterRecoveryMustChooseCoMaster": true
}
# 启动 Orchestrator
orchestrator --config=/etc/orchestrator.conf.json
# API 调用
# 获取拓扑
curl http://orchestrator:3000/api/topology/cluster.alias
# 故障切换
curl -X POST http://orchestrator:3000/api/graceful-master-takeover/cluster.alias
Orchestrator 优缺点
| 优点 | 缺点 |
|---|---|
| Web 界面友好 | 学习成本高 |
| API 丰富 | 需要额外部署 |
| 自动化程度高 | 社区活跃度下降 |
MGR 高可用方案
MGR 架构
MGR(MySQL Group Replication) 是 MySQL 官方高可用方案。
多主模式:
Node1 ↔ Node2 ↔ Node3
(所有节点都可读写)
单主模式:
Primary(写)
↓
Secondary1(读)
Secondary2(读)
特点:
- 基于 Paxos 协议
- 强一致性
- 自动故障恢复
- 官方支持
MGR 配置
[mysqld]
# 基础配置
server_id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-bin
binlog_format = ROW
# MGR 配置
plugin_load_add = 'group_replication.so'
group_replication_group_name = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
group_replication_start_on_boot = ON
group_replication_local_address = '192.168.1.100:33061'
group_replication_group_seeds = '192.168.1.100:33061,192.168.1.101:33061,192.168.1.102:33061'
group_replication_bootstrap_group = OFF
group_replication_single_primary_mode = ON
-- 启动 MGR
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
-- 引导集群(首次)
SET GLOBAL group_replication_bootstrap_group = ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group = OFF;
-- 加入集群(其他节点)
START GROUP_REPLICATION;
-- 查看状态
SELECT * FROM performance_schema.replication_group_members;
MGR 优缺点
| 优点 | 缺点 |
|---|---|
| 官方支持 | 性能开销大(约 30%) |
| 强一致性 | 网络要求高 |
| 自动故障恢复 | 最多 9 个节点 |
PXC 高可用方案
PXC 架构
PXC(Percona XtraDB Cluster) 基于 Galera 的同步复制集群。
架构:
Node1 ↔ Node2 ↔ Node3
(所有节点对等,都可读写)
特点:
- 多主模式
- 同步复制
- 强一致性
- 自动故障恢复
PXC 配置
[mysqld]
# PXC 配置
server_id = 1
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_name = 'pxc-cluster'
wsrep_cluster_address = 'gcomm://192.168.1.100,192.168.1.101,192.168.1.102'
wsrep_node_name = 'node1'
wsrep_node_address = '192.168.1.100'
wsrep_sst_method = xtrabackup-v2
wsrep_sst_auth = 'sstuser:sstpassword'
# 启动第一个节点
service mysql bootstrap-pxc
# 启动其他节点
service mysql start
# 查看状态
mysql -e "SHOW STATUS LIKE 'wsrep_%'"
PXC 优缺点
| 优点 | 缺点 |
|---|---|
| 强一致性 | 性能开销大 |
| 多主模式 | 写入性能差 |
| 自动故障恢复 | 脑裂问题 |
云厂商高可用方案
AWS RDS
架构:
Primary(主库)
↓(同步)
Standby(备库,不同 AZ)
特点:
- 自动故障切换(30-60 秒)
- 自动备份
- 只读副本
- 多 AZ 部署
阿里云 RDS
架构:
主库(可用区 A)
↓(半同步)
备库(可用区 B)
特点:
- 自动故障切换(30 秒内)
- 读写分离(最多 5 个只读实例)
- 跨地域灾备
腾讯云 CDB
架构:
主库
↓
从库(同城双活)
特点:
- 自动故障切换
- 读写分离
- 异地灾备
高可用方案对比
方案对比
| 方案 | 切换时间 | 数据丢失 | 复杂度 | 成本 | 适用场景 |
|---|---|---|---|---|---|
| MHA | 10-30s | 可能 | 中 | 低 | 自建机房 |
| Orchestrator | 30-60s | 可能 | 中 | 低 | 自建机房 |
| MGR | 10-30s | 无 | 高 | 中 | 核心业务 |
| PXC | 5-10s | 无 | 高 | 中 | 强一致场景 |
| 云 RDS | 30-60s | 无 | 低 | 高 | 云上业务 |
选型建议
1. 自建机房 + 成本敏感:
→ MHA
2. 自建机房 + 自动化要求高:
→ Orchestrator
3. 核心业务 + 强一致性:
→ MGR
4. 多主写入场景:
→ PXC
5. 云上业务:
→ 云 RDS 高可用版
最佳实践
监控告警
# Prometheus 监控
groups:
- name: mysql_ha
rules:
- alert: MySQLDown
expr: mysql_up == 0
for: 1m
labels:
severity: critical
- alert: ReplicationLag
expr: mysql_slave_status_seconds_behind_master > 60
for: 5m
labels:
severity: warning
故障演练
# 定期演练故障切换
# 1. 手动关闭主库
service mysql stop
# 2. 观察自动切换
# 3. 验证应用正常
# 4. 恢复主库
service mysql start