腾讯音乐:说说Redis脑裂问题?

Redis 脑裂问题是指,在 Redis 哨兵模式或集群模式中,由于网络原因,导致主节点(Master)与哨兵(Sentinel)和从节点(Slave)的通讯中断,此时哨兵就会误以为主节点已宕机,就会在从节点中选举出一个新的主节点,此时 Redis 的集群中就出现了两个主节点的问题,就是 Redis 脑裂问题。

脑裂问题影响

Redis 脑裂问题会导致数据丢失,为什么呢?来看脑裂问题产生的过程:

alt

而最后一步,当旧的 Master 变为 Slave 之后,它的执行流程如下:

  1. Slave(旧 Master)会向 Master(新)申请全量数据。
  2. Master 会通过 bgsave 的方式生成当前 RDB 快照,并将 RDB 发送给 Slave。
  3. Slave 拿到 RDB 之后,先进行 flush 清空当前数据(此时第四步旧客户端给他的发送的数据就丢失了)。
  4. 之后再加载 RDB 数据,初始化自己当前的数据。

从以上过程中可以看出,在执行到第三步的时候,原客户端在旧 Master 写入的数据就丢失了,这就是数据丢失的问题。

如何解决脑裂问题?

脑裂问题只需要在旧 Master 恢复网络之后,切换身份为 Slave 期间,不接收客户端的数据写入即可,那怎么解决这个问题呢?

Redis 为我们提供了以下两个配置,通过以下两个配置可以尽可能的避免数据丢失的问题:

  • min-slaves-to-write:与主节点通信的从节点数量必须大于等于该值主节点,否则主节点拒绝写入。
  • min-slaves-max-lag:主节点与从节点通信的 ACK 消息延迟必须小于该值,否则主节点拒绝写入。

这两个配置项必须同时满足,不然主节点拒绝写入。

在假故障期间满足 min-slaves-to-write 和 min-slaves-max-lag 的要求,那么主节点就会被禁止写入,脑裂造成的数据丢失情况自然也就解决了。

课后思考

设置了参数之后,Redis 脑裂问题能完全被解决吗?为什么?Zookeeper 有脑裂问题吗?它是如何解决脑裂问题的?

参考 & 鸣谢

javacn.site

#八股文##java#
全部评论

相关推荐

头像
07-28 10:37
门头沟学院 Java
1.租房:下了多个软件综合下来,贝壳找房最靠谱。好像也有人用小红书。(我没用过)软件上面找好,找中介看房。中介费大约是一个月房租,要是可以砍价可以和他砍一砍。(如果没确定好自己明天就要入住。这个房子还想再看一看有点犹豫就不要交押金,一定不要。因为你交押金可能会后悔,这个钱他是不退给你。我就这样损失了500。我朋友损失了1000的押金。)2.公积金:搜小程序比如北京公积金,然后认证后可以看到你入职后的公积金。这个公积金可以租房或者买房的名义提出来。如果比较缺钱可以用租房合同把这个钱提出来用。3.医保卡:它分为个人账户和公用账户。个人账户是你自己交的钱。然后你买药可以用个人账户。公用账户就是看这个药品有没有被纳入医保。如果纳入了医保,他是个人账户和公用账户各扣一点。支付宝搜医保卡直接就能扫码付。好像现在美团买药也可以。4.应届毕业生优惠:上比如北京本地宝,去看一下自己城市对应届生有什么优惠政策?(比如租房补贴景点优惠。地铁优惠。)我的城市一年之内刷身份证可以无限次免费游览某些景点。5.劳动合同:这个我不怎么会看,我主要看了合同年限还有薪资待遇和他说的是否相符。其他的三页纸太长了,我都没咋看。(可以去企查查上查一下这个公司。运营状态,注册资本看一下这个公司正不正规。如果没啥问题的话,合同我感觉也不用一条一条看。)6.如果入职快半年或一年。可以下软件个人所得税。现在可以申请退税。一般都是公司申请好自己进去点个确认。目前只弄了23年的。24年可能要到25年再弄吧。7.个人以为工作就是去赚钱的。如果一个正式工作,一开始你自己没赚到钱还搭钱了,那感觉大概率不咋靠谱。注意自己仔细辨别一下。 #职场新人生存指南#
投递贝壳找房等公司10个岗位 职场新人生存指南
点赞 评论 收藏
分享
8 35 评论
分享
牛客网
牛客企业服务