PS:本篇博客仅仅是个人的笔记,且是个人的理解,文字较为口语化,如有错误,请大牛指出。如果想了解更深入的,可以根据我这篇博客的情况自行查找网上资料(官网或者其他大牛的博客详解)

一、zookeeper的工作流程

zookeeper是整个集群的注册中心,所有的client端想要发起请求,都要经过zookeeper,并通过投票(超过半数)才能得到响应。

二、zookeeper投票

zookeeper集群中可以有多个zookeeper server,其中会有一个leader server,其他的都是follower server,当然,leader server也是通过投票选出来的,当票数过半是就可以通过,如果只有一个zookeeper的话,那这个zookeeper就是leader server。

三、zookeeper的个数

一般zookeeper的个数要是奇数个,偶数个也是可以的,但没必要。

1、容错:例如,搭建3个和搭建4个zookeeper集群,此时如果要通过client发起的请求,那么3个zookeeper的集群要2票就能通过,那么这个集群就允许一台zookeeper挂掉;而4台zookeeper的集群就要3票才能通过,那么集群也只允许挂一台。既然都允许挂掉一台,那么就显得4台zookeeper就显得浪费了。

2、splite-brain(脑裂):当集群分裂了成了两个集群,那么就容易出现这个问题,同样以3台和4台为例。当集群为3台时,可能会被分成1台和2台,那么此时2台的集群投票选出leader server时,就可以以2(超过半数)方式选出一个leader server;当集群为4台时,如果被分成了1台和3台是可以的,但如果被分成了2台和2台,那么无论怎么投票都无法选出一个leader server,就会出现所有的client的请求都被接受了,但无法给出响应。

待续。。。

04-01 01:08