目录标题
“方式四:单主复制(MySQL Group Replication)”在多云环境中如何设计部署,特别是云 A/B/C 三个节点的场景。
下面给你详细解释这类架构的思路和设计建议:
方式四:MySQL Group Replication 单主模式的多云部署(云 A/B/C)
1. 架构设计
-
单主模式意味着:
- Group Replication 集群中只有一个主写节点(Primary),其他节点作为只读副本(Secondary)。
- MGR 内部会自动检测主节点故障,触发主节点切换(Failover)。
-
云 A、云 B、云 C 各部署一个 MySQL 节点,组成 MGR 三节点组。
+----------------+ +----------------+ +----------------+
| 云 A Node | | 云 B Node | | 云 C Node |
| MySQL MGR Node | | MySQL MGR Node | | MySQL MGR Node |
| (Primary) | | (Secondary) | | (Secondary) |
+-------+--------+ +-------+--------+ +-------+--------+
| | |
Group Replication (Paxos + GTID + Conflict Detection)
| | |
+------------------------------------------------------------------+
| 跨云网络(VPN / 专线) |
+------------------------------------------------------------------+
2. 部署和配置要点
2.1 网络要求
- 要求跨云网络低延迟、稳定(VPN、专线、VPC Peering 等)。
- 因为 MGR 依赖 Paxos 协议,延迟过高会影响性能和切换速度。
2.2 MySQL 配置示例(每个节点)
[mysqld]
server_id=云A-1/云B-2/云C-3(唯一)
gtid_mode=ON
enforce_gtid_consistency=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
log_slave_updates=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address="ip:port" # 本节点地址
loose-group_replication_group_seeds="云A_ip:port,云B_ip:port,云C_ip:port"
loose-group_replication_bootstrap_group=OFF(云A启动时为ON)
loose-group_replication_single_primary_mode=ON # 单主模式
loose-group_replication_enforce_update_everywhere_checks=ON
2.3 启动顺序
- 先在云 A 节点启动 group replication,执行
SET GLOBAL group_replication_bootstrap_group=ON;
来启动集群。 - 其他节点加入集群后,将该值置为 OFF。
2.4 故障自动切换
- MGR 内部自动检测主节点失效。
- 通过 Paxos 协议选举新主节点(只能有一个 Primary)。
- 应用层访问通过 MySQL Router 或 ProxySQL,它们支持自动路由到当前主节点。
3. 优缺点总结
优点 | 缺点 |
---|---|
官方集成的高可用方案,支持自动主备切换 | 跨云网络延迟高可能导致写延迟增加 |
数据一致性保证,支持强一致性读写 | 配置和运维复杂,需专门监控集群状态和网络稳定性 |
支持自动故障切换,无需外部 orchestrator | 不支持多主写入,单主模式写性能瓶颈 |
应用连接透明切换,MySQL Router 或 ProxySQL 支持 | 跨云故障切换时延较长,可能会导致部分写请求失败或阻塞 |
4. 多云环境下最佳实践
- 使用专线或 VPN 做低延迟网络连接。
- 使用 GTID 和 Row-Based 复制保证事务完整性。
- 配置 MySQL Router 或 ProxySQL 做读写分离和路由控制。
- 监控网络延迟和复制延迟,预警异常。
- 在业务允许范围内,评估写操作集中到单云主节点减少跨云写延迟。
Kubernetes Operator 来部署 MySQL Group Replication(单主模式)
好的!以下是基于 Kubernetes Operator 来部署 MySQL Group Replication(单主模式)的示例模板和配置示例。这个示范适合跨多云环境的三节点集群(云 A/B/C 各一节点)。
1. Kubernetes Operator 部署模板示例(基于通用 MySQL Operator)
说明:示例基于通用 MySQL Operator 设计,具体 Operator(如 Percona MySQL Operator 或 Oracle MySQL Operator)语法可做适当调整。
apiVersion: mysql.oracle.com/v1alpha1
kind: MysqlCluster
metadata:
name: mysql-mgr-cluster
namespace: mysql
spec:
replicas: 3
version: "8.0.32"
mode: GroupReplication
groupReplication:
groupName: "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee" # UUID
singlePrimaryMode: true
localAddress: "POD_IP:33061" # 用环境变量或Pod自动设置
groupSeeds:
- "mysql-mgr-cluster-0.mysql-mgr-cluster.mysql.svc.cluster.local:33061"
- "mysql-mgr-cluster-1.mysql-mgr-cluster.mysql.svc.cluster.local:33061"
- "mysql-mgr-cluster-2.mysql-mgr-cluster.mysql.svc.cluster.local:33061"
bootstrapGroupOnStart: false # 只有第一个节点启动时为true
mysqlConf:
gtid_mode: "ON"
enforce_gtid_consistency: "ON"
log_bin: "ON"
binlog_format: "ROW"
transaction_write_set_extraction: "XXHASH64"
log_slave_updates: "ON"
master_info_repository: "TABLE"
relay_log_info_repository: "TABLE"
binlog_checksum: "NONE"
group_replication_enforce_update_everywhere_checks: "ON"
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1
memory: 2Gi
storage:
size: 20Gi
storageClassName: standard
2. MySQL 配置参数重点(my.cnf 或 Operator 配置片段)
[mysqld]
server_id=自动唯一
gtid_mode=ON
enforce_gtid_consistency=ON
log_bin=binlog
binlog_format=ROW
transaction_write_set_extraction=XXHASH64
log_slave_updates=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
binlog_checksum=NONE
# Group Replication 相关
group_replication_group_name=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
group_replication_start_on_boot=OFF
group_replication_local_address=本节点IP:33061
group_replication_group_seeds=云A_ip:33061,云B_ip:33061,云C_ip:33061
group_replication_bootstrap_group=OFF (启动第一个节点时手动改为ON)
group_replication_single_primary_mode=ON
group_replication_enforce_update_everywhere_checks=ON
# 其他性能和安全相关
sync_binlog=1
innodb_flush_log_at_trx_commit=1
3. 启动集群操作步骤示例(手动或自动脚本)
# 1. 启动第一个 Pod 后,登录进入 MySQL,执行:
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
# 2. 其他 Pod 启动后,登录依次执行:
mysql> START GROUP_REPLICATION;
# 3. 查看集群状态
mysql> SELECT * FROM performance_schema.replication_group_members;
4. 应用访问层
- 部署 MySQL Router 或 ProxySQL 服务
- Router/ProxySQL 配置指向 Group Replication 集群,自动感知主节点变更
- 应用层只连接 Router/ProxySQL,无需感知主节点切换
5. 多云部署建议
- 使用 Kubernetes Federation 或多集群管理工具管理云 A/B/C 三个 Kubernetes 集群
- Operator 分别部署到每个集群,配置好 groupSeeds(跨云节点IP或域名)
- 采用专线或 VPN 连接跨云网络,保证低延迟稳定连接
- 监控网络延迟和复制延迟,预警异常