四、针对redis容灾切换导致"脑裂"的情况
网上参考到别人博客说,redis容灾切换的时候,有几率出现脑裂的情况。
什么是脑裂:
sentinel判断master宕机,切换slave为新master的过程中,业务数据还在持续往原master写入数据,因为此时新master还是slave,没有写入权限,就会出现数丢失的情况。
解决方案:
看了很多文章,都是说对redis的配置新增两个设置。
1 min-slaves-to-write 1
2 min-slaves-max-lag 10
参数解释:
要求至少有1个slave,数据复制和同步延迟不能超过10秒
如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒钟,那么master就会拒绝接收任何请求。
作用:
减少异步复制的数据丢失
配置min-slaves-max-lag为10s后,根据目前master->slave的复制速度,如果数据同步完成所需要时间超过10s,就会认为master未来宕机后损失的数据会很多,master就拒绝写入新请求。
这样就能将master和slave数据差控制在10s内,即使master宕机也只是这未复制的10s数据。
减少脑裂的数据丢失:
如果不能继续给指定数量的slave发送数据,而且slave超过10秒没有给自己ack消息,那么就直接拒绝写入新请求。这样脑裂后的旧master就不会接受client的新数据,也就避免了数据丢失。
因此在脑裂场景下,最多就丢失10秒的数据
但以上配置,还是会有数据丢失的情况,如果业务数据是会重复上送的倒还好,但是一旦数据是状态发生变更才推送一次的情况,就会对业务数据准确性有出入。而且上面的配置,因为我在这边自身业务数据有可能还没达到一定量,目前没复现,所以在这里,也请教下各位看官大大,是否还有其他更好的优化方案?欢迎各位看官大大来指定迷津~~~~
借鉴的文章参考:https://blog.csdn.net/wdehxiang/article/details/108342501
最新文章
- App主界面Tab实现方法
- Upgrade custom workflow in SharePoint
- 将Nagios监控信息存入Mysql
- uva 10369
- session绑定线程
- JSP九大内置对象和四种属性范围解读
- Flink Program Guide (8) -- Working with State :Fault Tolerance(DataStream API编程指导 -- For Java)
- Duplicate entry '0' for key 'PRIMARY'的一种可能的解决办法
- 循环语句之for循环
- .Net Core部署IIS
- P1638 逛画展(直尺法)
- LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)
- EasyUI相关知识点整理
- 抽象语法树(AST)
- BZOJ3597 SCOI2014方伯伯运椰子(分数规划+spfa)
- $(document).ready()方法和window.onload有什么区别?
- Java快捷键与搜狗输入法快键的冲突
- MES制造执行系统
- React和Vue特性和书写差异
- AT24Cxx(EEPROM)子系统