异步复制和脑裂情况下的redis数据丢失

2020-08-03  本文已影响0人  sknfie

概述

异步复制和脑裂情况下是导致redis数据丢失的两种情况,主要发生在主备切换过程中。

异步复制情况下的数据丢失

因为master到slave的复制是异步的,所以会发生数据没全部复制到slave,master就宕机了,这导致一部分数据丢失了。

脑裂情况下的数据丢失

image.png

脑裂就是master发生网络故障,导致不能连接slave节点,但是master节点还在运行中。这时哨兵集群认为master宕机了,然后开启选举将其他slave换成了master。这个时候集群里有两个master。
此时虽然有一个slave被切换成master,但是客户端还没来得及替换到新的master,还继续写向旧master的数据可能也丢失了。
因此旧master再次恢复的时候,会被作为一个slave挂到新的master上去,自己的数据会清空,重新从新的master复制数据

解决异步复制和脑裂导致的数据丢失

redis的配置文件中,存在两个参数

min-slaves-to-write 1
min-slaves-max-lag 10

上面两个配置可以减少异步复制和脑裂导致的数据丢失

  1. 减少异步复制的数据丢失
    min-slaves-max-lag: 一旦slave复制数据和确认延时太长,就认为可能master宕机后损失的数据太多了,那么就拒绝写请求。
  2. 减少脑裂的数据丢失
    如果一个master出现了脑裂,跟其他slave丢了连接,那么上面两个配置可以确保说,如果不能继续给指定数量的slave发送数据,而且slave超过10秒没有给自己确认消息,那么就直接拒绝客户端的写请求。
    这样脑裂后的旧master就不会接受client的新数据,也就避免了数据丢失
上一篇 下一篇

猜你喜欢

热点阅读