可能我们印象中的zookeeper就是一个分布式的服务框架,所以可能也不是很清楚它的组成,所以你知道zookeeper集群由哪些角色组成的吗?有兴趣的小伙伴可以跟小编一起来看看。
leader角色
leader 服务器是整个ZK集群的核心,负责响应所有的对ZooKeeper状态变更的请求。它就会将每个状态更新请求进行排序和编号,以便来保证整个集群内部消息处理的FIFO。它主要的职责有:
处理事务请求(添加、修改、删除)和非事务的请求,也是事务请求的唯一调度和处理者,是能够保证集群事务处理的顺序的;
是集群内部各服务器的调度者。
follower 角色
从角色名字上可以看出来,follower服务器是ZooKeeper集群状态的跟随者,主要的职责有:
会处理客户端非事务的请求,如果请求是事务的请求,就会转发事务请求给leader 服务器;
参与事务请求 Proposal 的投票(leader发起的提案,要求follower投票,需要半数以上follower节点通过,leader才会commit数据);
参与 Leader 选举的投票;
observer 角色
observer就是ZooKeeper3.3 开始引入的一个全新的服务器角色,从字面上来理解,就是说该角色就充当了观察者的角色。观察ZooKeeper集群中的最新状态变化并且将这些状态变化同步到observer服务器上了。observer的工作原理与follower角色基本上是一致的,而它和follower 角色唯一的不同在于observer不参与任何形式的投票,包括事务请求Proposal的投票和leader选举的投票。只是一个简单的接收投票结果,所以我们增加再多的Observer,也不会去影响集群的写性能的。除了这个差别之外,其他的和Follower基本上是一样的了。比如说:Client都可以连接到他们,并且都可以发送读写请求给他们,收到写请求都会上报leader。简单来说就是,observer服务器只提供非事物请求服务,通常在于不影响集群事务处理能力的前提下提升集群非事物处理的能力。所以说observers可以在不伤害写性能的情况下扩展ZooKeeper。
集群的组成
通常来说zookeeper是由2n+1台server组成的,每个server都知道彼此的存在。对于2n+1台server,只要有n+1台(大多数)server可用的,整个系统保持可用。
我们已经了解到,一个 zookeeper 集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信了。
基于这个特性,如果要搭建一个能够允许F台机器down掉的集群,那么就要部署2*F+1台服务器构成的 zookeeper 集群。因此3台机器构成的 zookeeper 集群,能够在挂掉1台机器后依然正常工作。一个5台机器集群的服务,能够对2台机器挂掉的情况下进行容灾。如果一个由6台服务器构成的集群,同样只能挂掉2台机器。因此,5台和6台在容灾能力上并没有明显优势,反而增加了网络通信负担。系统启动时,集群中的server会选举出一台server为 Leader,其它的就作为 follower(这里不考虑 observer 角色)。
结论:之所以要满足这样一个等式,是因为一个节点要成为集群中的 leader,需要有超过集群中过半数的节点支持,这个涉及到 leader 选举算法。同时也涉及到事务请求的提交投票。
那么以上就有关zookeeper集群的所有相关信息了,还想了解更多java入门信息吗?可以关注本站最新消息获取哦。
推荐阅读: