搭建 zookeeper 集羣

zookeepe r服務器端運行有兩種模式:單機模式(standalone)、仲裁模式(quorum),單機模式就是字面意思:由一個單獨的服務器提供服務。仲裁模式則有一組 zookeeper 服務器,它們之間能夠進行數據的複製,並同時服務於客戶端。標題所說的 zookeeper 集羣就是運行仲裁模式,這也是生產中實際會使用的方式。shell

在集羣中,爲了使任何一個節點掛掉都不會影響整個集羣的數據一致性,集羣中節點的數量公式爲 2n+1 臺,除非掛掉大於 n 臺(這裏的節點就是一個 zookeeper 服務器的意思,也就是運行一個 zookeeper 的服務端進程)。爲了演示這個例子,將跑3個 zookeeper 服務端進程。apache

安裝

官網下載zookeeper的壓縮包,通常是 tar 的壓縮包,下載完以後用 tar -xvf 解壓縮,解壓以後的 bin 目錄下即運行 zookeeper 命令的 shell 腳本: bash

zookeeper的bin目錄

配置

爲了運行3個 zookeeper 服務端進程,新建存放這3個進程運行和配置數據的目錄,好比叫 z一、z二、z3 。在這3個目錄下都建一個 data 目錄用於存放進程運行時的數據,接着在這3個目錄都新建一個叫 myid 的文件,內容分別爲一、二、3(即 z1 下 myid 的內容是一、z2 下 myid 的內容是二、z3 下 myid 的內容是3),最後在這3個目錄下都建一個 .cfg 結尾的配置文件。服務器

z1 目錄下的配置文件叫 z1.cfg,內容以下:session

tickTime=2000
initLimit=10
syncLimit=5
dataDir=$(z1所在目錄的全路徑)/data
clientPort=2981
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
複製代碼

z2 目錄下的配置文件叫 z2.cfg,內容以下:spa

tickTime=2000
initLimit=10
syncLimit=5
dataDir=$(z2所在目錄的全路徑)/data
clientPort=2982
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
複製代碼

z3 目錄下的配置文件叫 z3.cfg,內容以下:3d

tickTime=2000
initLimit=10
syncLimit=5
dataDir=$(z3所在目錄的全路徑)/data
clientPort=2983
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
複製代碼

tickTime:服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每隔 tickTime 時間就會發送一個心跳,以毫秒爲單位。也是 zookeeper 中的時間單元,zookeeper 中全部時間都是以這個時間單元爲基礎,進行整數倍配置的。例如,session 的最小超時時間是 2*tickTime 。日誌

initLimit 和 syncLimit:都是表示鏈接的心跳數,具體含義暫時能夠不用管。code

dataDir:zookeeper 保存數據的目錄,默認狀況下 zookeeper 寫數據的日誌文件也保存在這個目錄裏。cdn

clientPort:客戶端鏈接服務器的端口,zookeeper 會監聽這個端口,接受客戶端的訪問請求。

server.N:XXXX:P1:P2 。其中 N 表示服務器編號,XXXX 表示該服務器的 IP 地址,P1 和 P2 是兩個 TCP 端口號,分別用於仲裁和 Learder 選舉。服務器編號也對應着上面配置的 myid 文件的內容,好比上面 z1 目錄下的 myid 內容是 1 ,也就是這裏的 server.1 。

啓動

分別啓動3個 zookeeper 進程,啓動時使用上面新建的配置文件

啓動 z1 :

sh $(zookeeper壓縮包解壓後的全路徑)/bin/zkServer.sh start $(z1所在目錄的全路徑)/z1.cfg
複製代碼

啓動 z2 :

sh $(zookeeper壓縮包解壓後的全路徑)/bin/zkServer.sh start $(z2所在目錄的全路徑)/z2.cfg
複製代碼

啓動 z3 :

sh $(zookeeper壓縮包解壓後的全路徑)/bin/zkServer.sh start $(z3所在目錄的全路徑)/z3.cfg
複製代碼

當看到以下信息表示 zookeeper 的進程啓動好了

zookeeper啓動好了

上面是用 zkServer.sh start 命令啓動服務器,能夠用 zkServer.sh status 命令查看服務器的狀態,好比

sh $(zookeeper壓縮包解壓後的全路徑)/bin/zkServer.sh status $(z2所在目錄的全路徑)/z2.cfg
複製代碼

會看到結果:

服務器是 follower
或者
服務器是 leader

以我本機爲例能夠看到這三個進程實際是一個 leader 兩個 follower

三個服務器狀態

客戶端鏈接

用 zkCli.sh 鏈接 zookeeper ,

sh $(zookeeper壓縮包解壓後的全路徑)/bin/zkCli.sh -server 127.0.0.1:2981,127.0.0.1:2982,127.0.0.1:2983
複製代碼

2981等端口號就是上面所說的 .cfg 配置文件中的 clientPort 的值 看到控制檯輸出 CONNECTED 表示鏈接成功:

客戶端鏈接成功

以後能夠在控制檯中用 ls create delete 等命令操做了。

相關文章
相關標籤/搜索