4 zookeeper叢集和基本命令

word發表於2022-07-16

4 zookeeper叢集和基本命令

叢集思路:先搞定一臺伺服器,再克隆出兩臺,形成叢集!

1 安裝zookeeper

我們的zookeeper是安裝在/opt目錄下


2 配置伺服器編號

  • 在/opt/zookeeper/zkData建立myid檔案
vim myid
  • 在檔案中新增與server對應的編號:1
  • 其餘兩臺伺服器分別對應2和3

3 配置zoo.cfg檔案

  • 開啟zoo.cfg檔案,增加如下配置
    img
#######################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,而這個埠就是用來執行選舉時伺服器相互通訊的埠。

4 配置其餘兩臺伺服器

找到虛擬機器安裝的位置進入
img

  1. 在虛擬機器資料目錄vms下,建立zk02
    img

  2. 將本臺伺服器資料目錄下的.vmx檔案和所有的.vmdk檔案分別拷貝zk02下
    img

  3. 虛擬機器->檔案->開啟 (選擇zk02下的.vmx檔案)
    img

  4. 開啟此虛擬機器,彈出對話方塊,選擇“我已複製該虛擬機器”

  5. 進入系統後,檢視ip,修改/opt/zookeeper/zkData/myid中的數值為2

還需要注意目錄中叢集的ip哦是否一致

img

第三臺伺服器zk03,重複上面的步驟


5 叢集操作

  1. 每臺伺服器的防火牆必須關閉

    systemctl stop firewalld.service # 關閉叢集
    systemctl status firewalld.service #檢視狀態
    
  2. 啟動第1臺

需要進入到zookeeper的bin 目錄

[root@localhost bin]# ./zkServer.sh start
  1. 檢視狀態
[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.

注意:因為沒有超過半數以上的伺服器,所以叢集失敗 (防火牆沒有關閉也會導致失敗)

  1. 當啟動第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"

監聽節點

  • 監聽 節點的值變化 或 子節點變化(路徑變化)

    1. 在server3主機上註冊監聽/usa節點的資料變化
    addWatch /usa
    
    1. 在Server1主機上修改/usa的資料
    set /usa "telangpu"
    
    1. Server3會立刻響應
      WatchedEvent state:SyncConnected type:NodeDataChanged path:/usa
    2. 如果在Server1的/usa下面建立子節點NewYork
    create /usa/NewYork
    
    1. Server3會立刻響應
      WatchedEvent state:SyncConnected type:NodeCreatedpath:/usa/NewYork

刪除節點

delete /usa/NewYork

遞迴刪除節點 (非空節點,節點下有子節點)

不僅刪除/ru,而且/ru下的所有子節點也隨之刪除

deleteall /ru

相關文章