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