博客
关于我
MySQL_主从复制--高可用
阅读量:547 次
发布时间:2019-03-09

本文共 1149 字,大约阅读时间需要 3 分钟。

MySQL 高可用性的核心机制之一是主备(NO:主从)延迟的概念——记录主库和从库执行事务的时间差。这种延迟直接影响系统的数据一致性和服务稳定性。本文将探讨主备延迟的根本原因及其在实际场景中的表现。

主备延迟原因分析

主备延迟的产生是主库写入 binlog 到备库接收并执行完成这整个过程的时间差。具体流程如下:

  • 就某一特定事务而言,主库 A 在时间 T1 完成写入 binlog。
  • 备库 B 接收到此 binlog 并记录其在系统中执行完成时间 T3。
  • 备库 B 的 T3 与主库 A 的 T1 之间的时间差即为主备延迟。
  • 关键点:网络延迟通常微乎其微,实际延迟主要源于备库的处理速度。使用 show slave status 可以获取 seconds_behind_master,反映主备延迟的具体时间值。

    主备延迟影响因素

  • 备库压力大

    • 备库设备配置通常低于主库,尤其是在主从模式下,备库既需处理来自主库的 binlog 又需作为读据库提供服务,工作负荷加重。
  • 大事务

    • 长时间运行的事务会导致主库直到完成当前事务后才发 write 到 binlog,进而影响从库的延迟。
  • 配置差异

    • 主从库参数设置不一致,可能导致资源冲突或 IO 操作效率低下。
  • 从库资源竞争

    • 一台服务器上部署多个从库或备库资源紧张,尤其是 IO 概率明显增加。
  • 备库执行状态

    • 备库处于延迟状态或执行备份操作占用 CPU 资源。
  • 表结构问题

    • 主库依托索引优化数据修改,但从库需进行全表扫描。通过调整 slave_rows_search_algorithms 参数可以优化部分延迟。
  • 延迟备库或空间不足

    • 延迟备库未能及时同步 transactions,或备库存储资源不足。
  • 双主结构(双M)分析

    在双主结构下,主备切换的逻辑和流程如下:

  • 初始状态确认

    • 检查备库的 seconds_behind_master 是否小于设定阈值(如-5秒),如不满足则重试。
  • 主库变只读

    • 为了防止数据写入冲突,主库设置为只读状态。
  • 备库变可读写

    • 只当备库的 seconds_behind_master 变为 0 时才能变更状态。
  • 切换完成

    • 将业务请求切向备库 B,同时关闭主库的只读模式。
  • 主备切换策略考量

    在双主结构下,业务切换的最优策略分为两种:

  • 可靠性优先策略

    • 在切换过程中保持系统不可写,确保数据完整性。优点显然是数据一致性,但可能造成短期服务中断。
  • 可用性优先策略

    • 本地直接切向备库,降低整体系统的延迟时间。可用性优先策略可能导致数据不一致问题,只适用于特定场景。
  • 根据业务需求选择合适的切换策略至关重要。通常,可靠性优先策略更适合对数据一致性要求较高的场景,而可用性优先则在结果可靠性不成)nфици重要时适用。

    转载地址:http://rfesz.baihongyu.com/

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 基于YoloV11自定义数据集实现车辆事故检测(有源码,建议收藏!)
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8 + BotSORT实现球员和足球检测与跟踪 (步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8实现高级目标检测和区域计数
    查看>>
    OpenCV与AI深度学习 | 基于YOLOv8的停车对齐检测
    查看>>
    OpenCV与AI深度学习 | 基于YoloV8的药丸/片剂类型识别
    查看>>
    OpenCV与AI深度学习 | 基于YOLO和EasyOCR从视频中识别车牌
    查看>>
    OpenCV与AI深度学习 | 基于图像处理的火焰检测算法(颜色+边缘)
    查看>>
    OpenCV与AI深度学习 | 基于拉普拉斯金字塔实现图像融合(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 基于机器视觉的磁瓦表面缺陷检测方案
    查看>>
    OpenCV与AI深度学习 | 基于深度学习的轮胎缺陷检测系统
    查看>>
    OpenCV与AI深度学习 | 如何使用YOLOv9分割图像中的对象
    查看>>
    OpenCV与AI深度学习 | 如何使用YOLOv9检测图片和视频中的目标
    查看>>
    OpenCV与AI深度学习 | 如何在 Docker 容器中使用 GPU
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YOLOv8 Pose实现瑜伽姿势识别
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用姿态估计算法构建简单的健身训练辅助应用程序
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于OpenCV和K-Means聚类实现颜色分割(步骤 + 代码)
    查看>>