Skip to content
清晨的一缕阳光
返回

MySQL 高可用架构方案

核心概念

高可用(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 故障切换流程

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

特点:

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(读)

特点:

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

架构:
    主库

    从库(同城双活)
    
特点:
- 自动故障切换
- 读写分离
- 异地灾备

高可用方案对比

方案对比

方案切换时间数据丢失复杂度成本适用场景
MHA10-30s可能自建机房
Orchestrator30-60s可能自建机房
MGR10-30s核心业务
PXC5-10s强一致场景
云 RDS30-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

参考资料


分享这篇文章到:

上一篇文章
Redis vs Memcached vs Tair 缓存中间件对比
下一篇文章
Go 微服务架构实战