1. 程式人生 > >Zookeeper實戰之單機叢集模式

Zookeeper實戰之單機叢集模式

前一篇文章介紹了Zookeeper的單機模式的安裝及應用,但是Zookeeper是為了解決分散式應用場景的,所以通常都會執行在叢集模式下。今天由於手頭機器不足,所以今天打算在一臺機器上部署三個Zookeeper服務來組成一個Zookeeper叢集。這裡解壓Zookeeper的安裝包到/opt目錄下,這裡用三個目錄來代表三個Zookeeper例項,分別是/opt/zookeeper1,/opt/zookeeper2和/opt/zookeeper3.

1. 首先編輯每個Zookeeper目錄下的conf/zoo.cfg檔案。三個配置配置檔案的內容分別如下

$ cat /opt/zookeeper1/conf/zoo.cfg
tickTime=2000
dataDir=/opt/zookeeper1/data
clientPort=2181
initLimit=10
syncLimit=5
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883

$ cat /opt/zookeeper2/conf/zoo.cfg
tickTime=2000
dataDir=/opt/zookeeper2/data
clientPort=2182
initLimit=10
syncLimit=5
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883

$ cat /opt/zookeeper3/conf/zoo.cfg
tickTime=2000
dataDir=/opt/zookeeper3/data
clientPort=2183
initLimit=10
syncLimit=5
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883

其中有幾點需要注意
* dataDir: 三個Zookeeper例項的dataDir目錄要區別開,這裡分別指定到各個Zookeeper例項目錄下的data目錄。
* clientPort: 定義Zookeeper客戶端連線Zookeeper服務端時使用的埠,這裡因為是在一臺機器上做的叢集,所以三個例項的埠要區分開。
* server.: 定義Zookeeper叢集的各個例項的的ip和埠,這裡因為是在一臺機器上做的叢集,所以IP都定義的是127.0.0.1,但是後面的埠要區分開。

2. 建立data目錄和例項id檔案

mkdir /opt/zookeeper1/data
mkdir /opt/zookeeper2/data
mkdir /opt/zookeeper3/data
echo 1 > /opt/zookeeper1/data/myid
echo 2 > /opt/zookeeper2/data/myid
echo 3 > /opt/zookeeper3/data/myid

這裡要注意需要在每個Zookeeper的dataDir目錄下建立myid檔案,內容是記錄各個Zookeeper的例項ID。

3. 啟動Zookeeper服務
分別進入各個Zookeeper的bin目錄,然後執行“./zkServer.sh start”來啟動一個Zookeeper服務。

4. 客戶端連線
隨便進入一個Zookeeper的bin目錄,然後執行下面的命令來分別連線Zookeeper服務。

./zkCli.sh -server 127.0.0.1:2181
./zkCli.sh -server 127.0.0.1:2182
./zkCli.sh -server 127.0.0.1:2183
在其中的一個client上建立一個znode節點
create /mykey myvalue
然後在別的client上檢視新建立zonde節點
get /mykey

5. 檢視Zookeeper狀態
啟動Zookeeper之後,由於Zookeeper自己會有一套leader的選舉演算法,所以此時如果想知道那個Zookeeper是leader可以在各個Zookeeper的bin目錄執行“./zkServer.sh status”命令來檢視。

如果是Leader

$ ./zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper1/bin/../conf/zoo.cfg
Mode: leader

如果不是Leader
$ ./zkServer.sh status
JMX enabled by default
Using config: /opt/zookeeper3/bin/../conf/zoo.cfg
Mode: follower
此時可以把leader的那個節點停了,然後再看檢視其它兩個Zookeeper例項,此時剩下的兩個Zookeeper例項就會再選舉出一個leader。