问题导读
一、zookeeper 是如何保证事务的顺序一致性的?
二、分布式集群中为什么会有 Master?
三、zookeeper 节点宕机如何处理?
01
zookeeper 是如何保证事务的顺序一致性的?
zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal(提议)都在被提出的时候加上了 zxid,
zxid 实际上是一个 64 位的数字,高 32 位是 epoch( 时期; 纪元; 世; 新时代)用来标识 leader 周期,
如果有新的leader 产生出来,epoch 会自增。
低 32 位用来递增计数,当新产生 proposal 的时候,会依据数据库的两阶段过程,首先会向其他的 server 发出事务执行请求,
如果超过半数的机器都能执行并且能够成功,那么就会开始执行。
分享朋友圈,每天进步一点点~
02
分布式集群中为什么会有 Master?
在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的 机器可以共享 这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行 leader 选举。
03
zookeeper 节点宕机如何处理?
Zookeeper 本身也是集群,推荐配置不少于 3 个服务器。
Zookeeper 自身也要 保证当一个节点宕机时,其他节点会继续提供服务。
如果是一个 Follower 宕机,还有 2 台服务器提供访问,因为 Zookeeper 上 的数据是有多个副本的,数据并不会丢失;
如果是一个 Leader 宕机,Zookeeper 会选举出新的 Leader。
ZK 集群的机制是只要超过半数的节点正常,集群就能正常提供服务。只有在 ZK 节点挂得太多,只剩一半或不到一半节点能工作,集群才失效。
所以
3 个节点的 cluster 可以挂掉 1 个节点(leader 可以得到 2 票>1.5)
2 个节点的 cluster 就不能挂掉任何 1 个节点了(leader 可以得到 1 票<=1)
- End -