Redis数据若是丢失应该如何处理?

点击上方☝乱敲代码 轻松关注!
web

及时获取有趣有料的技术文章

1. 两种数据丢失的状况

主备切换的过程,可能致使数据丢失;redis

1.1. 异步复制致使的数据丢失

由于master -> slave的复制是异步的,因此可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了微信

1.2 脑裂致使的数据丢失

脑裂就是说,某个maser 所在机器忽然脱离了正常的网络,跟其余slave机器不能链接,可是实际上master还运行着,此时哨兵可能就会认为master 宕机了,而后开启选举,将其余slave切换成了master,这个时候,集群里面就会有2个master,也就是所谓的脑裂,此时虽然某个slave被切换成了master,可是可能client还没来得及切换到新的master,还继续写向旧master的数据可能也丢失了,所以master再次恢复的时候,会被做为一个slave挂到新的master 上去,本身的数据将会清空,从新重新的master 复制数据网络

2. 解决异步复制和脑裂数据致使的数据丢失

# redis.conf 配置
Min-slaves-to-write 1
Min-slaves-max-lag 10

上面这两个配置能够减小异步复制和脑裂致使的数据丢失app

2.1 减小异步复制的数据丢失

有了min-slaves-max-lag这个配置,能够确保说,一旦slave复制数据和ack延迟太长,就认为可能master 宕机后损失的数据太多了,那么就拒绝写请求,这样能够吧master宕机时因为部分数据丢失。异步

2.2 减小脑裂的数据丢失

若是一个master出现了脑裂,跟其余slave丢了链接,那么上面这两个配置能够去确保说,若是不能继续给指定数量的slave发送数据,并且slave超过10秒没有给本身ack消息,那么就直接拒绝客户端的写请求,这样脑裂活的旧master就不会接受client的新数据,也就避免了数据丢失,上面配置确保了,若是跟任何一个slave丢了链接,在10秒后发现没有slave给本身ack,那么就拒绝新的写请求,所以脑裂场景下,最多丢失10秒的数据。编辑器



本文分享自微信公众号 - 乱敲代码(lqcoder)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。flex

相关文章
相关标签/搜索