博客
关于我
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/

    你可能感兴趣的文章
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Nginx Location配置总结
    查看>>
    Nginx 反向代理解决跨域问题
    查看>>
    nginx 后端获取真实ip
    查看>>
    Nginx 学习总结(17)—— 8 个免费开源 Nginx 管理系统,轻松管理 Nginx 站点配置
    查看>>
    Nginx 我们必须知道的那些事
    查看>>
    oauth2-shiro 添加 redis 实现版本
    查看>>
    OAuth2.0_授权服务配置_Spring Security OAuth2.0认证授权---springcloud工作笔记140
    查看>>
    Objective-C实现bellman-ford贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BellmanFord贝尔曼-福特算法(附完整源码)
    查看>>
    Objective-C实现BF算法 (附完整源码)
    查看>>
    Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
    查看>>
    Objective-C实现binomial coefficient二项式系数算法(附完整源码)
    查看>>
    Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
    查看>>
    Objective-C实现euler method欧拉法算法(附完整源码)
    查看>>
    Objective-C实现factorial iterative阶乘迭代算法(附完整源码)
    查看>>
    Objective-C实现FigurateNumber垛积数算法(附完整源码)
    查看>>
    Objective-C实现Gale-Shapley盖尔-沙普利算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>