環境參數如下: 伺服器操作系統: Red Hat Enterpriser Linux 6.5 三台(IP地址分別為:192.168.5.128,192.168.5.129,192.168.5.130) zookeeper版本: zookeeper-3.4.10 JDK版本: jdk1.8.0_144 ...
環境參數如下:
伺服器操作系統: Red Hat Enterpriser Linux 6.5 三台(IP地址分別為:192.168.5.128,192.168.5.129,192.168.5.130)
zookeeper版本: zookeeper-3.4.10
JDK版本: jdk1.8.0_144
現在先配置其中的一臺伺服器192.168.5.128
1 將zookeeper解壓到/usr/目錄下(/usr/zookeeper-3.4.10)
2 在/usr/zookeeper-3.4.10目錄新新建logs,data文件夾作為zookeeper配置文件的一部分
3 在/usr/zookeeper-3.4.10/conf目錄下新建配置文件zoo.cfg,可以把zoo_sample.cfg的內容複製到zoo.cfg
4 修改zoo.cfg文件的內容,配置文件內容如下:
1 # The number of milliseconds of each tick
2 tickTime=2000
3 # The number of ticks that the initial
4 # synchronization phase can take
5 initLimit=10
6 # The number of ticks that can pass between
7 # sending a request and getting an acknowledgement
8 syncLimit=5
9 # the directory where the snapshot is stored.
10 # do not use /tmp for storage, /tmp here is just
11 # example sakes.
12 dataDir=/usr/zookeeper-3.4.10/data
13 dataLogDir=/usr/zookeeper-3.4.10/logs
14 # the port at which the clients will connect
15 clientPort=2888
16 server.0=192.168.5.128:8880:7770
17 server.1=192.168.5.129:8881:7771
18 server.2=192.168.5.130:8882:7772
19 # the maximum number of client connections.
20 # increase this if you need to handle more clients
21 #maxClientCnxns=60
22 #
23 # Be sure to read the maintenance section of the
24 # administrator guide before turning on autopurge.
25 #
26 # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
27 #
28 # The number of snapshots to retain in dataDir
29 #autopurge.snapRetainCount=3
30 # Purge task interval in hours
31 # Set to "0" to disable auto purge feature
32 #autopurge.purgeInterval=1
參數說明如下:
•tickTime: zookeeper中使用的基本時間單位, 毫秒值. •dataDir: 數據目錄. 可以是任意目錄. •dataLogDir: log目錄, 同樣可以是任意目錄. 如果沒有設置該參數, 將使用和dataDir相同的設置. •clientPort: 監聽client連接的埠號.其中clientPort預設是2181,可以根據實際情況修改為沒有使用的埠,server.0,server.1,server.2分別是三台伺服器的標識,各個參數的意義如下:
以server.0=192.168.5.128:8880:7770為例,192.168.5.128是伺服器IP地址,埠8880表示在zookeeper伺服器之間及和leader連接時使用,埠7770是在進行leader選舉時使用,其他的server.1,server2對應的意義和server.0完全一樣
5 在/usr/zookeeper-3.4.10/data目錄下新建myid文件,修改myid文件內容為0,這個0是和zoo.cfg文件裡面的server.0中的0是對應的
6 以上步驟完成以後,將192.168.5.128伺服器上整個的zookeeper-3.4.10目錄分別上傳到192.168.5.129,192.168.5.130兩台伺服器,命令如下:
1 scp -r /usr/zookeeper-3.4.10 [email protected]:/usr/zookeeper-3.4.19
2 scp -r /usr/zookeeper-3.4.10 [email protected]:/usr/zookeeper-3.4.19
7 上傳完以後,分別修改192.168.5.129伺服器上/usr/zookeeper-3.4.10/data目錄下的myid文件內容為1,192.168.5.130伺服器上/usr/zookeeper-3.4.10/data目錄下的myid文件內容為2
8 測試,先通過命令./zkServer.sh start啟動任意兩台伺服器,然後在命令行輸入./zkServer.sh status檢查服務啟動情況如果出現如下截圖的信息:
說明是伺服器防火牆的問題,把伺服器的防火牆都關掉,重新輸入./zkServer.sh status,如果能看到如下信息證明zookeeper集群配置成功
先在192.168.5.128上輸入./zkServer.sh start,截圖如下:
然後再用相同的方式啟動192.168.5.129上對應的服務,截圖如下:
在192.168.5.128,192.168.5.130上分別執行./zkServer.sh status檢查服務情況,截圖分別如下
以上圖片的展示信息說明伺服器192.168.5.128在集群中承擔的角色是follower,192.168.5.129在集群中承擔的角色是leader
現在把192.168.5.130伺服器上對應的服務啟動起來,通過檢查確認192.,168.5.130在集群中承擔的角色也是follower
現在通過命令./zkServer.sh stop把伺服器192.168.5.129的zookeeper服務停掉,然後再檢查每台伺服器成都的角色,發現此時,集群中的leader變成了192.168.5.130這台伺服器
通過以上測試可以獲取如下結論:
當zookeeper集群中存在多台伺服器的時候,只要存活的機器數在總伺服器數目半數以上就能夠正常對外提供服務,當集群中對外提供服務的伺服器只有2台的情況下,節點數大的伺服器被選中為leader的幾率會大(例如本文章中提到的當192.168.5.129伺服器停掉後,只有192.168.5.128,192.168.5.130對外提供服務,在配置文件中這兩台伺服器對應的節點分別是server.0,server.1,所以zookeeper會把server.1節點選擇為leader節點)