4 zookeeper集群和基本命令
4 zookeeper集群和基本命令
集群思路:先搞定一台伺服器,再克隆出兩台,形成集群!
1 安裝zookeeper
我們的zookeeper是安裝在/opt目錄下
2 配置伺服器編號
- 在/opt/zookeeper/zkData創建myid文件
vim myid
- 在文件中添加與server對應的編號:1
- 其餘兩台伺服器分別對應2和3
3 配置zoo.cfg文件
- 打開zoo.cfg文件,增加如下配置
#######################cluster##########################
server.1=192.168.204.141:2888:3888
server.2=192.168.204.142:2888:3888
server.3=192.168.204.143:2888:3888
配置參數解讀 server.A=B:C:D
- A:一個數字,表示第幾號伺服器
集群模式下配置的/opt/zookeeper/zkData/myid文件裡面的數據就是A的值 - B:伺服器的ip地址
- C:與集群中Leader伺服器交換資訊的埠
- D:選舉時專用埠,萬一集群中的Leader伺服器掛了,需要一個埠來重新進行選舉,選
出一個新的Leader,而這個埠就是用來執行選舉時伺服器相互通訊的埠。
- A:一個數字,表示第幾號伺服器
4 配置其餘兩台伺服器
找到虛擬機安裝的位置進入
-
在虛擬機數據目錄vms下,創建zk02
-
將本台伺服器數據目錄下的.vmx文件和所有的.vmdk文件分別拷貝zk02下
-
虛擬機->文件->打開 (選擇zk02下的.vmx文件)
-
開啟此虛擬機,彈出對話框,選擇「我已複製該虛擬機」
-
進入系統後,查看ip,修改/opt/zookeeper/zkData/myid中的數值為2
還需要注意目錄中集群的ip哦是否一致
第三台伺服器zk03,重複上面的步驟
5 集群操作
-
每台伺服器的防火牆必須關閉
systemctl stop firewalld.service # 關閉集群 systemctl status firewalld.service #查看狀態
-
啟動第1台
需要進入到zookeeper的bin 目錄
[root@localhost bin]# ./zkServer.sh start
- 查看狀態
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Error contacting service. It is probably not running.
注意:因為沒有超過半數以上的伺服器,所以集群失敗 (防火牆沒有關閉也會導致失敗)
- 當啟動第2台伺服器時
- 查看第1台的狀態:Mode: follower
- 查看第2台的狀態:Mode: leader
6 客戶端命令行操作
啟動客戶端
[root@localhost bin]# ./zkCli.sh
顯示所有操作命令
help
查看當前znode中所包含的內容
ls /
查看當前節點詳細數據
ls -s /
- cZxid:創建節點的事務
- 每次修改ZooKeeper狀態都會收到一個zxid形式的時間戳,也就是ZooKeeper事務ID。
- 事務ID是ZooKeeper中所有修改總的次序。
- 每個修改都有唯一的zxid,如果zxid1小於zxid2,那麼zxid1在zxid2之前發生。
- ctime:被創建的毫秒數(從1970年開始)
- mZxid:最後更新的事務zxid
- mtime:最後修改的毫秒數(從1970年開始)
- pZxid:最後更新的子節點zxid
- cversion:創建版本號,子節點修改次數
- dataVersion:數據變化版本號
- aclVersion:許可權版本號
- ephemeralOwner:如果是臨時節點,這個是znode擁有者的session id。如果不是臨時節>點
則是0。- dataLength:數據長度
- numChildren:子節點數
分別創建2個普通節點
- 在根目錄下,創建中國和美國兩個節點
create /china
create /usa
- 在根目錄下,創建俄羅斯節點,並保存「普京」數據到節點上
create /ru "pujing"
- 多級創建節點
- 在日本下,創建東京 「熱」
- japan必須提前創建好,否則報錯 「節點不存在」
create /japan/Tokyo "hot"
獲得節點的值
get /japan/Tokyo
創建短暫節點:
創建成功之後,quit退出客戶端,重新連接,短暫的節點消失
create -e /uk
ls /
quit
ls /
創建帶序號的節點
- 在俄羅斯ru下,創建3個city
create -s /ru/city # 執行三次
ls /ru
[city0000000000, city0000000001, city0000000002]
- 如果原來沒有序號節點,序號從0開始遞增。
- 如果原節點下已有2個節點,則再排序時從2開始,以此類推
修改節點數據值
set /japan/Tokyo "too hot"
監聽節點
-
監聽 節點的值變化 或 子節點變化(路徑變化)
- 在server3主機上註冊監聽/usa節點的數據變化
addWatch /usa
- 在Server1主機上修改/usa的數據
set /usa "telangpu"
- Server3會立刻響應
WatchedEvent state:SyncConnected type:NodeDataChanged path:/usa
- 如果在Server1的/usa下面創建子節點NewYork
create /usa/NewYork
- Server3會立刻響應
WatchedEvent state:SyncConnected type:NodeCreatedpath:/usa/NewYork
刪除節點
delete /usa/NewYork
遞歸刪除節點 (非空節點,節點下有子節點)
不僅刪除/ru,而且/ru下的所有子節點也隨之刪除
deleteall /ru