zookeeper集群環境配置
環境參數如下:
服務器操作系統: 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節點)
zookeeper集群環境配置