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

分布式系统脑裂现象、Lease机制介绍,第1张

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

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

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


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

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

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

文章目录
  • 脑裂
  • Lease机制介绍

脑裂


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


产生原因: 网络断联


解决方案:

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


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

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


Lease机制介绍

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

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


10s的Lease间隔时间是在实践中检验过,比较合适的

如果拿到租约的Leader挂了,则需要等待下一次租约颁布才能恢复使用,牺牲一点可用性保证了不出现脑裂(强一致性)


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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/904403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存