美文网首页
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数据持久化

    1 redis是内存型的数据库 redis数据放在内存中重启服务器丢失数据重启redis服务丢失数据断电丢失数据 ...

  • 面试官:Redis 持久化有哪几种方式,怎么选?

    1、AOF 持久化 Redis是基于内存的,如果Redis服务器挂了,数据就会丢失。为了避免数据丢失了,Redis...

  • redis mysql集群数据安全性

    redis mysql 数据安全性 redis 数据丢失 redis集群状态下,参考复制(Replication)...

  • redis与memcache区别

    1、持久化 redis是支持持久化存储,宕机重启数据不会丢失,memcache重启后数据丢失 redis持久化的方...

  • Redis持久化(AOF)说明以及相关配置

    说明 当redis存储非临时数据时,为了降低redis故障而引起的数据丢失,redis提供了AOF(Append ...

  • Redis持久化

    由于Redis的数据都放在内存里,如果Redis服务重启的话,数据就会丢失,所以Redis提供了RDB和AOF持久...

  • Redis在项目上的常用操作【二】

    Redis的高级用法 redis集群 redis 主从复制 概念:持久化保证了即使redis服务重启也不会丢失数据...

  • [转载] Redis RDB 持久化策略

    简介 Redis 持久化 RDB、AOF 为防止数据丢失,需要将 Redis 中的数据从内存中 dump 到磁盘,...

  • redis的数据丢失

    redis异步复制导致的数据丢失 所有的写请求都指向master,当master完成指令的执行后,就可以返回客户端...

  • redis总结--持久化

    一、Redis持久化必要性 Redis作为内存数据库,为了应对因进程意外退出造成的数据丢失,Redis提供了RDB...

网友评论

      本文标题:redis的数据丢失

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