一、整体介绍
1)角色:在zookeeper集群中,会有三种角色,leader、 follower、 observer分别对应着领导者、议员、观察者。
2)机制:zookeeper采用半数以上的投票经过机制。
3)工做方式:不管访问到了哪台zookeeper服务器,最终都会被转发给leader服务器,再由leader服务器分给zookeeper集群中全部follower服务器去投票,半数投票经过就被认为操做可执行,不然不可执行。
observer与follower服务器最大的不一样在于observer没有投票权,在客户端发起的请求或操做中,leader服务器是不会把消息传递给observer服务器让其投票的,只负责执行结果。
二、zookeeper集群节点为单数个
其根本为zookeeper的半数投票经过机制。
1)容错:
举例说明--
台服务器,至少2台正常运行才行,正常运行1台服务器都不容许挂掉;3台服务器,至少2台正常运行才行,正常运行能够容许1台服务器挂掉;4台服务器,至少3台正常运行才行,正常运行能够容许1台服务器挂掉;......
经过以上能够发现,3台服务器和4台服务器都最多容许1台服务器挂掉,5台服务器和6台服务器都最多容许2台服务器挂掉,可是明显4台服务器成本高于3台服务器成本,6台服务器成本高于5服务器成本。这是因为半数以上投票经过决定的。
2)防脑裂:一个zookeeper集群中,能够有多个follower、observer服务器,可是必需只能有一个leader服务器。若是leader服务器挂掉了,剩下的服务器集群会经过半数以上投票选出一个新的leader服务器。
举例说明--
一个集群3台服务器,所有运行正常,可是其中1台裂开了,和另外2台没法通信。3台机器里面2台正常运行过半票能够选出一个leader。
一个集群4台服务器,所有运行正常,可是其中2台裂开了,和另外2台没法通信。4台机器里面2台正常工做没有过半票以上达到3,没法选出leader正常运行。
一个集群5台服务器,所有运行正常,可是其中2台裂开了,和另外3台没法通信。5台机器里面3台正常运行过半票能够选出一个leader。
一个集群6台服务器,所有运行正常,可是其中3台裂开了,和另外3台没法通信。6台机器里面3台正常工做没有过半票以上达到4,没法选出leader正常运行。
三、配置说明
1)zoo.cfg文件
clientPort=2181
#client port,顾名思义,就是客户端链接zookeeper服务的端口。这是一个TCP port。
server.1=127.0.0.1:20881:30881
server.2=127.0.0.1:20882:30882
server.3=127.0.0.1:20883:30883
#上面的配置中有两个TCP port。后面一个是用于Zookeeper选举用的,而前一个是Leader和Follower或Observer交换数据使用的。server.后面的数字,就是myid。
2)myid介绍
在dataDir里会放置一个myid文件,里面就一个数字,用来惟一标识这个服务。这个id是很重要的,必定要保证整个集群中惟一。zookeeper会根据这个id来取出server.x上的配置。好比当前id为1,则对应着zoo.cfg里的server.1的配置。
并且在后面leader选举的时候,这个id的大小也是有意义的。