文章目录🍊 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的机器和接收租约的机器之间的时钟误差会导致集群短暂不可用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)