Redis主从复制数据丢失

Redis异步复制可能导致数据丢失,特别是在主数据库宕机或出现脑裂情况。通过设置`min-slaves-to-write 3`和`min-slaves-max-lag 10`,可以确保至少3个从节点与主节点保持良好连接且延迟不超过10秒,从而减少数据丢失风险。当网络故障导致命令丢失,主节点会基于复制偏移量重新发送数据。此配置在脑裂场景下能有效控制数据丢失范围,最多丢失10秒的数据。
摘要由CSDN通过智能技术生成

Redis主从复制存在的问题

  1. 异步复制导致的数据丢失:当主数据库处理请求时,由于同步是异步发生的,如果在同步前,主数据库宕机了,会造成数据丢失。
  2. 脑裂(多个master)导致的数据丢失:当master因为网络的问题被哨兵认为是宕机的服务,这是哨兵会挑选一个slave作为master,但这个时候,就master并没有宕机,在client使用新的master前依旧向旧的master写入数据。之后,当旧master变成slave时,就会发生数据丢失。

解决

min-slaves-to-write 3(从服务器数量)
min-slaves-max-lag 10(最大延迟时间,默认为1s)
使用这两个配置来实现数据丢失的可控性。

原理

在命令传播阶段,slave默认会以每秒一次的速率给master发送
REPLCONF ASK[replacation_offset]命令,类似于心跳。
replacation_offset是slave当前的复制偏移量。
这个命令主要作用是

  • 检查主从之间连接的网络状态
  • 辅助实现min_slave
  • 检测命令丢失

如果因为网络故障,主服务器传播给从服务器的写命令在半路丢失,那么当从服务器向主服务器发送REPLCONF ACK命令时,主服务器将发觉从服务器当前的复制偏移量少于自己的复制偏移量,然后主服务器就会根据从服务器提交的复制偏移量&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值