MySQL高可用

MySQL 高可用集群

一、核心概念

  • 高可用(HA) :保障数据库服务持续在线、数据不丢失,核心指标 RTO(恢复时间)RPO(数据丢失量)
  • 主流方案主从复制(基础)MGR(官方原生强一致)MHA(主从自动切换)PXC/Galera(多主同步)

二、方案对比(生产选型)

1. 主从复制(Master-Slave)

  • 原理:主库写 binlog,从库异步 / 半同步重放,一主多从、读写分离。
  • 优点:简单、兼容好、性能高、成本低。
  • 缺点自动切换需外部工具、异步有数据丢失风险。
  • 适用:中小业务、非核心、读写分离。

2. MGR(MySQL Group Replication)

  • 原理 :基于 Paxos 共识,多数派确认提交,单主 / 多主模式。
  • 优点强一致(RPO=0)、自动选主、故障自愈、原生支持。
  • 缺点:仅 InnoDB、必须主键、对大事务敏感、网络要求高。
  • 适用核心交易、金融、高可靠场景

3. MHA(Master High Availability)

  • 原理 :主从 + Manager 节点,自动探测、选最优从库升主
  • 优点:切换快(秒~分钟)、支持多引擎、兼容旧版。
  • 缺点:Manager 单点、需 SSH 互信、版本停更(2018)。
  • 适用:已有主从、需低成本自动切换。

4. PXC(Percona XtraDB Cluster)

  • 原理 :Galera 同步复制、多主全可写、强一致。
  • 优点:去中心化、无单点、多活、延迟低。
  • 缺点:仅 InnoDB、性能受最慢节点影响、DDL 受限。
  • 适用:多机房、高并发写入、强一致。

方案速览

表格

方案 一致性 切换 复杂度 场景
主从 弱 / 半同步 手动 / MHA 通用、读写分离
MGR 强一致 自动(秒级) 核心、金融
MHA 半同步 自动(秒级) 主从升级
PXC 强一致 自动(秒级) 多活、高并发

三、MGR 集群(重点)

1. 核心特性

  • 模式单主(推荐)(一主多从只读)、多主(全节点可写)。
  • 节点数3/5/7 奇数节点(防脑裂),最大 9 个。
  • 要求 :MySQL 5.7+、GTID=ON、binlog=ROW、InnoDB、主键。
  • 通信端口:3306(业务)+33061(组通信)。

2. 关键配置(my.cnf)

ini

复制代码
[mysqld]
server-id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_format=ROW
log_slave_updates=ON
binlog_checksum=NONE
transaction_write_set_extraction=XXHASH64

# MGR
plugin_load_add=group_replication.so
group_replication_group_name="UUID"
group_replication_local_address="IP:33061"
group_replication_group_seeds="IP1:33061,IP2:33061,IP3:33061"
group_replication_single_primary_mode=ON  # 单主
group_replication_bootstrap_group=OFF

3. 部署步骤

  1. 安装 MySQL 8.0、配置 hosts、关闭防火墙 / SELinux。
  2. 所有节点配置 my.cnf、启动 MySQL。
  3. 安装 MGR 插件、创建复制用户。
  4. 首节点引导集群(bootstrap=ON),其他节点加入。
  5. 查看集群状态:SELECT * FROM performance_schema.replication_group_members;

4. 故障切换

  • 主库宕机:自动选举新主(秒级),业务短暂中断。
  • 原主恢复:自动加入为从节点(SECONDARY)
  • 脑裂防护:多数派机制(>N/2 节点存活)。

5. 生产最佳实践

  • 单主模式优先、节点 3 个、网络延迟 < 5ms。
  • 禁止大事务(<5MB)、拆分批量 DML、避开高峰 DDL。
  • 监控:成员状态、复制延迟、流控、事务异常。

四、主从 + MHA(经典方案)

1. 架构

  • 1 主 2 从、MHA Manager(独立节点)、VIP+Keepalived。
  • 主故障:自动选最新从库升主、切换 VIP、其他从库指向新主。

2. 核心配置

  • 主从开启半同步GTID
  • MHA 配置文件定义主从、用户、VIP、切换脚本。
  • 节点间SSH 免密

3. 优缺点

  • 优:成熟、切换快、兼容好、成本低。
  • 缺:Manager 单点、维护复杂、无官方更新。

五、高可用关键组件

1. 读写分离

  • ProxySQL/MaxScale/MySQL Router:读写路由、负载均衡、故障屏蔽。
  • 应用层:写主库、读从库。

2. 负载均衡与 VIP

  • LVS/HAProxy/Keepalived:提供统一入口、故障漂移。

3. 监控告警

  • Prometheus+Grafana+Alertmanager:监控连接数、延迟、状态、磁盘、CPU。

六、生产选型建议

  1. 中小业务 / 非核心:主从 + 读写分离 + 手动切换。
  2. 核心 / 金融 / 高可靠MGR 单主(3 节点)+MySQL Router + 监控
  3. 已有主从、低成本升级:MHA+Keepalived。
  4. 多机房 / 多活写入:PXC/Galera。

七、常见问题与避坑

  • MGR 大事务 :提交超时、节点卡住 → 拆分事务
  • 脑裂 :网络分区双主 → 奇数节点 + 多数派
  • 数据不一致 :主从异步丢失 → MGR 强一致 / 半同步
  • 性能损耗:MGR 共识、PXC 同步 → 合理分片、优化事务。

八、总结

  • MGR 是 MySQL 官方高可用标准方案,强一致、自动切换,适合核心业务。
  • 主从 + MHA成熟稳定、成本低,适合存量架构。
  • 高可用 =架构冗余 + 自动切换 + 数据一致 + 完善监控
相关推荐
2301_7775993712 小时前
SQL如何高效提取大表前几行:分页查询与OFFSET优化.txt
jvm·数据库·python
2301_8135995512 小时前
CSS如何实现纯CSS树状目录结构_利用-checked与递归思维构建交互节点
jvm·数据库·python
PGCCC12 小时前
PostgreSQL DBA 进阶:从日常运维到生产级性能与高可用实战
运维·postgresql·dba
m0_5145205712 小时前
SQL中如何获取前N个最大值并排除自己_利用窗口函数限制
jvm·数据库·python
ATCH IERV12 小时前
如何在 Spring Boot 中配置数据库?
数据库·spring boot·后端
2401_8822737212 小时前
SQL中如何对分组字段进行格式化输出_函数嵌套与GROUP BY
jvm·数据库·python
m0_5887584812 小时前
如何在 Go 中为权威 DNS 服务器实现持久化 DNS 记录存储
jvm·数据库·python
观测云12 小时前
观测云 x AI Agent:运维智能化的范式跃迁实践
大数据·运维·人工智能
NINGMENGb12 小时前
被误读的“传播力”——Infoseek如何量化媒体投放的“质量”而非“数量”
运维·人工智能·媒体·ai监测·舆情监测·舆情监测系统
鬼蛟12 小时前
Sentinel
java·开发语言·数据库