單機(jī)啟動(dòng)
下載
https://zookeeper.apache.org/releases.html#download
解壓下載下來(lái)的壓縮包
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
修改配置文件
cd conf/
mv zoo_sample.cfg zoo.cfg
這里單機(jī)啟動(dòng)我們就使用默認(rèn)的配置文件,改個(gè)名即可
配置中的
dataDir和clientPort可以根據(jù)自己的需求改,dataDir默認(rèn)是在/tmp路徑下的,一般是要修改的,這里演示就不做修改了 ,clentPort可以根據(jù)自己的需要修改,默認(rèn)是 2181端口
啟動(dòng)zk
./bin/zkServer.sh start
測(cè)試客戶端連接zk
./bin/zkCli.sh -server 127.0.0.1:2181
輸入 help 可以查看zkCli的命令,這里使用幾條命令測(cè)試一下
[zk: 127.0.0.1:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 15] create /test sample
Created /test
[zk: 127.0.0.1:2181(CONNECTED) 16] get /test
sample
[zk: 127.0.0.1:2181(CONNECTED) 17] set /test bar
[zk: 127.0.0.1:2181(CONNECTED) 20] get /test
bar
[zk: 127.0.0.1:2181(CONNECTED) 21] delete /test
[zk: 127.0.0.1:2181(CONNECTED) 23] ls /
[zookeeper]
集群搭建
準(zhǔn)備工作
- 3個(gè)節(jié)點(diǎn) ,這里使用了3個(gè)虛擬機(jī)節(jié)點(diǎn) ,我這里分別準(zhǔn)備了
192.168.199.238192.168.199.239192.168.199.2403個(gè)節(jié)點(diǎn) - 將zk傳到每個(gè)節(jié)點(diǎn)上
- 開(kāi)放服務(wù)器的
28883888端口
解壓壓縮包
tar -zxvf apache-zookeeper-3.6.1-bin.tar.gz
3個(gè)節(jié)點(diǎn)都執(zhí)行一遍
修改配置文件
到隨便一個(gè)節(jié)點(diǎn)上修改,之后scp到其他幾點(diǎn)即可。我這里到238節(jié)點(diǎn)上改。
vim conf/zoo.cfg

上面框起來(lái)的兩處配置項(xiàng)要注意
dataDir這里在上面單機(jī)啟動(dòng)時(shí)沒(méi)有修改,這里我們修改一下,可以根據(jù)自己的習(xí)慣設(shè)置 ,不在tmp下就行 ,這里設(shè)置了/data/zookeeper-
server.x這里是設(shè)置zk每個(gè)幾點(diǎn)的host 和 開(kāi)放通訊的端口 ,格式為server.x=host:port1:port2,為什么需要兩個(gè)端口呢,這里引用官網(wǎng)的解釋?zhuān)?簡(jiǎn)而言之,就是其中一個(gè)端口負(fù)責(zé)正常通訊,另一個(gè)端口要去選舉leader)Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.
配置文件改好后,我們還需要新建 myid 文件表示這個(gè)節(jié)點(diǎn)是 server.x 的哪個(gè):到我們上面配置的 dataDir 目錄下 (/data/zookeper) ,新建一個(gè) myid 的 文件,寫(xiě)入 server.x 的 x :
cd /data/zookeeper
echo 1 > myid
另外兩個(gè)節(jié)點(diǎn)也執(zhí)行相同的操作,寫(xiě)入對(duì)應(yīng)的 x :
// 192.168.199.239
cd /data/zookeeper
echo 2 > myid
// 192.168.199.240
cd /data/zookeeper
echo 3 > myid
啟動(dòng)zk
每個(gè)節(jié)點(diǎn)都執(zhí)行啟動(dòng)命令:
./bin/zkServer.sh start
使用 jps 查看進(jìn)程:
[root@localhost apache-zookeeper-3.6.1-bin]# jps
29372 Jps
29245 QuorumPeerMain
QuorumPeerMain 就是 zk 的進(jìn)程了
3個(gè)節(jié)點(diǎn)都起來(lái)后,我們查看一下集群狀態(tài),驗(yàn)證是否成功啟動(dòng)了:
238 :
[root@localhost apache-zookeeper-3.6.1-bin]# ./bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/servers/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
239:
[root@localhost apache-zookeeper-3.6.1-bin]# ./bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/servers/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
240:
[root@localhost apache-zookeeper-3.6.1-bin]# ./bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /opt/servers/apache-zookeeper-3.6.1-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader
可以看到 ,現(xiàn)在 240節(jié)點(diǎn)是 leader ,其他兩個(gè)節(jié)點(diǎn)是follower , 集群已經(jīng)啟動(dòng)成功了。
測(cè)試客戶端連接zk
我們使用 zkCli 連到 240 (主節(jié)點(diǎn))驗(yàn)證是否可以正常使用
./zkCli.sh -server 192.168.199.240:2181
[zk: 192.168.199.240:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: 192.168.199.240:2181(CONNECTED) 1] create /foo bar
Created /foo
[zk: 192.168.199.240:2181(CONNECTED) 2] ls /
[foo, zookeeper]
[zk: 192.168.199.240:2181(CONNECTED) 3] get /foo
bar
總結(jié)
ZooKeeper 作為一個(gè)基礎(chǔ)的分布式協(xié)調(diào)服務(wù),在很多地方都有使用 ,如 dubbo kafka solr 等 。
總的來(lái)說(shuō),整個(gè)搭建過(guò)程還是很簡(jiǎn)單的。對(duì)zk的學(xué)習(xí)還需要更多的實(shí)踐到項(xiàng)目中,加深對(duì)其的理解和使用。
參考 :