zookeeper偽叢集搭建及遇到的坑
今天搭建了zookeeper的單機偽叢集,記錄一下防止忘記
安裝
從官網下載安裝包解壓到本地目錄,比如D:/zookeeper-3.4.10
配置
為了執行3個 zookeeper 服務端程序,新建存放這3個程序執行和配置資料的目錄,比如叫 z1
、 z2
、 z3
。在這3個目錄下都建一個 data 目錄用於存放程序執行時的資料,接著在這3個目錄都新建一個叫 myid 的檔案,內容分別為1、2、3(即 z1 下 myid 的內容是1、z2 下 myid 的內容是2、z3 下 myid 的內容是3),最後在這3個目錄下都建一個 .cfg 結尾的配置檔案。
z1 目錄下的配置檔案叫 z1.cfg,內容如下:
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,內容如下:
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,內容如下:
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:都是表示連線的心跳數,具體含義暫時可以不用管。
dataDir:zookeeper 儲存資料的目錄,預設情況下 zookeeper 寫資料的日誌檔案也儲存在這個目錄裡。
clientPort:客戶端連線伺服器的埠,zookeeper 會監聽這個埠,接受客戶端的訪問請求。
server.N:XXXX:P1:P2 。其中 N 表示伺服器編號,XXXX 表示該伺服器的 IP 地址,P1 和 P2 是兩個 TCP 埠號,分別用於仲裁和 Learder 選舉。伺服器編號也對應著上面配置的 myid 檔案的內容,比如上面 z1 目錄下的 myid 內容是 1 ,也就是這裡的 server.
啟動
分別啟動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 的程序啟動好了
坑
在啟動的過程中遇到一個坑,在啟動好後用 sh $(zookeeper壓縮包解壓後的全路徑)/bin/zkServer.sh status $(z2所在目錄的全路徑)/z2.cfg
報錯如下
解決過程如下:
使用 ./zkServer.sh start-foreground /mnt/d/zkData/z1/zoo.cfg
使zookeeper前臺執行,拋如下異常
但是我已經寫了myid檔案了,怎麼找不到呢?
其實是這樣,我在windows10的linux sub system裡執行的,不能用windows裡的路徑格式,要改為這樣的格式/mnt/d/{zookeeper myid路徑},這個坑是windows的坑啊。。。
驗證
用telnet連線客戶端埠,如下說明成功