本文總結一下在Linux上Zookeeper的安裝和配置
安裝
在zookeeper官網上推薦的清華鏡像地址下載對應版本的zk安裝包,以最新版本3.5.6舉例,這裏記住要下載帶-bin的包
如果下載不帶-bin的包,啓動zk時可能會報錯Starting zookeeper … FAILED TO START
查看日誌會看到如下錯誤
Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
配置
- 解壓,進入conf目錄拷貝配置文件
cp -a zoo_sample.cfg zoo.cfg
默認端口2181,可自行修改,如有需要可以修改dataDir路徑
- bin/zkServer.sh start 啓動zk服務
- bin/zkServer.sh status 查看zk狀態
- bin/zkServer.sh stop 停止zk服務
- bin/zkCli.sh 進入zk客戶端操作界面
僞集羣搭建
僞集羣指的是在一臺物理機上搭建zk集羣
- linux上解壓三份zookeeper到同一目錄下
- 修改各自的配置文件zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper1
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
tickTime 一次心跳的時間,單位是毫秒
initLimit 初始follower和leader連接並同步數據的超時時間,如果在該時間內沒有半數以上的follower連接並同步成功的話,leader會放棄,並重新選舉
syncLimit 一個follower和leader同步的時間,該時間內沒有完成同步,會被leader丟棄,連接到該follower的客戶端會自動連接到其他節點
分別指定各自的dataDir和clientPort,都加入如下集羣配置
initLimit和syncLimit的數字表示有幾個心跳時間 n * tickTime
server.myid=hostname:port1:port2
myid代表集羣機器的序號
hostname代表機器域名
port1端口代表集羣間數據通信的端口
port2端口代表集羣間進行leader選舉的端口
因爲是僞集羣,所以各自的兩個通信端口要不一樣
**注意:**修改各自的客戶端端口,可以是2181、2182、2183
同時修改各自的dataDir路徑
- 增加myid文件
在三份zk的數據目錄(dataDir)下,創建名爲myid的文件,內容爲各自的id(分別是1、2、3) - 分別啓動三臺zookeeper服務
- 查看狀態,可以看到一臺leader和兩臺follower,如果將leader服務關閉,集羣將會重新選舉leader