ubuntu 編譯 運行zookeeper(2)

接着上一篇寫,上一篇鏈接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查看源碼,同時運行測試了。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章