MySQL高可用详细解析

核心基础:MySQL 复制机制

所有高可用方案都基于 Binlog 复制,分为三种同步模式:

1. 异步复制(默认)

  • 原理:主库执行事务 → 写入 Binlog → 立即返回成功;从库异步拉取 Binlog 并重放。
  • 优点:性能最好、无延迟阻塞。
  • 缺点 :主库宕机可能丢失未同步的 Binlog(RPO>0)。

2. 半同步复制(Semisync)

  • 原理 :主库提交前,至少等待一个从库确认收到 Binlog 并写入 Relay Log,超时(如 1s)自动退化为异步。
  • 优点:大幅降低数据丢失风险。
  • 缺点:写 RT 增加、网络敏感。

3. 组复制(MGR 同步)

  • 原理 :基于 Paxos 共识,事务需 多数派节点确认 才能提交。
  • 优点 :强一致(RPO=0)、自动选主、无数据丢失。
  • 缺点:性能损耗、对网络延迟敏感(同机房 RTT<1ms)。

主从复制流程(三步曲)

  1. 主库:Dump 线程 发送 Binlog 给从库。
  2. 从库:IO 线程 接收并写入 Relay Log
  3. 从库:SQL 线程 重放 Relay Log,保持数据一致。

二、主流高可用方案详解

方案 1:主从复制 + Keepalived(入门级)

架构:1 主 + 1/2 从 + Keepalived(VIP 漂移)。

  • 故障检测 :VRRP 心跳 + MySQL 状态探测(mysqladmin ping)。
  • 切换:主库宕机 → 从库抢占 VIP → 应用无感知(秒级)。
  • 优点:简单、低成本、易运维。
  • 缺点:异步有丢数风险、半同步性能下降、无自动选主逻辑。
  • 适用:中小业务、非核心系统、数据量 <1TB。

方案 2:MHA(Master High Availability)

架构:1 主 + 多从 + MHA Manager(独立节点)+ MHA Node(每 DB 节点)。

  • 核心能力
    • 自动检测主库故障。
    • 选主:选 数据最新、位点最前 的从库。
    • 补数据:从宕机主库抢救 Binlog,补全差异。
    • 切换:VIP 漂移、其他从库重定向到新主。
  • 切换时间:10--30 秒。
  • 优点:成熟稳定、支持任意引擎、数据丢失少。
  • 缺点:依赖 SSH、无维护、云环境受限、不支持多主。
  • 适用:传统主从、中大型业务、数据量 <5TB。

方案 3:MySQL Group Replication(MGR,官方推荐)

架构:3/5/7 奇数节点集群(单主模式推荐)。

  • 核心原理(Paxos 共识)
    1. 事务本地执行 → 生成 写集(WriteSet)
    2. 广播写集 → 多数派(n/2+1)验证通过 → 全局排序。
    3. 所有节点提交 → 返回成功。
  • 两种模式
    • 单主模式:一主写、多从读;自动选主、无冲突、生产首选。
    • 多主模式:全节点读写;需冲突检测、易回滚、谨慎使用。
  • 优点:强一致(RPO=0)、自动故障转移(<10s)、原生、去中心化。
  • 缺点:仅 InnoDB、必须有主键、大事务 / 长事务敏感、网络要求高。
  • 适用:核心交易、金融、云原生、数据量 <10TB。

方案 4:PXC/Galera Cluster(Percona XtraDB Cluster)

架构:多节点同步复制、全节点可读可写。

  • 原理:基于 Galera 协议,事务认证(Certification)+ 全局排序。
  • 优点:强一致、多主、秒级切换、读扩展好。
  • 缺点:写性能随节点下降、DDL 阻塞集群、仅 InnoDB、资源消耗大。
  • 适用:高并发写入、实时系统、多活部署。

方案 5:MySQL InnoDB Cluster(MGR 企业套件)

  • 组件:MGR + MySQL Shell + MySQL Router(路由代理)。
  • 能力:可视化管理、自动路由、故障自愈、读写分离、弹性扩缩。
  • 定位:官方完整高可用栈,替代 MHA/PXC,生产首选标准化方案。

三、方案对比(核心指标)

表格

方案 一致性 RPO RTO 写性能 运维 适用
主从 + Keepalived 最终一致 有丢失 秒--分钟 ★★★★★ 中小非核心
MHA 近强一致 极少丢失 10--30s ★★★★ 传统主从
MGR/InnoDB Cluster 强一致 0 <10s ★★★ 中高 核心金融
PXC/Galera 强一致 0 <5s ★★★ 多写高并发

四、高可用关键机制

1. 故障检测

  • 心跳:节点间定时探测(TCP/HTTP/MySQL 探针)。
  • 阈值:连续 N 次失败 → 标记故障。
  • 脑裂规避奇数节点 + 多数派投票(MGR/PXC)。

2. 选主策略(核心)

  • GTID 优先:选择已执行事务最多、数据最新的节点。
  • 权重优先:按硬件 / 配置权重选举。
  • 位点优先:Binlog 位置最接近主库。

3. 数据一致性保障

  • GTID:全局事务 ID,保证事务唯一、不重复、可断点续传。
  • 并行复制:从库多线程重放,降低延迟。
  • 冲突检测:MGR/PXC 基于写集认证,并发修改同一行则回滚。

4. 读写分离(性能扩展)

  • 中间件:ProxySQL、MaxScale、ShardingSphere。
  • 路由:写→主、读→从;按延迟 / 负载均衡。
  • 一致性读 :关键业务强制读主、或 WAIT_FOR_EXECUTED_GTID 等待同步。

五、生产实践要点

1. 部署规范

  • 节点数 :MGR/PXC 用 3/5 奇数节点
  • 机房:同机房低延迟;跨机房用同城双活、避免跨城 MGR。
  • 硬件:同配置、高 IO、低网络延迟。

2. 配置优化(MGR 示例)

ini

复制代码
plugin-load-add=group_replication.so
group_replication_single_primary_mode=ON   # 单主
group_replication_enforce_update_everywhere_checks=OFF
group_replication_gtid_assignment_block_size=1000000
group_replication_member_weight=50         # 选主权重

3. 监控指标

  • 复制状态、延迟、事务队列、节点状态。
  • 流量、RT、冲突率、大事务数。
  • 磁盘、CPU、网络、连接数。

4. 故障演练

  • 单节点宕机:自动切换验证。
  • 网络分区:脑裂规避验证。
  • 主库硬件故障:数据完整性验证。

5. 常见坑

  • 大事务:MGR/PXC 长事务易超时、冲突、阻塞。
  • 无主键:MGR 必须主键,否则性能极差。
  • 跨城部署:延迟高 → 共识失败、性能暴跌。
  • 脑裂:双主同时写 → 数据不一致。

六、选型建议

  1. 初创 / 中小业务主从 + 半同步 + Keepalived → 简单低成本。
  2. 传统企业 / 主从存量MHA → 平滑升级、兼容旧系统。
  3. 核心 / 金融 / 云原生MySQL 8.0 + InnoDB Cluster(MGR) → 官方强一致、自动 HA。
  4. 多写 / 高并发实时PXC → 多活、强一致、读写并行。

七、总结

MySQL 高可用从 主从异步(基础)→ 半同步(安全)→ MGR/PXC(强一致自动) 演进。生产优先选 InnoDB Cluster(MGR 单主),兼顾一致性、可靠性与运维成本;非核心可用主从 + Keepalived;传统架构可用 MHA。最终需按业务一致性要求、性能、规模、运维能力综合选型。

相关推荐
蓝之静云2 小时前
mapper执行sql报空指针,需要传入参数
数据库·python·sql
always_TT2 小时前
用位运算交换两个数(不使用临时变量)
数据库
一直都在5722 小时前
Redis(三)
数据库·redis·bootstrap
葳_人生_蕤2 小时前
hot100——双指针法专题
java·前端·数据库
M1nat0_2 小时前
Linux基础 Ext 文件系统:从磁盘硬件到目录路径的全链路解析
linux·服务器·网络·数据库
蜡台2 小时前
macOS 无法启动 MySQL服务解决
数据库·mysql·macos
执笔论英雄2 小时前
vLLM V1 Scheduler的调度逻辑&优先级分析
数据库·mysql
Omics Pro2 小时前
基因集(模块)活性量化:R语言+Java原生
大数据·开发语言·前端·javascript·数据库·r语言·aigc
wdfk_prog2 小时前
MCU内核电压不稳导致程序跑飞的现象、原因与影响
数据库·单片机·嵌入式硬件