Redis集群脑裂导致数据丢失问题处理
什么是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集群脑裂导致数据丢失问题处理相关推荐
- Redis集群脑裂、Redis主从同步的异步丢数据问题
什么是Redis的集群脑裂? Redis的集群脑裂指在主从集群中,同时有两个master主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个master主节点写入数据,结果就是不 ...
- 关于redis集群脑裂及其解决方案
本文来说下redis集群脑裂及其解决方案 文章目录 概述 概述
- 什么是redis集群脑裂及解决方案
什么是redis的集群脑裂? redis的集群脑裂是指因为网络问题,导致redis master节点跟redis slave节点和sentinel集群处于不同的网络分区,此时因为sentinel集群无 ...
- Redis进阶 - 如何避免Redis集群脑裂?
文章目录 CAP Redis防止脑裂参数 min-slaves-to-write 验证 注意事项 CAP CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem) ...
- REDIS哨兵【Sentinel】模式+哨兵的核心知识点+redis哨兵主从切换的数据丢失问题+上一章铺垫的【异步复制数据丢失问题】+【集群脑裂】
1.redis哨兵模式的前言: 一年一度的问题来了,为啥子要用redis的哨兵模式的呢? 简单粗暴的理解下子,顺带开个玩笑,没有理解好,还望不要见笑: 其实redis的哨兵模式,个人理解:只是说法搞大 ...
- Elasticsearch集群“脑裂”现象
1.什么是Elasticsearch集群脑裂 Elasticsearch集群由一个主节点(可以有多个备选主节点)和多个数据节点组成.其中主节点负责创建.删除索引.分配分片.追踪集群中的节点状态等工作, ...
- 【Zookeeper】Zookeeper集群“脑裂”问题处理大全
本文重点分享Zookeeper脑裂问题的处理办法.ZooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调内核,用户可以在此之上构建更多复杂的分布式协调功能. 脑裂通常会出现在 ...
- Elasticsearch之集群脑裂
集群脑裂是什么? 所谓脑裂问题(类似于精神分裂),就是同一个集群中的不同节点,对于集群的状态有了不一样的理解. 由于某些节点的失效,部分节点的网络连接会断开,并形成一个与原集群一样名字的集群,这种情况 ...
- Zookeeper集群脑裂问题
关于集群中的"脑裂"问题,之前已经在这里详细介绍过,下面重点说下Zookeeper脑裂问题的处理办法.ooKeeper是用来协调(同步)分布式进程的服务,提供了一个简单高性能的协调 ...
最新文章
- 如何用 Graylog 管理日志?- 每天5分钟玩转 Docker 容器技术(93)
- 中文Visual Studio 2005 Express Beta2不能安装在英文Longhorn Beta1上吗?
- 如果企业网站长时间没有排名可以从多个方面进行分析
- python课程设计报告总结-上海python课程设计报告数据处理
- [NOTE] XVWA靶场练习笔记
- Angular应用Base Element Href属性的设置
- [webview] 放大缩小的问题
- 线头尾两端各插入块lisp_工作叶片采用减振块防止叶片损坏,在低压涡轮轴上要有防飞转措施...
- mysql8.0.15免安装版配置_Win10配置MySQL8.0.15免安装版教程
- java web jsp/servlet 考勤管理系统
- DELMIA人机工程 ---- 二次开发 第一篇:开发指南
- ElementUI table 样式修改
- DEJA_VU3D - Cesium功能集 之 019-军事标绘系列十一:燕尾箭头
- 6个自学python必看网站
- MongoDB单机集群搭建
- 数据结构 算法与应用(c++ 描述) 自练答案
- html实现点赞效果,HTML+CSS入门 点赞功能实现 $(tag).css('属性', '样式')
- Azure Stack技术深入浅出系列6:Azure Stack一体机探究 — 揭开黑盒子的神秘面纱
- python编程简易计算器_Python编程练习049:简单计算器实现
- 查找图形图斑中的空洞
热门文章
- 手机通讯录联系人恢复?没有备份的你需要知道
- python 多进程 每个进程做不同功能实例_python多进程通信实例分析
- oraclerman清理归档
- Sqlite打开.db文件
- 083-反射(序列化 json)
- SHARP/夏普AS31 root教程_方法
- 小学五年级计算机计划及教案,新浙摄版小学信息技术五年级下册教学计划和教案.docx...
- win8计算机睡眠无法唤醒,WIN8.1睡眠后无法唤醒,需要重启计算机
- 《逻辑思维简易入门》(第2版) 阅读笔记二
- 解决evince打开pdf文件遇到的错误及解决方法