Zookeeper安裝方式有三種彻桃,單機模式和集群模式以及偽集群模式媒楼。
■ 單機模式:Zookeeper只運行在一臺服務(wù)器上花墩,適合測試環(huán)境逆济;
■ 偽集群模式:就是在一臺物理機上運行多個Zookeeper 實例;
■ 集群模式:Zookeeper運行于一個集群上绊汹,適合生產(chǎn)環(huán)境稽屏,這個計算機集群被稱為一個“集合體”(ensemble)
單機模式
下載 ZooKeeper,解壓西乖,將 conf 目錄下的?zoo_sample.cfg 復(fù)制一份重命名為 zoo.cfg
cp?zoo_sample.cfg zoo.cfg
然后直接啟動 ZooKeeper 就行了
bin/zkServer.sh start
查看 ZooKeeper 運行狀態(tài)
可以看到 ZooKeeper 的 Mode 是單機模式的(standalone)
使用客戶端連接? ZK
本地連接
bin/zkCli.sh
遠程連接 ZK
bin/zkCli.sh -server ip:port
停止 ZooKeeper
bin/zkServer.sh stop
偽集群模式
Zookeeper不但可以在單機上運行單機模式Zookeeper狐榔,而且可以在單機模擬集群模式 Zookeeper的運行,也就是將不同節(jié)點運行在同一臺機器获雕。我們在實驗的時候薄腻,可以先使用少量數(shù)據(jù)在集群偽分布模式下進行測試。當(dāng)測試可行的時候届案,再將數(shù)據(jù)移植到集群模式進行真實的數(shù)據(jù)實驗庵楷。這樣不但保證了它的可行性,同時大大提高了實驗的效率楣颠。這種搭建方式尽纽,比較簡便,成本比較低童漩,適合測試和學(xué)習(xí)弄贿,如果你的手頭機器不足,就可以在一臺機器上部署了 3個server矫膨。
注意事項
在一臺機器上部署了3個server差凹,需要注意的是:在偽分布式模式下我們使用的每個配置文件模擬一臺機器,也就是說單臺機器上運行多個Zookeeper實例侧馅。但是危尿,必須保證每個配置文檔的各個端口號不能沖突,除了clientPort不同之外馁痴,dataDir也不同谊娇。另外,還要在dataDir所對應(yīng)的目錄中創(chuàng)建myid文件來指定對應(yīng)的Zookeeper服務(wù)器實例弥搞。
■?clientPort端口:如果在1臺機器上部署多個server邮绿,那么每臺機器都要不同的 clientPort渠旁,比如 server1是2181,server2是2182,server3是2183
■?dataDir和dataLogDir:dataDir和dataLogDir也需要區(qū)分下船逮,將數(shù)據(jù)文件和日志文件分開存放顾腊,同時每個server的這兩變量所對應(yīng)的路徑都是不同的
■?server.X和myid: server.X 這個數(shù)字就是對應(yīng),data/myid中的數(shù)字挖胃。在3個server的myid文件中分別寫入了1杂靶,2,3酱鸭,那么每個server中的zoo.cfg都配 server.1 server.2,server.3就行了吗垮。因為在同一臺機器上,后面連著的2個端口凹髓,3個server都不要一樣烁登,否則端口沖突。
同樣將 conf 目錄下的?zoo_sample.cfg 復(fù)制三份蔚舀,分別重命名為 zoo1.cfg饵沧,zoo2.cfg,zoo3.cfg赌躺。
cp?zoo_sample.cfg zoo1.cfg
cp?zoo_sample.cfg zoo2.cfg
cp?zoo_sample.cfg zoo3.cfg
然后分別修改每個配置文件狼牺,我的配置如下:
創(chuàng)建 zoox.cfg 配置文件中 dataDir 和 dataLogDir 的路徑,
# 創(chuàng)建數(shù)據(jù)目錄
mkdir -p /var/elvis/zookeeper/data/server1
mkdir -p?/var/elvis/zookeeper/data/server2
mkdir -p?/var/elvis/zookeeper/data/server3
# 創(chuàng)建日志文件目錄
mkdir -p?/var/elvis/zookeeper/logs/server1
mkdir -p?/var/elvis/zookeeper/logs/server1
mkdir -p?/var/elvis/zookeeper/logs/server1
在每個?dataDir 目錄下常見一個 myid 文件并在其中寫入 server 對應(yīng)的序號礼患,比如在?/var/elvis/zookeeper/data/server1 目錄下創(chuàng)建一個 myid 文件是钥,并在 myid 中寫入 1,其他目錄同理缅叠。
然后使用每個配置文件啟動3個 ZooKeeper 實例:
bin/zkServer.sh stop conf/zoo1.cfg
bin/zkServer.sh stop conf/zoo2.cfg
bin/zkServer.sh stop conf/zoo3.cfg
可以使用 jps 來查看是否啟動成功
jps -ml
查看 zk 的運行狀態(tài)
bin/zkServer.sh status conf/zoo1.cfg
bin/zkServer.sh status conf/zoo2.cfg
bin/zkServer.sh status conf/zoo3.cfg
可以看到 ZK 的 Mode 不再是 standalone 了悄泥,而且 server2 作為 leader,其他2臺server 作為 follower肤粱。
客戶端連接 zk 集群
本地連接/遠程連接
bin/zkCli.sh -server ip:2181
bin/zkCli.sh -server ip:2182
bin/zkCli.sh -server ip:2183
可以看見码泞,我們遠程連接任何一個端口都能夠連接上。
上面我們知道 server2 是 leader狼犯,所以我們使用客戶端連接到 server2上,然后創(chuàng)建一些節(jié)點领铐。
bin/zkCli.sh -server 39.106.111.160:2182
create /zktest 123
現(xiàn)在我們在本地連接到 server1 看能不能看到剛才我們創(chuàng)建的節(jié)點悯森。
bin/zkCli.sh -server localhost:2181
ls /
get /zktest
可以看到我們在 server1 上也獲取到了剛才我們通過遠程連接在 server2 上創(chuàng)建的 /zktest 數(shù)據(jù)。
現(xiàn)在我們嘗試將 server2 這個leader 給停掉绪撵。
bin/zkServer.sh stop conf/zoo2.cfg
然后查看 server1和 server3 的運行狀態(tài)
現(xiàn)在可以看到 ZooKeeper 通過選舉瓢姻,將 server3選舉成了新的 leader。
這個時候我們剛才遠程連接到 server2 的客戶端開始報錯了音诈,zkCli.sh 客戶端并沒有實現(xiàn)連接斷后幻碱,自動連接其他節(jié)點的功能绎狭。
這時我們再重啟 server2
bin/zkServer.sh start conf/zoo2.cfg
然后再來查看各個 server 的運行狀態(tài)
可以看到 server2 再次加入組織,不過 server2已經(jīng)不再是 leader 了褥傍。
這個時候連接 sever2 的客戶端也從報錯中恢復(fù)過來儡嘶。
集群模式
集群模式和偽分布式部署基本相同,唯一的區(qū)別就是 zoo.cfg 中恍风,ip 配置不在是127.0.0.1 或 localhost 了蹦狂,而是真正的機器 ip。
server.2= ip:2288:3388