logo logo
关于我们

技术分享

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

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

2021-06-02

在学习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文件进行数据恢复。 可以防止数据丢失。

云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 网络安全

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载

jia7jia_7
请添加好友
为您提供支持

请拨打电话
为您提供支持

400-9955-698