MySQL Group Replication 单主模式的多云部署(云 A/B/C)

“方式四:单主复制(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 RouterProxySQL,它们支持自动路由到当前主节点。

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 OperatorOracle 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 RouterProxySQL 服务
  • Router/ProxySQL 配置指向 Group Replication 集群,自动感知主节点变更
  • 应用层只连接 Router/ProxySQL,无需感知主节点切换

5. 多云部署建议

  • 使用 Kubernetes Federation 或多集群管理工具管理云 A/B/C 三个 Kubernetes 集群
  • Operator 分别部署到每个集群,配置好 groupSeeds(跨云节点IP或域名)
  • 采用专线或 VPN 连接跨云网络,保证低延迟稳定连接
  • 监控网络延迟和复制延迟,预警异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值