0


分布式系统脑裂现象、Lease机制介绍

🍊 Java学习:Java从入门到精通总结

🍊 深入浅出RocketMQ设计思想:深入浅出RocketMQ设计思想

🍊 绝对不一样的职场干货:大厂最佳实践经验指南

📆 最近更新:2022年5月10日

🍊 个人简介:通信工程本硕💪、Java程序员🌕。做过科研,发过专利,优秀的程序员不应该只是CRUD

🍊 点赞 👍 收藏 ⭐留言 📝 都是我最大的动力!

文章目录

脑裂

在这里插入图片描述
一个故障就将服务器集群分成两部分,右边就不能接收到Leader的日志写入信息了,右边三个机器就会选举出一个新的Leader,原先的集群就分成了两个小集群,这两个小集群就可能产生数据不一致的现象,一个client从不同的集群中读取到了不同的信息,这种现象被称为脑裂

产生原因: 网络断联

解决方案:

使用全局过半的方案,上面5台服务器的情况下,Candidate必须得票超过总数的一半(2)才可以当选Leader,这也正是Zookeeper的解决方案。

在这种情况下,左侧的两台机器都是不可用的状态,右边选举出一个新的Leader来继续提供服务
在这里插入图片描述

注意:使用这种解决方案的话,必须保证超过一半的机器处于正常工作状态

Lease机制介绍

颁发者给节点颁发租约,指定其在一定时间内担任Leader,租约一旦颁发出去,在一定时间内就强制生效且不可撤销
在这里插入图片描述

还是以上面的场景为例,假设在脑裂发生之前,左边的Leader拿到一个契约,指明在1到10秒之间担任Leader角色,即使右边三台机器连不上Leader,它还是会保留Leader的角色。当契约时间过了之后,将会有一个新的Leader产生。

**10s的Lease间隔时间是在实践中检验过,比较合适的 **
如果拿到租约的Leader挂了,则需要等待下一次租约颁布才能恢复使用,牺牲一点可用性保证了不出现脑裂(强一致性)

潜在问题: Lease机制依赖于每台服务器的时钟,颁发Lease的机器和接收租约的机器之间的时钟误差会导致集群短暂不可用


本文转载自: https://blog.csdn.net/HNU_Csee_wjw/article/details/124617152
版权归原作者 小王曾是少年 所有, 如有侵权,请联系我们删除。

“分布式系统脑裂现象、Lease机制介绍”的评论:

还没有评论