偽分布式集群就是在一臺機(jī)器部署多個zk應(yīng)用,部署之前服務(wù)器需要有jdk環(huán)境 java -version可以顯示相關(guān)java信息才可以進(jìn)行zookeeper搭建,本文是基于macOs搭建,原文地址
下載
下載之后解壓
tar –zxvf zookeeper-3.4.6.tar.gz
文件夾重命名
mv zookeeper-3.4.6 zookeeper
配置
step1
進(jìn)入zk中的conf目錄下輸入cp zoo-sample.cfg zoo1.cfg cp zoo-sample.cfg zoo2.cfg、cp zoo-sample.cfg zoo3.cfg

step2
分別對zoo1、2、3文件進(jìn)行編輯,修改內(nèi)容如下
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/Users/book/zk/server1/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=localhost:2187:2887
server.2=localhost:2188:2888
server.3=localhost:2189:2889
dataDir=/Users/book/zk/server1/data
clientPort=2181
server.1=localhost:2187:2887
server.2=localhost:2188:2888
server.3=localhost:2189:2889
zoo2.cfg (clientPort=2182 ;dataDir=/Users/book/zk/server2/data)
zoo3.cfg (clientPort=2182 ;dataDir=/Users/book/zk/server3/data)
配置說明
tickTime:這個時間是作為 Zookeeper 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發(fā)送一個心跳。
initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務(wù)器的客戶端,而是 Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。當(dāng)已經(jīng)超過 10個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務(wù)器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗??偟臅r間長度就是 10*2000=20 秒
syncLimit:這個配置項標(biāo)識 Leader 與 Follower 之間發(fā)送消息,請求和應(yīng)答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10秒
dataDir:顧名思義就是 Zookeeper 保存數(shù)據(jù)的目錄,默認(rèn)情況下,Zookeeper 將寫數(shù)據(jù)的日志文件也保存在這個目錄里。
clientPort:這個端口就是客戶端連接 Zookeeper 服務(wù)器的端口,Zookeeper 會監(jiān)聽這個端口,接受客戶端的訪問請求。
server.A=B:C:D:其中 A 是一個數(shù)字,表示這個是第幾號服務(wù)器;B 是這個服務(wù)器的 ip 地址;C 表示的是這個服務(wù)器與集群中的 Leader 服務(wù)器交換信息的端口;D 表示的是萬一集群中的 Leader 服務(wù)器掛了,需要一個端口來重新進(jìn)行選舉,選出一個新的 Leader,而這個端口就是用來執(zhí)行選舉時服務(wù)器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
$ mkdir /Users/book/zk/server1/data
$ mkdir /Users/book/zk/server2/data
$ mkdir /Users/book/zk/server3/data
$ echo 1 > /Users/book/zk/server1/data/myid
$ echo 2 > /Users/book/zk/server2/data/myid
$ echo 3 > /Users/book/zk/server3/data/myid

啟動
$ ./zkServer.sh start zoo1.cfg
$ ./zkServer.sh start zoo2.cfg
$ ./zkServer.sh start zoo3.cfg
檢測是否成功
$ ./zkCli.sh -server localhost:2181
