redis 脑裂与异步复制导致的数据丢失问题

在学习redis的时候,遇到了这么一个问题,在开启redis持久化的情况下,脑裂与异步复制是否真的会造成数据丢失?
声明!!!以下内容是本人自己的想法,不具备正确性!

学习笔记中关于这两个问题的,中华石衫的笔记如下:
首先脑裂与异步复制导致数据丢失的业务场景是:
1、脑裂问题出现的情况:
当master脱离正常网络,与slave断开连接,但master并没有宕机,此时sentinel 认为master宕机了,然后开始选举新的master,这个时候,集群中就会有两个master,就是所谓的脑裂。
此时虽然某个slave转换成了master,但可能client还没有来得及切换到新的master,还在继续向旧的master写数据,就会丢失数据了。

因为旧master再次连接集群的时候,会被作为一个slave挂到新的master上去,自己的数据会被情况,重新从新的master复制数据。

2、异步复制问题:
由于master向slave的复制是异步的,所以有可能部分数据还没复制到slave,master就宕机了,导致这部分数据丢失。

我自己的思考。
此时思考一个问题:
假设本 redis主从集群,master开启了持久化AOF与RDB,那么数据是否会真的丢失?

1、脑裂造成的数据丢失问题,是由于一个主从中有两个master,新旧master,当旧的master网络恢复以后,连接集群,会被当作一个slave挂到新的master上去,自己的数据会被清空,重新从新的master复制数据,那么这段时间client写入旧master的数据就会丢失。
也就是说此时旧的master的持久化没用,会被清理掉,重新从新的master去进行一次full resynchronization 。
2、异步复制问题:
当部分数据没有复制到slave的时候,master宕机,哨兵机制会用30秒去确定是否选举新的master,而此时会遇到两种情况:

  1. master宕机,sentinel集群选举了新的master,此时会造成数据丢失,本质还是master宕机后,哨兵机制选举新的master造成的数据丢失问题。

  2. master宕机后,在哨兵选举之前,重启,此时丢失的数据其实是clinet在master宕机的这段时间发送给master的写请求数据。而此时,通过min-salves-max-log 10设置,也只会让redis丢失10秒的数据。

    min-slaves-to-write 1 min-slaves-max-lag 10 要求至少有1个slave,数据复制和同步的延迟不能超过10秒 如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么这个时候,master就不会再接收任何请求了

此时思考一个问题。redis主从集群且开启了哨兵机制,对master进行持久化的意义到底是什么?
只有说是在redis主从集群,全部同时挂掉的时候,此时的master持久化就会有用了,master可以通过rdb或者Aof文件进行数据恢复。 可以防止数据丢失。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值