Carry の Blog Carry の Blog
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL8-SOP

    • 第一章 概述
    • 第二章 环境准备
    • 第三章 安装部署规范
    • 第四章 ReplicaSet高可用配置
    • 第五章 监控与日常维护
    • 第六章 故障处理手册
    • 第七章 安全与权限管理
    • 第八章 扩展与升级方案
    • 附录
  • 课程笔记

  • 专题系列
  • 课程笔记
  • MySQL实战45讲
Carry の Blog
2024-07-27
目录

高可用架构与切换

# 高可用架构与切换

在现代分布式系统中,高可用性是保障业务连续性的关键。MySQL作为主流的关系型数据库,其高可用架构的设计和切换机制直接影响着业务的稳定运行。本文将深入探讨MySQL高可用架构的设计原理和切换策略。

# 1. 高可用架构概述

# 1.1 高可用性定义

高可用性(High Availability)是指系统能够持续提供服务的能力,通常用可用性百分比来衡量。理想的高可用系统应该具备99.99%以上的可用性。

# 1.2 MySQL高可用需求

在生产环境中,MySQL高可用主要解决以下几个问题:

  • 单点故障:避免因主库宕机导致服务中断
  • 数据一致性:确保主备数据的同步和一致性
  • 快速切换:在故障发生时能够快速完成主备切换
  • 业务连续性:最小化切换过程对业务的影响

# 2. 常见高可用架构模式

# 2.1 一主一备架构

这是最基本的高可用架构:

# 架构示意图
[Client] --> [Master] --> [Slave]
           |              |
           |            [Replica]
           |              |
           [Backup] ------
1
2
3
4
5
6

特点:

  • 配置简单,成本较低
  • 主备切换相对容易
  • 数据一致性保障较好

# 2.2 一主多从架构

# 架构示意图
[Client] --> [Master]
           |        |
           |      [Slave1]
           |        |
           |      [Slave2]
           |        |
           |      [Slave3]
           |        |
           [Backup] ------
1
2
3
4
5
6
7
8
9
10

特点:

  • 可以分担读压力
  • 提供更好的读扩展能力
  • 切换复杂度相对较高

# 2.3 双主架构

# 架构示意图
[Client] --> [Master1] <---> [Master2]
           |              |
           |            [Replica]
           |              |
           [Backup] ------
1
2
3
4
5
6

特点:

  • 提供更高的可用性
  • 需要复杂的冲突解决机制
  • 配置和维护复杂

# 3. 主备切换机制

# 3.1 切换时机

主备切换通常发生在以下情况:

  1. 主库故障:硬件故障、软件异常、网络中断等
  2. 计划维护:系统升级、硬件更换等
  3. 性能优化:主库负载过高需要切换

# 3.2 切换类型

# 3.2.1 自动切换

-- 配置自动切换参数
SET GLOBAL rpl_semi_sync_master_enabled = ON;
SET GLOBAL rpl_semi_sync_slave_enabled = ON;
1
2
3

# 3.2.2 手动切换

-- 手动切换步骤
STOP SLAVE;
-- 确认主备同步状态
SHOW SLAVE STATUS\G
-- 切换主库角色
SET GLOBAL read_only = OFF;
-- 启动新主库
START SLAVE;
1
2
3
4
5
6
7
8

# 4. 主备切换策略

# 4.1 可靠性优先策略

在切换前确保主备数据完全同步:

-- 检查同步状态
SELECT Seconds_Behind_Master FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND = 'Slave';

-- 等待同步完成
SELECT WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS('GTID_SET');
1
2
3
4
5

# 4.2 可用性优先策略

快速切换,容忍短暂的数据不一致:

-- 快速切换配置
SET GLOBAL super_read_only = OFF;
START SLAVE;
-- 立即对外提供服务
1
2
3
4

# 4.3 优雅切换策略

逐步切换,减少对业务的影响:

-- 1. 先将读请求导向备库
SET GLOBAL read_only = ON;
-- 2. 等待所有连接关闭
-- 3. 执行切换
STOP SLAVE;
-- 4. 提升备库为主库
SET GLOBAL read_only = OFF;
-- 5. 重新配置从库
CHANGE MASTER TO MASTER_HOST='new_master_ip';
1
2
3
4
5
6
7
8
9

# 5. 切换过程中的数据一致性保障

# 5.1 GTID机制

-- 启用GTID
SET GLOBAL gtid_mode = ON;
SET GLOBAL enforce_gtid_consistency = ON;

-- 查看GTID状态
SHOW GLOBAL VARIABLES LIKE 'gtid_mode';
SHOW MASTER STATUS;
1
2
3
4
5
6
7

# 5.2 事务完整性保障

-- 在切换前确保事务完整性
SELECT @@autocommit;
SELECT @@tx_isolation;
-- 确保所有事务已完成
FLUSH TABLES WITH READ LOCK;
1
2
3
4
5

# 6. 故障检测机制

# 6.1 心跳检测

-- 配置心跳检测
SET GLOBAL master_heartbeat_period = 30;
-- 监控心跳状态
SHOW SLAVE STATUS\G
1
2
3
4

# 6.2 健康检查

-- 健康检查脚本示例
SELECT 
    @@read_only AS read_only,
    @@server_id AS server_id,
    Seconds_Behind_Master,
    Slave_IO_Running,
    Slave_SQL_Running
FROM INFORMATION_SCHEMA.SLAVE_STATUS;
1
2
3
4
5
6
7
8

# 7. 切换后的数据验证

# 7.1 数据一致性检查

-- 校验数据一致性
CHECKSUM TABLE table_name;

-- 比较关键表的数据
SELECT COUNT(*) FROM table_name;
SELECT COUNT(*) FROM table_name WHERE condition;
1
2
3
4
5
6

# 7.2 业务功能验证

-- 验证关键业务功能
SELECT COUNT(*) FROM user_table WHERE status = 'active';
SELECT COUNT(*) FROM order_table WHERE created_time > DATE_SUB(NOW(), INTERVAL 1 HOUR);
1
2
3

# 8. 高可用架构最佳实践

# 8.1 网络配置优化

-- 优化网络相关参数
SET GLOBAL slave_net_timeout = 60;
SET GLOBAL slave_compressed_protocol = ON;
1
2
3

# 8.2 监控告警体系建设

-- 建立监控脚本
#!/bin/bash
# 监控主备延迟
DELAY=$(mysql -e "SHOW SLAVE STATUS\G" | grep Seconds_Behind_Master | awk '{print $2}')
if [ "$DELAY" -gt 30 ]; then
    echo "Warning: Master-Slave delay is $DELAY seconds"
fi
1
2
3
4
5
6
7

# 8.3 备份策略

-- 定期备份策略
mysqldump -h master_host -u user -p database_name > backup_$(date +%Y%m%d_%H%M%S).sql
1
2

# 9. 常见问题及解决方案

# 9.1 切换延迟问题

-- 诊断切换延迟
SHOW SLAVE STATUS\G
-- 查看关键字段
Last_IO_Error
Last_SQL_Error
Seconds_Behind_Master
1
2
3
4
5
6

# 9.2 数据不一致问题

-- 检查GTID一致性
SHOW MASTER STATUS;
SHOW SLAVE STATUS\G
-- 确认GTID集合
SELECT @@gtid_executed;
1
2
3
4
5

# 9.3 切换失败处理

-- 切换失败恢复
STOP SLAVE;
RESET SLAVE ALL;
-- 重新建立连接
CHANGE MASTER TO MASTER_HOST='new_master_ip';
START SLAVE;
1
2
3
4
5
6

# 10. 总结

MySQL高可用架构是保障业务连续性的重要基础设施。通过合理设计主备架构、制定科学的切换策略、建立完善的监控体系,可以有效提升系统的可用性和稳定性。在实际应用中,需要根据业务特点和数据一致性要求选择合适的高可用方案,并不断完善和优化切换流程,确保在任何情况下都能快速、安全地完成服务切换。

#学习笔记#MySQL
上次更新: 8/29/2026
最近更新
01
当监控说没事而 DMV 说有事——N9E 与 SQL Server 指标交叉验证实战 原创
08-28
02
TiKV 节点 CPU 周期性打满,进程却只占 4%:一次热点 Region 的逆向排查 原创
08-28
03
托管 SQL Server 的运维边界:哪些 DBA 手段会失效,以及用什么替代 原创
08-28
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式