什么是Redis的集群脑裂:

Redis的集群脑裂指在主从集群中,同时有两个master主节点,它们都能接收写请求。而脑裂最直接的影响,就是客户端不知道应该往哪个master主节点写入数据,结果就是不同的客户端会往不同的主节点上写入数据。此时Redis的集群脑裂就有可能会导致数据丢失。

脑裂现象发生原因:

网络问题:导致Redis Master节点跟Redis Slave节点和哨兵Sentinel集群处于不同的网络分区,此时因为Sentinel集群无法感知到master的存在,所以将Slave节点提升为Master节点。此时就存在两个不同的Master节点,就像一个大脑分裂成了两个。

主机资源问题:redis Master节点所在的服务器上的其他程序临时占用了大量资源(例如 CPU 资源),导致主库资源使用受限,短时间内无法响应心跳,于是Sentinel集群重新选举了新的Master,当其它程序不再使用资源时,旧Master节点又恢复正常,同一集群下出现两个Master。

Redis 主节点阻塞:主库自身遇到了阻塞的情况,例如,处理 bigkey 或是发生内存 swap,短时间内无法响应心跳,还是会触发Sentinel机制,等主库阻塞解除后,又恢复正常的请求处理了。

step1:在 Redis 主从架构中,部署方式一般是「一主多从」,主节点提供写操作,从节点提供读操作。 如果主节点A的网络突然发生问题,与所有的从节点都失联,但是此时的主节点和客户端的网络是正常的,这个客户端并不知道 Redis 内部已经出现了问题,还在照样的向这个失联的主节点写数据,此时这些数据被旧主节点缓存到了缓冲区里,因为主从节点之间的网络问题,这些数据都是无法同步给从节点的。

step2:这时,哨兵也发现主节点失联,它就认为主节点挂了(但实际上主节点正常运行,只是网络出问题了),于是哨兵就会在「从节点」中选举出一个 leeder 作为主节点,这时集群就有两个主节点了 —— 脑裂出现了。

step3:然后,网络突然好了,哨兵因为之前已经选举出一个新主节点了,它就会把旧主节点降级为从节点(A),然后从节点(A)会向新主节点请求数据同步,因为第一次同步是全量同步的方式,此时的从节点(A)会清空掉自己本地的数据,然后再做全量同步。所以,之前客户端在过程 A 写入的数据就会丢失了,也就是集群产生脑裂数据丢失的问题。


脑裂问题处理

在redis的配置文件中有两个参数我们可以设置:

min-slaves-to-write  N min-slaves-max-lag N

min-slaves-to-write默认配置为0,这个配置表示master至少有N个slave节点才进行工作。当出现Redis集群脑裂时,其中一个出问题的master此时就少于N的slave连接,此master就拒绝写请求。

min-slaves-max-lag默认配置为10,这个配置表示slave和master之间只能落后N ms的数据。超过了该值就拒绝写请求,就不会往master中写入数据。

假设从库有K个,可将:

  • min-slaves-to-write设置为K/2+1(如果K等于1,就设为1)
  • min-slaves-max-lag设置为十几秒(例如10~20s)

这个配置下,如果有一半以上的从库和主库进行的ACK消息延迟超过十几s,我们就禁止主库接收客户端写请求。

这样一来,我们可以避免脑裂带来数据丢失的情况,而且,也不会因为只有少数几个从库因为网络阻塞连不上主库,就禁止主库接收请求,增加了系统的鲁棒性。

Redis集群脑裂导致数据丢失问题处理相关推荐

  1. Redis集群脑裂、Redis主从同步的异步丢数据问题

    什么是Redis的集群脑裂? Redis的集群脑裂指在主从集群中,同时有两个master主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个master主节点写入数据,结果就是不 ...

  2. 关于redis集群脑裂及其解决方案

    本文来说下redis集群脑裂及其解决方案 文章目录 概述 概述

  3. 什么是redis集群脑裂及解决方案

    什么是redis的集群脑裂? redis的集群脑裂是指因为网络问题,导致redis master节点跟redis slave节点和sentinel集群处于不同的网络分区,此时因为sentinel集群无 ...

  4. Redis进阶 - 如何避免Redis集群脑裂?

    文章目录 CAP Redis防止脑裂参数 min-slaves-to-write 验证 注意事项 CAP CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem) ...

  5. REDIS哨兵【Sentinel】模式+哨兵的核心知识点+redis哨兵主从切换的数据丢失问题+上一章铺垫的【异步复制数据丢失问题】+【集群脑裂】

    1.redis哨兵模式的前言: 一年一度的问题来了,为啥子要用redis的哨兵模式的呢? 简单粗暴的理解下子,顺带开个玩笑,没有理解好,还望不要见笑: 其实redis的哨兵模式,个人理解:只是说法搞大 ...

  6. Elasticsearch集群“脑裂”现象

    1.什么是Elasticsearch集群脑裂 Elasticsearch集群由一个主节点(可以有多个备选主节点)和多个数据节点组成.其中主节点负责创建.删除索引.分配分片.追踪集群中的节点状态等工作, ...

  7. 【Zookeeper】Zookeeper集群“脑裂”问题处理大全

    本文重点分享Zookeeper脑裂问题的处理办法.ZooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调功能. 脑裂通常会出现在 ...

  8. Elasticsearch之集群脑裂

    集群脑裂是什么? 所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解. 由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况 ...

  9. Zookeeper集群脑裂问题

    关于集群中的"脑裂"问题,之前已经在这里详细介绍过,下面重点说下Zookeeper脑裂问题的处理办法.ooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调 ...

最新文章

  1. 如何用 Graylog 管理日志?- 每天5分钟玩转 Docker 容器技术(93)
  2. 中文Visual Studio 2005 Express Beta2不能安装在英文Longhorn Beta1上吗?
  3. 如果企业网站长时间没有排名可以从多个方面进行分析
  4. python课程设计报告总结-上海python课程设计报告数据处理
  5. [NOTE] XVWA靶场练习笔记
  6. Angular应用Base Element Href属性的设置
  7. [webview] 放大缩小的问题
  8. 线头尾两端各插入块lisp_工作叶片采用减振块防止叶片损坏,在低压涡轮轴上要有防飞转措施...
  9. mysql8.0.15免安装版配置_Win10配置MySQL8.0.15免安装版教程
  10. java web jsp/servlet 考勤管理系统
  11. DELMIA人机工程 ---- 二次开发 第一篇:开发指南
  12. ElementUI table 样式修改
  13. DEJA_VU3D - Cesium功能集 之 019-军事标绘系列十一:燕尾箭头
  14. 6个自学python必看网站
  15. MongoDB单机集群搭建
  16. 数据结构 算法与应用(c++ 描述) 自练答案
  17. html实现点赞效果,HTML+CSS入门 点赞功能实现 $(tag).css('属性', '样式')
  18. Azure Stack技术深入浅出系列6:Azure Stack一体机探究 — 揭开黑盒子的神秘面纱
  19. python编程简易计算器_Python编程练习049:简单计算器实现
  20. 查找图形图斑中的空洞

热门文章

  1. 手机通讯录联系人恢复?没有备份的你需要知道
  2. python 多进程 每个进程做不同功能实例_python多进程通信实例分析
  3. oraclerman清理归档
  4. Sqlite打开.db文件
  5. 083-反射(序列化 json)
  6. SHARP/夏普AS31 root教程_方法
  7. 小学五年级计算机计划及教案,新浙摄版小学信息技术五年级下册教学计划和教案.docx...
  8. win8计算机睡眠无法唤醒,WIN8.1睡眠后无法唤醒,需要重启计算机
  9. 《逻辑思维简易入门》(第2版) 阅读笔记二
  10. 解决evince打开pdf文件遇到的错误及解决方法