美文网首页
redis的数据丢失

redis的数据丢失

作者: 摸摸脸上的胡渣 | 来源:发表于2020-02-17 16:56 被阅读0次

    redis异步复制导致的数据丢失

    所有的写请求都指向master,当master完成指令的执行后,就可以返回客户端响应了。执行的写请求命令,会在复制积压缓冲区中,然后开启一个异步线程,源源不断的传给slave,保持slave和master数据的一致性。
    但是当写命令执行完,还未从复制积压缓冲区同步给slave节点时,master发生了故障。此时这些命令影响的数据,就丢失了。

    由于Sentinel cluster的存在,会将拥有不完整数据的slave节点当成新的master,当旧的master上线时,会把缺少的数据当成完整数据,同步给旧master,导致整个集群相应的数据丢失。

    redis集群脑裂导致的数据丢失

    当发生脑裂后,client和原master在同一个网络环境中,新master无法和client、master进行网络连接。如果这种情况持久很久,当脑裂恢复时,就会导致出现两个master,而Sentinel cluster会将旧master变为slave,将缺少数据的新master的数据,同步给旧master,导致数据的丢失。


    脑裂示意图

    问题解决

    很遗憾,redis不保证数据0丢失,只能尽可能的保证高可用,所以以上的情况如果发生,则数据就会永久丢失。
    所以解决方案的思路,应该是避免发生以上情况。
    当主从节点之间的同步延迟达到一定阈值,并且发生延迟的从节点数量达到一定阈值,就说明目前redis集群整体情况很不好,要暂停对外提供服务;

    min-slaves-to-write  发生延迟的从节点数量达到N个
    min-slaves-max-lag  主从节点之间的同步延迟达到M秒
    

    client端应该有应对这种情况的降级措施。

    相关文章

      网友评论

          本文标题:redis的数据丢失

          本文链接:https://www.haomeiwen.com/subject/ikzbfhtx.html