MySQL InnoDB Cluster(Group Replication + MySQL Router)
MySQL难度: 高级耗时: 90–120 分钟用同一数据中心内 3 台(或 5–9 台)已安装的 MySQL 服务器搭建 single-primary InnoDB Cluster:通过 MySQL Shell AdminAPI 执行 dba.configureInstance、createCluster 以及用 clone 方式 addInstance;MySQL Router bootstrap(6446 RW / 6447 RO),cluster.status() 监控,failover 测试,以及 quorum 丢失、完全宕机和 rolling restart 的 runbook。最终得到一个 primary 故障时自动 failover、应用通过 Router 连接的集群。远程站点或简单的读扩展请使用传统复制;已有集群的日常运维请使用 InnoDB Cluster 运维指南。
架构: 3–9 个 MySQL 节点 + 1 台 Router 服务器
开始之前
- 所有节点上都已安装相同小版本的 MySQL …(DBAtlas MySQL 单机安装指南),GTID 已启用,每个节点的 server_id 不同。操作系统 root 可以用 mysql 无密码连接。
- 节点 2..… 上没有需要保留的数据:加入集群时会通过 clone 获得节点 1(…)的副本,现有数据会被删除。
- 节点 1 上的所有表都是 InnoDB 且有主键(Group Replication 的要求)。检查查询必须返回空结果。
- 节点之间可通过 3306(MySQL 及 Group Replication 通信)、33060(X Protocol)和 33061 端口互访;Router 服务器可通过 3306/33060 访问各节点。延迟低(同一数据中心;< 1–2 ms)。
- 时钟已同步(chrony)。
- 节点数为奇数(…):… 个节点最多可容忍 … 个节点丢失。偶数个节点不会增加容错能力。
- 已为集群管理员账户(…)准备好强密码(至少 8 个字符,包含大小写字母、数字、特殊字符)。MySQL Shell 和 Router 在步骤中以不回显方式提示输入密码;并指示 Shell 不保存密码。
- Router 服务器可以访问 repo.mysql.com(本指南会添加 MySQL 仓库)。
指南阶段
- 准备(所有 MySQL 节点) — 在防火墙中开放集群端口 · 向 SELinux 注册 Group Replication 端口 · 添加集群设置(…) · 重启 MySQL · 安装 MySQL Shell
- 实例配置(dba.configureInstance) — 创建集群管理员账户(…) · 远程检查各实例
- 创建集群 — 创建集群 · 将节点加入集群(…) · 检查集群状态
- MySQL Router — 添加 MySQL 仓库(Router 服务器) · 安装 Router 和 Shell · Bootstrap Router · 启动 Router 服务 · 在防火墙中开放 Router 端口 · 测试通过 Router 的连接
- 验证与监控 — 详细状态 · 用 SQL 监控成员
- Failover 测试 — Failover:停止 primary · Failover:停止 primary · Failover:查看新的 primary · Failover:查看新的 primary · Failover:Router 是否路由到新的 primary · Failover:Router 是否路由到新的 primary …
- Quorum 丢失与完全宕机 — Quorum:诊断状态 · Quorum:诊断状态 · Quorum:用存活的分区强制建立 quorum · Quorum:用存活的分区强制建立 quorum · Quorum:在恢复的节点上停止旧组(…) · Quorum:在恢复的节点上停止旧组(…) …
- Rolling restart(维护) — Rolling:重启 secondary(…) · Rolling:重启 secondary(…) · Rolling:移交 primary 角色 · Rolling:移交 primary 角色 · Rolling:重启旧的 primary · Rolling:重启旧的 primary …