4 zookeeper集群和基本命令

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
Tags: