25MySQL是怎么保证高可用的笔记

本文探讨了MySQL主备延迟的原因、不同同步策略(可靠性优先与可用性优先)及其优缺点,重点讲解了如何在实际场景中选择和应对主备延迟问题,以及实战案例分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL主备延迟、可用与可靠

author:陈镇坤27

创建时间:2021年11月29日18:52:36

编辑时间:2021年11月30日09:21:22、2021年11月30日23:01:35

转载请注明出处


————————————————————————————————

问:什么是cap?

答:百科词条:分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。

主备延迟

问:简单介绍下主备切换?

答:答:一般主库负责处理客户端的写请求,备库负责与主库同步数据,不参与与客户端的交互。

主备切换分主动运维操作和被动操作。

主动运维操作是软件升级,主库所在机器计划下线等。

被动操作是主库所在机器掉电。

问:什么是主备延迟?

答:假定主库事务提交时,将事务写入binlog 的时刻为T1,备库同步接收主库的binlog,将接收完的时刻记为T2,备库消费完该事务的时刻记为T3,则主备延迟为主库和备库之间同步数据的时间耗费,计算公式:(T3 - T1),其中,对主备延迟影响最大的是T2~T1的时间段,即备库消费完该事务的时间。一旦主备延迟过高,即备库消费中转日志(见第24篇)的速度越慢。

一般地,查询主备延迟,是查询当前备库正消费的主库事务写入时间与当前时间的差值,称为seconds_behind_master。

-- 查看主备延迟
show slave status

问:主备机器系统时间不一致,是否会导致主备延迟时间错误?

答:不会,备库与主库连接过程中,会获取主库系统时间,在计算主备延迟时,将该系统时间的差异考虑进去。

问:什么原因可能导致的MySQL的主备延迟?

答:

1)备库机器性能差;

2)备库CPU开销骤升(例如高频查询)——解决思路:一主多从;

3)大事务(一条语句delete太多数据);

4)大表DDL——解决思路:gh-ost方案(不了解);

5)备库的并行复制能力(例如:5.5之前sql_thread单线程);

主备同步策略

问:MySQL有哪几种主备同步策略,介绍下内容和各自的优缺点;

答:分

可靠性优先策略可用性有限策略

一般采用可靠性优先策略。

——————————

主要操作流程如下:

可靠性优先策略:

判断备库的seconds_behind_master是否大于5s,小于则执行下一步,否则重试;

将主库改为只读;

判断备库的seconds_behind_master是否为0,是则执行下一步,否则重试;

将备库的只读取消;

将业务请求切换到备库。

可用性优先策略:

则是先取消备库的只读状态,进行业务请求的主备切换。

——————————

优缺点:

可靠性优先策略保证主备一致和数据不丢失,但存在不可用时间。

可用性优先策略几乎无不可用时间,但可能出现数据不一致情况。

问:可用性优先策略怎么会产生数据不一致情况?

答:假设binlog设置的是statement格式,则binlog之间同步的日志记录的是sql语句本身。

若DML时,设置主键自增,插入数据时只对非主键字段自定义值,插入主库时,最新数据主键为5(此时备库最新数据主键也是为5),此时新数据为(5,x),日志内容为insert (x)同步到备库前,备库已经插入了新的数据,则同步后的记录将是(6或更大,x)

假设binlog设置的是row格式,则在上面的场景中,(5,x)同步到旧备库时,会报错,旧备库新的记录(5,y)同步给旧主库时,也会报错。这两条数据在对方库中就丢失了。

问:可用和可靠,这两种策略在主备数据同步时,怎么选择?

答:一般选择可靠性优先策略,除非短暂的业务不一致不会引发业务问题,能通过后期binlog来恢复,且短暂的不可用会影响业务功能,则需要选择可用优先策略。但更应该处理的方式是避免这种问题的产生。

问:主备同步时,可靠性优先策略可能存在什么极端情况?

答:如果主库掉电,此时备库不可连接,则主备延迟无法降为0,则系统将一直不可用。

实战题

问:假如备库延迟的监控预警提示,备库的延迟时间正保持一个45°斜向上的发展趋势,可能是什么原因导致的?

答:1、备库单线程复制能力更不上;2、有大事务被同步到备库执行;3、有一个长事务阻塞(例如:长事务获得MDL读锁,同步的MDL写锁等待)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈镇坤27

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值