浅析数据库主从延迟的相关方案

主从同步中的数据一致性策略:半同步复制与解决技巧

前言

在数据库高可用设计中,我们可能会做主从同步+读写分离,但是在这过程中可能存在主从库数据不一致的情况。

解决方案

一、强制走主库方案

  • 把查询请求分为两类:数据更新后,再次查询到的数据不允许延迟的请求、允许延迟的请求
  • 让这种不允许延迟的请求强制走主库

二、Sleep方案

更新主库数据之后,在查询请求的时候,sleep一秒

三、判断主备无延迟

数据库中有seconds_behind_master参数,可以通过show slave status命令查看,当为0的时候,代表主备没有延迟。

但该参数的单位是秒,如果想要更加精细化地判断主备是否有延迟,可以通过对比位点:

第一组:Master_Log_FileRead_Master_Log_Pos,表示的是读到的主库的最新位点;

第二组:Relay_Master_Log_FileExec_Master_Log_Pos,表示的是备库执行的最新位点。

如果 这两组值完全相同,就表示接收到的日志已经同步完成。

但是需要注意的是 ,这种办法不能完全保证主备没有延迟,因为上面判断主备无延迟,只是从库收到的binlog是OK的,但有一部分日志可能是客户端已经提交确认,但从库还没收到的情况。

四、半同步复制semi-sync

简单来说就是,当客户端提交事务给数据库的时候,主库会把binlog给到从库,只有当从库binlog执行完成,并给数据库ACK了之后,才会给客户端反馈“事务执行完成”。

但是这种方案的弊端是,只对一主一从这种架构成立,当出现多从的时候,只要有一个从库ACK了,就会给客户端反馈事务执行完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值