zookeeper节点为什么要是奇数台,zookeeper在HDFS中的作用是什么,zookeeper的容错性

     zookeeper在HDFS中的作用: 

     HDFS2.x中要时刻保持只有一台active 的NameNode向外提供服务,zookeeper作为分布式协调服务进程,当我们的NameNode初始化启动时,会先向它注册信息,竞争锁,先抢占到锁资源的NameNode就是active。

      zookeepr实时监控NameNode的健康状态,当一台NameNode宕机之后,另外一台NameNode就会竞争锁资源,在ZKFC的帮助下,变为active对外进行服务。

      当那台宕机的NameNode的节点重新恢复启动之后,重新向zookeeper发送请求,发现active锁已经被其他节点占用了,就会一直保持StandBy状态了。

     zookeeper集群要部署为奇数台的原因是:当我们的NameNode竞争锁时,Zookeeper会进行投票选举,奇数节点可以保证不出现平票的现象(选举机制)

    

zookeeper的容错性:

所谓的zookeeper容错是指,当宕掉几个zookeeper服务器之后,剩下的个数必须大于宕掉的个数,也就是剩下的服务数必须大于n/2,zookeeper才可以继续使用,无论奇偶数都可以选举leader。5台机器最多宕掉2台,还可以继续使用,因为剩下3台大于5/2。说为什么最好为奇数个,是在以最大容错服务器个数的条件下,会节省资源,比如,最大容错为2的情况下,对应的zookeeper服务数,奇数为5,而偶数为6,也就是6个zookeeper服务的情况下最多能宕掉2个服务,所以从节约资源的角度看,没必要部署6(偶数)个zookeeper服务。

zookeeper有这样一个特性:集群中只要有过半的机器是正常工作的,那么整个集群对外就是可用的。也就是说如果有2个zookeeper,那么只要有1个死了zookeeper就不能用了,因为1没有过半,所以2个zookeeper的死亡容忍度为0;同理,要是有3个zookeeper,一个死了,还剩下2个正常的,过半了,所以3个zookeeper的容忍度为1;同理你多列举几个:2->0;3->1;4->1;5->2;6->2会发现一个规律,2n和2n-1的容忍度是一样的,都是n-1,所以为了更加高效,何必增加那一个不必要的zookeeper呢。

根据以上可以得出结论:出现资源节省的角度

    

     

猜你喜欢

转载自blog.csdn.net/qq_34341930/article/details/89053449