ZooKeeper集群中
包括如下三种角色:①leader ②follower ③observer
角色分析:
leader:是zookeeper里的核心,它是起到了整个主导集群的作用。比如事务请求的调度、处理,保证事务处理中的顺序性;
follower:①处理客户端的非事务请求
②转发事务请求给leader服务器
③参与整个事务的投票过程,(必须过半集群服务器发送ack,才能够commit提交)
④参与leader选举的投票
observer:一个观察者的角色。是 zookeeper3.3开始引入的一个全新的服务器角色。能够了解集群中的状态变化,对这些状态 进行同步,工作原理和follower差不多
唯一的不同:observer节点不参与任何形式的投票(包括:事务的投票和leader选举的投票)
节点情况处理:
客户端连接zookeeper集群,会随机连接集群中的某个节点
1.如果是读请求,可以在任意节点去处理数据;
2.如果是写请求,那么这个请求会转发给leader去处理,使用2PC协议来完成事务的提交。
提示:
1.2PC协议(参考:2PC协议),不会将事务转发给observer节点;
2.observer节点,在事务2PC协议处理完成之后,会将数据同步至observer节点;
3.zookeeper集群,不需要集群中所有节点都给出确定响应才能提交,只要当前集群中过半数节点给确定响应,事务就会提交。
为什么要有observer节点
如果希望zookeeper集群的性能更强,我们只能水平扩展,引入更多的节点来满足要求。引入更多的节点,虽然会带来性能的提升,但是也会带来性能上的一些影响。所有的请求都需要更多的节点来完成事务操作的投票,多一个节点投票就相当于多一个网络请求,也会对整个集群的性能带来影响。因此,不需要参与写事务投票和leader选举投票的基础上,observer能够在不影响集群性能的情况下做到提高整个集群的性能,这就是observer节点存在的意义。
但是observer节点必须要同步 leader 的数据,从而在处理请求的时候保证数据的一致性。
zookeeper集群节点2n+1奇数节点机制
满足zookeeper的投票机制,必须满足过半节点能够正常工作,投票结果才能有效(偶数节点的话,多加节点,不但不会影响结果,多一个节点投票反而还会增加网络负担)
博主写作不易,来个关注呗
求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙
博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ