Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL8-SOP

  • MySQL实战45讲学习笔记

    • MySQL45讲学习笔记
    • MySQL基础架构
    • MySQL日志系统 (Redo Log 与 Binlog)
    • MySQL字符串字段索引优化
    • MySQL索引原理与优化
    • MySQL锁机制详解
    • MySQL事务与MVCC机制
    • MySQL普通索引与唯一索引的选择
    • MySQL优化器如何选择索引
    • MySQL抖动刷脏页
    • 表空间管理与回收
    • count函数详解
    • 日志索引
    • orderby工作原理
    • 随机排序实现
    • SQL性能差异函数与转换
    • 慢查询分析锁与版本
    • 幻读与间隙锁
    • 加锁规则分析
    • 应急性能优化方法
    • 数据持久化保证
    • 主备一致性原理
    • 高可用架构与切换
      • 1. 高可用架构概述
        • 1.1 高可用性定义
        • 1.2 MySQL高可用需求
      • 2. 常见高可用架构模式
        • 2.1 一主一备架构
        • 2.2 一主多从架构
        • 2.3 双主架构
      • 3. 主备切换机制
        • 3.1 切换时机
        • 3.2 切换类型
      • 4. 主备切换策略
        • 4.1 可靠性优先策略
        • 4.2 可用性优先策略
        • 4.3 优雅切换策略
      • 5. 切换过程中的数据一致性保障
        • 5.1 GTID机制
        • 5.2 事务完整性保障
      • 6. 故障检测机制
        • 6.1 心跳检测
        • 6.2 健康检查
      • 7. 切换后的数据验证
        • 7.1 数据一致性检查
        • 7.2 业务功能验证
      • 8. 高可用架构最佳实践
        • 8.1 网络配置优化
        • 8.2 监控告警体系建设
        • 8.3 备份策略
      • 9. 常见问题及解决方案
        • 9.1 切换延迟问题
        • 9.2 数据不一致问题
        • 9.3 切换失败处理
      • 10. 总结
    • 备库延迟分析与优化
    • 主备切换GTID
    • 读写分离实践与问题
    • 数据库健康检查
    • 锁与死锁
    • 数据误删恢复
    • Kill命令详解
    • 查询与内存使用分析
    • Join原理与选择
    • 临时表原理与应用
    • 内部临时表详解
    • Memory引擎详解
    • 自增ID详解
    • Insert加锁分析
    • 表复制方法比较
    • Grant与权限管理
    • 分区表详解
    • SQL语句中的Join问题
    • 自增ID用尽问题
  • 专题系列
  • 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#高可用#主备切换#学习笔记
上次更新: 3/4/2026

← 主备一致性原理 备库延迟分析与优化→

最近更新
01
表空间管理与回收
03-04
02
MySQL抖动刷脏页
03-04
03
count函数详解
03-04
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式