一、zookeeper集群節點容錯性
1.在集群模式下,建議至少部署3個zk進程,或者部署奇數個zk進程。如果只部署2個zk進程,當其中一個zk進程掛掉后,剩下的一個進程並不能構成一個quorum的大多數。因此,部署2個進程甚至比單機模式更不可靠,因為2個進程其中一個不可用的可能性比一個進程不可用的可能性還大。
2.節點部署最好使用奇數台服務器。如果zookeeper擁有5台服務器,那么在最多2台服務器出現故障后,整個服務還可以正常使用。所謂的zookeeper容錯是指,當宕掉幾個zookeeper服務器之后,剩下的個數必須大於宕掉的個數,也就是剩下的服務數必須大於n/2,zookeeper才可以繼續使用,無論奇偶數都可以選舉leader。5台機器最多宕掉2台,還可以繼續使用,因為剩下3台大於5/2。說為什么最好為奇數個,是在以最大容錯服務器個數的條件下,會節省資源,比如,最大容錯為2的情況下,對應的zookeeper服務數,奇數為5,而偶數為6,也就是6個zookeeper服務的情況下最多能宕掉2個服務,所以從節約資源的角度看,沒必要部署6(偶數)個zookeeper服務。
3.zookeeper有這樣一個特性:集群中只要有過半的機器是正常工作的,那么整個集群對外就是可用的。也就是說如果有2個zookeeper,那么只要有1個死了zookeeper就不能用了,因為1沒有過半,所以2個zookeeper的死亡容忍度為0;同理,要是有3個zookeeper,一個死了,還剩下2個正常的,過半了,所以3個zookeeper的容忍度為1。
二、zookeeper集群配置
1.zookeeper 單台和集群的區別在於配置文件(conf/zoo.cfg)的配置不同,還有dataDir的目錄需要新建一個沒有文件類型的文件myid,並且在myid里面輸入對應配置中server.后面的數值。進去conf目錄,zoo_sample.cfg 復制並且修改文件名為zoo.cfg,然后打開zoo.cfg文件,修改的配置文件如下:server.x=y:z:m(其中x為myid寫的值,而且是數值類型,其主要也是用於選舉leader的值之一,y為當前機器的ip地址,z為心跳端口,m為數據交換端口,比如選舉leader時的端口)。
tickTime=2000 initLimit=10 syncLimit=5 dataDir=../data clientPort=2181 #集群服務器配置 #server.x=y:z:m server.1=0.0.0.1:2888:3888 server.2=0.0.0.2:2888:3888 server.3=0.0.0.3:2888:3888
2.進去配置文件中dataDir配置的目錄,在目錄下新建一個文件名字叫 myid,並且打開myid文件里面的值輸入配置文件中 server.后面的數值。
3.復制一份程序並且重新命名,按照上面的步驟操作一邊,其實也可以復制配置文件或直接復制程序。
我是一個學習的搬運工,原版地址:https://www.cnblogs.com/lbky/p/11840695.html