1. 集群节点
ZK集群中的节点有3种角色和4种状态。
3种角色:
- leader:领导者
- follower:随从,参与选举和投票,可被选举为领导者。
- observer:接受者,不参与选举和投票
4种状态:
- LOOKING:当前Server不知道leader是谁,正在搜寻。
- LEADING:当前Server即为选举出来的leader。
- FOLLOWING:leader已经选举出来,当前Server与之同步。
- OBSERVING:observer的行为在大多数情况下与follower完全一致,但是他们不参加选举和投票,而仅仅接受(observing)选举和投票的结果。
2. 原子广播协议
原子消息系统是ZK的核心,用于保证同步所有服务器:
- 可靠性传输。如果消息m被到一台服务器接受,那么它将被所有的服务器接受。
- 全局有序。如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布。
- 偏序。如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。
Zab(Zookeeper Atomic Broadcast)协议保证了原子消息系统的高效性、可靠性、易实现性和易维护性。Zab协议假设服务器间可以构建一个点对点的FIFO通道,FIFO通道依赖TCP进行通信:
- 有序传输。数据传输有序,消息m之前的消息传输完成才可传输m,消息m传输完成后,消息m之后的消息