集群方案
问题
MySQL 有哪些集群方案?Group Replication 和 Galera Cluster 有什么区别?各数据库的集群方案如何选择?
答案
MySQL 集群方案
| 方案 | 类型 | 一致性 | 复杂度 | 适用场景 |
|---|---|---|---|---|
| 主从复制 | 异步/半同步 | 最终一致 | 低 | 通用 |
| MGR | Paxos 协议 | 强一致 | 中 | 金融级高可用 |
| PXC/Galera | 同步多主 | 强一致 | 中 | 多主写入 |
| InnoDB Cluster | MGR + Router + Shell | 强一致 | 中 | MySQL 官方推荐 |
MGR(MySQL Group Replication)
MySQL 5.7.17 引入的基于 Paxos 协议 的高可用方案:
两种模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 单主模式 | 只有 Primary 可写,自动选主 | 推荐,简单可靠 |
| 多主模式 | 所有节点可写,冲突检测 | 需要多点写入 |
MGR 写入流程(单主模式):
InnoDB Cluster
MySQL 官方推荐的完整高可用方案 = MGR + MySQL Router + MySQL Shell:
| 组件 | 作用 |
|---|---|
| MGR | 数据复制和一致性 |
| MySQL Router | 代理层,自动路由读写 |
| MySQL Shell | 管理工具,集群配置/监控 |
PXC/Galera Cluster
Percona XtraDB Cluster 基于 Galera 库实现同步多主复制:
- 所有节点都可以读写
- 写入时同步到所有节点(同步复制)
- 使用认证机制解决冲突
| 对比 | MGR | PXC/Galera |
|---|---|---|
| 协议 | Paxos | Galera 认证 |
| 复制 | 多数派确认 | 全部节点确认 |
| 冲突处理 | 先提交胜出 | 写集认证 |
| 延迟 | 较低 | 较高(全同步) |
| 官方支持 | Oracle 官方 | Percona/MariaDB |
其他数据库的集群方案
Redis 集群
详见 Redis 集群方案:
- 主从 + 哨兵:自动故障转移
- Redis Cluster:16384 哈希槽分片
MongoDB 集群
详见 MongoDB 分片与复制:
- Replica Set:自动选主
- Sharded Cluster:分片 + 路由
PostgreSQL 集群
| 方案 | 说明 |
|---|---|
| 流复制 | 内置主从复制 |
| Patroni | 基于 etcd/ZK 的自动故障转移 |
| Citus | 分布式扩展,水平分片 |
| pgpool-II | 连接池 + 读写分离 |
方案选型建议
| 场景 | 推荐方案 |
|---|---|
| 一般业务 | 主从复制 + 半同步 + MHA |
| 强一致场景(金融) | MGR/InnoDB Cluster |
| 多主写入 | PXC/Galera |
| 超大规模 | 分库分表 + 主从 |
| PostgreSQL | Patroni + 流复制 |
常见面试问题
Q1: MGR 和传统主从复制的区别?
答案:
| 对比 | 主从复制 | MGR |
|---|---|---|
| 协议 | binlog 异步/半同步 | Paxos 共识 |
| 一致性 | 最终一致 | 强一致(多数派确认) |
| 故障转移 | 手动或 MHA | 自动选主 |
| 数据安全 | 可能丢数据 | 不丢(多数派) |
| 节点数 | 1 主 N 从 | 建议 3/5/7 奇数个 |
Q2: MySQL 集群最少需要几个节点?
答案:
- 主从复制:至少 2 个(1 主 1 从),推荐 1 主 2 从
- MGR:至少 3 个(Paxos 多数派需要 N/2+1),推荐 3 或 5 个
- PXC/Galera:至少 3 个,避免脑裂
奇数个节点可以在网络分区时明确多数派。
Q3: MGR 的限制有哪些?
答案:
- 必须使用 InnoDB 引擎
- 每个表必须有主键
- 不支持 XA 事务(分布式事务)
- 不支持外键级联操作
- 单主模式下只有一个节点可写
- 建议节点数不超过 9 个
- 大事务可能导致同步延迟