Zookeeper 簡介、安裝、集羣、常用命令


 

zk簡介

zookeeper 動物園管理員,可以用來管理 hadoop(大象)、hive(蜜蜂)、pig(小 豬)、tomcat(貓)等。
 

zk是一個高性能的分佈式管理、協調框架,主要功能包括

  • 服務治理
  • 作爲配置中心,統一管理配置。dubbo的服務治理、配置中心一般用zk來實現。
  • 實現分佈式鎖
  • 發佈/訂閱
  • 實現隊列。利用zk執行寫請求的順序一致性來實現(paxos算法)。

 

linux上安裝zk

zk依賴於jdk,需要先配置jdk的環境變量。把zk的壓縮包放到/usr/local下

# 解壓
tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz
rm apache-zookeeper-3.6.0-bin.tar.gz
# 爲了方便,重命名一下
mv apache-zookeeper-3.6.0-bin zookeeper


# 進入解壓目錄
cd zookeeper


# 在解壓目錄下新建目錄data
mkdir data
# data下新建文件myid
touch data/myid
#在myid中寫一個1。myid在zk server集羣中才有用,單機版zk server可以不配置
vim data/myid


# 將conf下的zoo_sample.cfg複製爲zoo.cfg。zk server啓動時默認會加載conf下的zoo.cfg,zoo_sample.cfg是官方提供的配置示例
cp conf/zoo_sample.cfg conf/zoo.cfg


# 編輯zoo.cfg,修改dataDir爲剛纔新建的data目錄 /usr/local/zookeeper/data
vim conf/zoo.cfg


# 防火牆開放zk的端口
firewall-cmd --add-port=2181/tcp --zone=public --permanent 
firewall-cmd --reload


# cd到bin目錄
cd bin

# 刪除.cmd文件(可選),.cmd是windows上用的,.sh纔是linux用的
rm *.cmd

# 啓動zk server
./zkServer.sh start

 

zk server 常用命令

./zkServer.sh start
./zkServer.sh stop
./zkServer.sh restart

./zkServer.sh status

./zkServer.sh version

不帶短橫

 

配置項介紹

zoo.cfg

tickTime=2000  #心跳間隔,每隔2000ms即2s發送一次心跳

initLimit=10  #10*2s=20s,如果連續10次即20s內沒有收到某個服務節點的心跳,就認爲該節點掛掉了

syncLimit=5  #follower從leader同步數據時,發送同步請求後,如果5個心跳時間內即10s內沒有收到leader的確認應答,就認爲本次同步請求失敗

dataDir=/usr/local/zookeeper/data  #數據存儲位置

clientPort=2181  #zk client、zk server之間通信使用的端口

#maxClientCnxns=60  #zk client的最大數量

 

連接到zk server

2種方式

1、使用zk自帶的客戶端,bin下的zkCli.sh

# -server指定zk server的ip、port。缺省-server時默認爲127.0.0.1:2181
./zkCli -server 127.0.0.1:2181

 
2、使用ZooInspe

ZooInspe是zk的一個GUI客戶端,可以以圖形化的方式操作zkServer上的znode。下載地址:

https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

解壓,src是源碼,build是編譯好的,雙擊運行build裏面的.jar。

 

搭建zk server集羣

至少3個zk server,官方建議奇數個。
 
1、在每個zk server的zoo.cfg中,clientPort配置項的下面添加集羣信息配置

clientPort=2181

# 集羣信息配置
server.1=192.168.1.1:2888:3888
server.2=192.168.1.2:2888:3888
server.3=192.168.1.3:2888:3888

指定各個zk server的myid、ip,myid唯一標識一個zk server,有的習慣從0開始,有的習慣從1開始。

2181是zk client、zk server之間通信的端口,2888是zk server節點之間通信的端口,3888是follower選舉leader時使用的端口。

 

2、編輯各個zk server的data/myid,寫上對應的myid

eg. server.1=192.168.1.1:2888:3888 ,192.168.1.1這個zk server的myid就是1(server後面的數字)

 

3、啓動各個zk server,會自動分配角色(leader、follower、observer)。leader只有1個

# 查看當前zk server的狀態,其中可以看到該zk server在集羣中的角色
./zkServer.sh  status 

 

zk cli常用命令

# 創建節點/mall,缺省參數默認爲永久節點
create /mall


# -e是臨時節點,-s是順序節點,-e -s可以一起使用
# 原本節點名是/mall,-s會自動在節點名後面加一串數字作爲新的節點名,一串數字表示順序
create -e /mall


#可以攜帶數據,此處攜帶的數據是abcd
create /mall xm-mall


# 創建子節點。znode和linux的目錄結構差不多,linux目錄的很多命令都可以用
create /mall/user chy


# 查看節點攜帶的數據
get /mall/user


# 設置、修改節點攜帶的數據。先前未攜帶數據則爲設置,先前已攜帶數據則爲更新
set /mall/user 1234
# 每次設置數據時,都會自動將dataVersion+1,dataVersion可以實現數據庫樂觀鎖version相似的功能



# 查看指定節點的所有子節點。只列出子節點,不列出孫節點
ls /mall

# 根節點/下有個zookeeper節點,是zk自帶的
ls /



# 查看指定節點的狀態
stat /mall

# 返回值示例
cZxid = 0x6  #創建此節點的事務id。創建此節點是作爲事務處理的,c是create
ctime = Sun Apr 19 17:16:14 CST 2020  #此節點的創建時間
mZxid = 0x6   #此節點最近一次更新操作的事務id。寫(更新)操作才加事務
mtime = Sun Apr 19 17:16:14 CST 2020   #此節點最近一次更新操作的時間
pZxid = 0x8  #此節點的子節點列表最近一次修改的事務id
cversion = 1  #子節點列表的版本
dataVersion = 0  #數據版本
aclVersion = 0  #acl版本
ephemeralOwner = 0x0  #創建臨時節點的事務id。如果當前節點是臨時節點纔有值,如果不是臨時節點,值爲0
dataLength = 4  #攜帶的數據的長度
numChildren = 1  #子節點的數量



# 刪除一個空節點,如果該節點有子節點則刪除不了
delete /mall/user
# 刪除指定節點,會遞歸刪除子孫節點
deleteall /mall
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章