ZooKeeper集群搭建

單機(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è)名即可

配置中的 dataDirclientPort 可以根據(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.238 192.168.199.239 192.168.199.240 3個(gè)節(jié)點(diǎn)
  • 將zk傳到每個(gè)節(jié)點(diǎn)上
  • 開(kāi)放服務(wù)器的 2888 3888 端口

解壓壓縮包

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
image-20200725162308471

上面框起來(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.xx

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ì)其的理解和使用。


參考 :

ZooKeeper Getting Started Guide

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容