接着上一篇寫,上一篇鏈接ubuntu 編譯 運行zookeeper(1)。
3.2集羣
zookeeper最主要的應用場景是集羣,當zookeeper是集羣運行的時候,只要大多數zookeeper的服務在運行,那麼zookeeper的服務總是可用的。比如五臺服務器最多兩臺出問題下,服務都是可以用的。
同樣和單機一樣配置好環境變量,每一臺都配置好,然後修改配置文件,這裏演示配置三臺服務器,再多的服務器可以一次類推。
配置conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/root/zk/data/
dataLogDir=/home/root/zk/logs/
clientPort=2181
server.1=192.168.25.128:2888:3888
server.2=192.168.25.129:2888:3888
server.3=192.168.25.130:2888:3888
maxClientCnxns=60
initLimit : 此配置表示允許follower連接並同步到leader的初始化時間,它以tickTime的倍數來表示。當超過設置倍數的tickTime時 間,則連接失敗。
syncLimit : Leader服務器與follower服務器之間信息同步允許的最大時間間隔,如果超過次間隔,默認follower服務器與leader服務器之間斷開鏈接。
maxClientCnxns : 限制連接到zookeeper服務器客戶端的數量。
server.id=host:port:port : 表示了不同的zookeeper服務器的自身標識,作爲集羣的一部分,每一臺服務器應該知道其他服務器的信息。用戶可以從“server.id=host:port:port” 中讀取到相關信息。在服務器的data(dataDir參數所指定的目錄)下創建一個文件名爲myid的文件,這個文件的內容只有一行,指定的是自身的id值。比如,服務器“1”應該在myid文件中寫入“1”。這個id必須在集羣環境中服務器標識中是唯一的,且大小在1~255之間。這一樣配置中,zoo1代表第一臺服務器的IP地址。第一個端口號(port)是從follower連接到leader機器的端口,第二個端口是用來進行leader選舉時所用的端口。所以,在集羣配置過程中有三個非常重要的端口:clientPort:2181、port:2888、port:3888
如果服務器增多,可以繼續增加server.id=host:port:port來實現。
然後就是要創建不同id的myid文件,來保存id,這個文件只能手動創建,創建位置在你設置的dataDir下,我們這裏是
/home/root/zk/data/,id就是server.id=host:port:port中的id,這裏在/home/root/zk/data/下面創建myid文件,內容爲1,就是對應的id。
echo 1 > myid
然後分別啓動不同服務器的zookeeper,方法和單機類似。
3.3僞集羣
顧名思義就是在一臺電腦上跑出集羣的模式,這裏就需要三個data和log目錄來保存不同id的data和log數據,我們這裏配置三個zoo.cfg文件,分別命名爲zoo1.cfg,zoo2.cfg,zoo3.cfg.
如下:
第一個zoo1.cfg:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/root/zk/1/data/
dataLogDir=/home/root/zk/1/logs/
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
maxClientCnxns=60
第二個zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/root/zk/2/data/
dataLogDir=/home/root/zk/2/logs/
clientPort=2182
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
maxClientCnxns=60
第三個zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/root/zk/3/data/
dataLogDir=/home/root/zk/3/logs/
clientPort=2183
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
maxClientCnxns=60
然後在不同的data下echo 1 > myid,然後就是運行不同目錄下的zkServer.sh
zkServer.sh start zoo1.cfg
zkServer.sh start zoo2.cfg
zkServer.sh start zoo3.cfg
然後通過
zkServer.sh status zoo1.cfg
查看對應zookeeper的狀態。
4.zk客戶端
zookeeper是提供客戶端給用戶直接訪問zk服務的,在zkServer.sh同一個目錄下有zkCli.sh就可以,我們可以通過zkCli.sh -server ip:port,來鏈接zk服務。
zkCli.sh -server 192.168.1.3:2181
在使用zkCli.sh之前。我們必須先了解zk的結構。zk維護着一個邏輯上的樹形層次結構,樹中的節點稱爲znode,如下圖所示:
圓圈裏面表示節點名稱,長方形裏面表示節點完全路徑,同時每一個節點都可以保存一定量的數據,不過數據保存越多,zk服務負載越大,不建議保存過多的數據在zk節點之中。
當我們使用zkCli.sh連接成功了,我們可以使用zkCli.sh查看一些zk的節點信息,這裏具體不詳細解釋,我們可以通過help來查看所有命令
[zk: 127.0.0.1:2181(CONNECTED) 1] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
[zk: 127.0.0.1:2181(CONNECTED) 2]
具體作用不詳解,主要用到的就是ls,create,delete,get,quit。
ls和linux的ls類似,查看對應路徑下的所有子節點,後面參數接路徑,如 ls /,就是查看根目錄下的所有子節點;
create創建節點,顧名思義,創建一個節點,後面參數爲節點全路徑和節點數據,如create node1 "nodedata";
delete刪除節點,參數節點全路徑;
get獲取節點數據和節點相關信息,參數節點全路徑;
quit退出zkCli.sh的控制檯。
5.C調用zk接口
這個比較多了,本人比價懶,就直接複製鏈接大家去看看吧:Zookeeper C API 指南。
這裏我給大家一點建議,大家可以將zk的源碼在windows下編譯通過,只需要安裝cmake和會使用nmake就可以了,我就不解釋了,比較簡單,然後就可以直接使用vs查看源碼,同時運行測試了。