当前位置: 首页 > news >正文

MySQL高可用集群笔记

一、核心概念

1. 高可用指标

  • RTO (Recovery Time Objective):故障恢复时间,核心业务要求<30s
  • RPO (Recovery Point Objective):数据丢失量,核心业务要求RPO=0
  • 脑裂:网络分区导致多主同时写入,数据不一致
  • 多数派:集群节点数 >N/2 确认,才能提交事务(防脑裂)

2. 主流方案对比

表格

方案核心原理一致性切换优缺点适用场景
主从 + Keepalivedbinlog 异步 / 半同步 + VIP弱 / 半强手动 / 脚本简单、成本低;切换慢、易丢数据非核心、中小业务
MHA主从 + 自动选主半强秒级切换快;停更、SSH 依赖、单点传统主从升级
MGR (组复制)Paxos 共识、原生集群强一致 (RPO=0)自动秒级官方、自愈、多主;仅 InnoDB、大事务敏感金融、核心交易
PXC/Galera同步多主、Galera 协议强一致自动多写、无单点;仅 InnoDB、性能低多活、高并发读

二、主从复制(基础高可用)

1. 核心原理

  • 主库:写操作 → 记录binlog
  • 从库:IO 线程拉 binlog → 中继日志 → SQL 线程回放
  • 模式:异步(默认)、半同步(至少 1 从 ACK 才提交)、增强半同步

2. 关键配置(my.cnf)

主库 (server-id=1)

ini

server-id=1 log-bin=mysql-bin binlog_format=ROW # 行模式(一致性好) gtid_mode=ON # 全局事务ID(切换必备) enforce_gtid_consistency=ON binlog_rows_query_log_events=ON sync_binlog=1 innodb_flush_log_at_trx_commit=1 # 双1(安全) # 半同步 plugin-load-add=rpl_semi_sync_master.so rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_wait_point=AFTER_SYNC rpl_semi_sync_master_timeout=1000 # 1s降级异步
从库 (server-id=2)

ini

server-id=2 read_only=1 super_read_only=1 # 8.0+ 超级只读 relay-log=relay-bin log_slave_updates=1 gtid_mode=ON enforce_gtid_consistency=ON # 并行复制 (5.7+) slave_parallel_type=LOGICAL_CLOCK slave_parallel_workers=8 # CPU核数

3. 部署步骤

  1. 主库创建复制用户

sql

CREATE USER 'repl'@'%' IDENTIFIED BY 'Repl@123'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
  1. 主库备份(mysqldump --single-transaction --master-data=2)
  2. 从库恢复备份,启动复制

sql

CHANGE MASTER TO MASTER_HOST='192.168.1.10', MASTER_USER='repl', MASTER_PASSWORD='Repl@123', MASTER_AUTO_POSITION=1; # GTID自动定位 START SLAVE;

4. 高可用增强

  • Keepalived:绑定 VIP,主挂则漂移到从
  • 监控:MHA/Orchestrator 自动切换

三、MGR 集群(官方首选)

1. 核心特性

  • 单主模式(推荐):1 主可写,多从只读,自动选主
  • 多主模式:所有节点可写,冲突检测(主键 / 写集)
  • Paxos 共识:事务需多数派(>N/2)确认
  • 自动故障转移:30s 内完成,RPO=0
  • 节点数:3/5/7(奇数,防脑裂),最大 9 节点

2. 核心配置(3 节点)

ini

# 通用 server-id=101/102/103 gtid_mode=ON enforce_gtid_consistency=ON binlog_format=ROW log_slave_updates=ON plugin-load-add=group_replication.so # MGR专属 group_replication_start_on_boot=OFF group_replication_bootstrap_group=OFF group_replication_group_name="uuid" # 集群UUID group_replication_local_address="ip:33061" # 组通信端口 group_replication_group_seeds="ip1:33061,ip2:33061,ip3:33061" group_replication_ip_whitelist="192.168.1.0/24" group_replication_single_primary_mode=ON # 单主 group_replication_enforce_update_everywhere_checks=OFF

3. 部署步骤

  1. 初始化集群(引导节点)

sql

SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
  1. 其他节点加入

sql

START GROUP_REPLICATION;
  1. 查看状态

sql

SELECT * FROM performance_schema.replication_group_members;

4. 故障切换流程

  1. 心跳超时 → 标记主节点UNREACHABLE
  2. 多数派投票 → 按GTID 进度 + 权重选新主
  3. 新主关闭super_read_only
  4. 原主恢复 → 自动加入为从

四、MHA 方案(经典)

1. 架构

  • Manager:独立节点,监控、选主、切换
  • Node:每台 MySQL,执行日志补全、切换
  • 依赖:SSH 免密GTID

2. 核心优势

  • 切换快(<30s)、数据补偿、支持多从
  • 兼容所有存储引擎

3. 局限

  • 2018 年后停更、Manager 单点、SSH 安全风险

五、生产最佳实践

1. 方案选型

  • 中小业务 / 非核心:主从 + Keepalived
  • 核心 / 金融MGR 单主(3 节点)
  • 多写 / 多活:PXC 或 MGR 多主(谨慎)

2. 关键配置

  • 强一致:MGR、半同步、双 1(sync_binlog=1、innodb_flush_log_at_trx_commit=1)
  • 防脑裂:奇数节点、多数派、网络冗余
  • 性能:并行复制、大内存、SSD、分库分表

3. 监控与运维

  • 监控:MGR 状态、复制延迟、节点存活、VIP
  • 工具:Prometheus+Grafana、Orchestrator、MHA
  • 备份:每日全备 + 实时 binlog 备份

4. 故障处理

  • MGR 单主:自动切换,无需人工
  • 主从:MHA 自动切换,或手动提升从库
  • 脑裂:切断网络、修复后重新加入集群

六、常见问题

  1. MGR 大事务延迟→ 拆分事务、控制单事务大小
  2. 主从延迟→ 并行复制、ROW 模式、优化从库
  3. 脑裂→ 网络稳定、奇数节点、关闭自动重连
  4. 数据不一致→ 强一致方案、定期校验(pt-table-checksum)
http://www.jsqmd.com/news/583503/

相关文章:

  • 2026年软文发稿服务商专业推荐:企业品牌营销选型指南 - 发稿平台推荐
  • 基于深度学习的车牌识别系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)
  • ▲基于DQPSK调制解调+LDPC编译码+扩频解扩通信链路matlab误码率仿真
  • 新手必看:虚拟机安装SQL Server全攻略
  • 张博士医考提醒大家:学习医师资格考试要注意什么——别让“独自硬扛”拖垮你的复习节奏
  • QMCDecode:3个步骤解锁QQ音乐加密文件,你的音乐自由指南
  • MySQL 高可用
  • 以IBMS为翼,驱动企业数字化转型,斩获降本增效双丰收
  • C语言_函数_题1
  • 基于深度学习的水下海洋生物识别(YOLOv12/v11/v8/v5模型+数据集)(源码+lw+部署文档+讲解等)
  • 霸王餐外卖接口对接中的签名校验、加密传输 Java 后端实现细节
  • QMCDecode:解锁QQ音乐加密音频,让Mac用户实现音乐自由
  • MES系统如何统领全局:曜华激光200-500MW产线数字神经中枢揭秘
  • 边缘计算的“数据中枢”——智能网关与数据采集
  • C语言_函数
  • 水厂供水泵房自控案例(工程实际在用) PLC程序+触摸屏程序+组态软件程序+图纸
  • 2026届学术党必备的降重复率平台推荐榜单
  • 基于深度学习的隧道缺陷检测系统(YOLO12/11/v8/v5模型+django)(源码+lw+部署文档+讲解等)
  • Unity入门:新建第一个3D/2D项目的完整步骤
  • 西方艺术画作作家识别名画作者识别检测数据集VOC+YOLO格式3006张34类别
  • 告别模糊边界!用PraNet+Res2Net实战结肠息肉分割,附PyTorch保姆级代码解读
  • 文字识别OCR 在线工具 vs OCR API 接口平台:普通用户和开发者该怎么选?
  • 基于Simulink与Carsim的LKA车道保持系统:横向预瞄PID控制与纵向稳定性研究——...
  • 嘉兴脱发白发理疗养发馆哪家好?黑奥秘近20年深耕头发理疗更专业 - 美业信息观察
  • Redis 缓存穿透怎么解决?3 种方案实测 + 踩坑全记录(2026)
  • javaweb高校两校区通勤校车预约系统的设计与实现 论文
  • 【Pygame】第17章 游戏用户界面系统与菜单交互设计实现
  • 《吐槽大会》编剧与导演团队意见平衡机制深度研究报告
  • 兰亭妙微教育App设计案例研究:Chegg Study的UI/UX设计亮点与专业总结 - ui设计公司兰亭妙微
  • 开挖煤层这事儿看着像在挖煤,实际是在跟地下水的流动玩捉迷藏。咱今天不整那些虚的,直接上COMSOL模型里的硬货