zookeeper入門及使用(一)- 安裝及操做

zookeeper是什麼?

highly reliable distributed coordination,用來作高可靠的分佈式協調者,可用來:git

  • 業務發現(service discovery)找到分佈式系統中存在那些可用的服務和節點
  • 名字服務 (name service)經過給定的名字知道到對應的資源
  • 配置管理 (configuration management)如何在分佈式的節點中共享配置文件,保證一致性。
  • 故障發現和故障轉移 (failure detection and failover)當某一個節點出故障的時候,如何檢測到並通知其它節點, 或者把想用的服務轉移到其它的可用節點
  • 領導選舉(leader election)如何在衆多的節點中選舉一個領導者,來協調全部的節點
  • 分佈式的鎖 (distributed exclusive lock)如何經過鎖在分佈式的服務中進行同步
  • 消息和通知服務 (message queue and notification)如何在分佈式的服務中傳遞消息,以通知的形式對事件做出主動的響應

zk快速啓動

  1. 下載官方版本:zookeeper-3.4.10.jar
  2. 解壓到/usr/locak/zookeeper
  3. 配置文件,這裏用單機來搭三個節點,生產時得分佈在不一樣機器
  4. 集羣模式配置文件
[root@c7bit1 conf]# cat zk2181.conf
dataDir=/data/zookeeper/data2181
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
server.1=127.0.0.1:2820:3820
server.2=127.0.0.1:2830:3830
server.3=127.0.0.1:2840:3840


[root@c7bit1 conf]# cat zk2182.conf
dataDir=/data/zookeeper/data2182
clientPort=2182
tickTime=2000
initLimit=5
syncLimit=2
server.1=127.0.0.1:2820:3820
server.2=127.0.0.1:2830:3830
server.3=127.0.0.1:2840:3840


[root@c7bit1 conf]# cat zk2183.conf
dataDir=/data/zookeeper/data2183
clientPort=2183
tickTime=2000
initLimit=5
syncLimit=2
server.1=127.0.0.1:2820:3820
server.2=127.0.0.1:2830:3830
server.3=127.0.0.1:2840:3840

5.配置參數介紹github

dataDir:Zookeeper 保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏shell

clientPort:這個端口就是客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。json

tickTime: Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。bash

initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集羣中鏈接到 Leader 的 Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。總的時間長度就是 5*2000=10 秒服務器

syncLimit:這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 2*2000=4 秒分佈式

server.A=B:C:D:其中 A 是一個數字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號。ui

除了修改 zoo.cfg 配置文件,集羣模式下還要配置一個文件 myid,這個文件在 dataDir 目錄下,這個文件裏面就有一個數據就是 A 的值,Zookeeper 啓動時會讀取這個文件,拿到裏面的數據與 zoo.cfg 裏面的配置信息比較從而判斷究竟是那個 server。debug

6.啓動zk日誌

[root@c7bit1 bin]# cd /usr/local/zookeeper/bin/
[root@c7bit1 bin]# ./zkServer.sh start /data/zookeeper/conf/zk2181.conf
ZooKeeper JMX enabled by default
Using config: /data/zookeeper/conf/zk2181.conf
Starting zookeeper ... STARTED

同理啓動另外兩個節點:
./zkServer.sh start /data/zookeeper/conf/zk2182.conf
./zkServer.sh start /data/zookeeper/conf/zk2183.conf

7.基本命令使用

ZooKeeper -server host:port cmd args
如:
./zkCli.sh -server 127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 ls /
固然也能夠只聯接單個server,如:
./zkCli.sh -server 127.0.0.1:2181 

後面若是不加命令,則進入交互模式。
[zk: 127.0.0.1:2181(CONNECTED) 0] 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) 20] create /name "abc"   
Created /name

列出節點
[zk: 127.0.0.1:2181(CONNECTED) 23] ls /
[name, zookeeper]

獲取一個節點的值
[zk: 127.0.0.1:2181(CONNECTED) 21] get /name
abc
cZxid = 0x60000001c
ctime = Thu Nov 29 21:33:31 CST 2018
mZxid = 0x60000001c
mtime = Thu Nov 29 21:33:31 CST 2018
pZxid = 0x60000001c
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

設置節點的值
[zk: 127.0.0.1:2181(CONNECTED) 24] set /name '123'
cZxid = 0x60000001c
ctime = Thu Nov 29 21:33:31 CST 2018
mZxid = 0x60000001d
mtime = Thu Nov 29 21:34:51 CST 2018
pZxid = 0x60000001c
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

刪除節點
[zk: 127.0.0.1:2181(CONNECTED) 26] delete /name
[zk: 127.0.0.1:2181(CONNECTED) 27] ls /
[zookeeper]

若是是遠程shell操做,能夠下載zookeepercli-1.0.10-1.x86_64.rpm
下載地址:https://github.com/outbrain/zookeepercli
使用和上面的基本一致

[root@c7bit1 conf]# rpm -ivh zookeepercli-1.0.10-1.x86_64.rpm
[root@c7bit1 conf]# zookeepercli --help
Usage of zookeepercli:
  -acls="31": optional, csv list [1|,2|,4|,8|,16|,31]
  -auth_pwd="": optional, digest scheme, pwd
  -auth_usr="": optional, digest scheme, user
  -c="": command, required (exists|get|ls|lsr|create|creater|set|delete|rm|deleter|rmr|getacl|setacl)
  -debug=false: debug mode (very verbose)
  -force=false: force operation
  -format="txt": output format (txt|json)
  -servers="": srv1[:port1][,srv2[:port2]...]
  -stack=false: add stack trace upon error
  -verbose=false: verbose
[root@c7bit1 bin]# zookeepercli -servers 127.0.0.1:2181 -c ls /
zookeeper
相關文章
相關標籤/搜索