AIOps 一场颠覆传统运维的盛筵
1445
2022-10-21
mysql--------Mysql怎么保证高可用?主备发生延迟怎么解决?
运维人员工作中可能会进行主备切换这一个动作,而在进行主备切换时,极有可能发生"同步延迟"的情况,那什么是同步延迟呢?
同步延迟就是相同的一个事务,在备库中执行的时间要比在主库中要长,最直接的表现是主库生产binlog日志的速度要比备库消费relay log日志的速度要快的很多。
那什么情况下可能会发生"同步延迟"呢?
1.主备库所在机器的性能差很多
2.备库压力大
3.主库执行大事务
在存在"同步延迟"的情况下,怎么进行主备切换?
在双主的情况下,采用可靠性优先策略切换的流程是:
1.判断备库现在同步延迟的时间,<5秒,则继续下一步,否则重试这一步
2.把主库A设为只读状态,即readonly设为true
3.判断备库的同步延迟时间,等它为0
4.把备库B设为可读写状态,即readonly设为false
5.把业务请求设为B
流程图如下:
当主备库之间发生延迟时,怎么解决?
当主备库之间发生延迟时,可以采用并行复制来解决。先来分析一下什么是并行复制。
并行复制就是把备库中的sql-thread线程由单线程处理的方式改为多线程处理,解决方案是:Mysql在5.7版本之后通过参数slave-parallel-type来控制并行策略,当配置为DATABASE时,采用5.6的按库并行策略;配置为LOGICAL_CLOCK时,使用的是组提交的并行策略,其是处于prepare状态的事务和处于prepare和commit状态之间的事务是可以在备库并行的。在工作中,我们大部分采用的是LOGICAL_CLOCK策略。
在Mysql的5.7.22中,又新增了新的并行策略,同时新增了参数binlog-transaction-dependency-tracking来控制并行策略:
COMMIT_ORDER:此策略就是上面slave-parallel-type参数为LOGICAL_CLOCK时的方案
WRITESET:此策略是对于事务涉及更新的每一行,计算出这一行的hash值,组成集合writeset。如果两个事务组成的writeset集合没有交集,则表示可以并行。
WRITESET_SESSION:其是在WRITESET的基础上多了一个约束,当同一个线程先后执行两个事务时,在备库上要按照相同的先后顺序执行。
这里我们主要对当主备库发生延迟时怎么解决和什么情况下会发生主备延迟进行了一个分析,希望可以给读者一个新的认识。
发表评论
暂时没有评论,来抢沙发吧~