1. 程式人生 > >Zookeeper入門學習(三)--Zookeeper客戶端使用

Zookeeper入門學習(三)--Zookeeper客戶端使用

一、Zookeeper客戶端

1、ZooKeeper客戶端
  • (1)使用SSH連線ZooKeeper伺服器,然後進入到ZooKeeper安裝目錄下的bin目錄下,然後使用./zkCli.sh -timeout 5000 -r -server ip:port建立客戶端連線,其中-r表示zookeeper的只讀模式,當需要連線的伺服器和叢集中過半數的伺服器失去連線時,該伺服器則不再處理客戶端請求,但是有的時候任然希望出現這種情況的時候,該伺服器還可以提供只讀服務,則需要新增-r(-r為可選引數), ip是要連線的伺服器的IP地址,port為埠號,預設埠號是2181

    [zk: 192.168.153.129:2181(CONNECTED) 0] help
    ZooKeeper -server host:port cmd args
            #檢視節點狀態
            stat path [watch]
            #設定節點的資料內容
            set path data [version]
            #檢視節點列表
            ls path [watch]
            #刪除節點配額 -n子節點個數, -b資料節點的長度
            delquota [-n|-b] path
            #檢視節點下的子節點列表,並顯示當前節點的的狀態
            ls2 path [watch]
            #設定節點的許可權
            setAcl path acl
            #設定節點的配額
            setquota -n|-b val path
            #檢視歷史命令
            history
            #重複執行歷史命令中的哪一條命令 cmdno表示在歷史命令中的ID編號
            redo cmdno
            printwatches on|off
            #刪除子節點為空的節點
            delete path [version]
            sync path
            #檢視配額
            listquota path
            #遞迴刪除節點
            rmr path
            #檢視節點資料
            get path [watch]
            #建立節點 -s表順序建立,會自動增長ID,-e表是否為臨時節點
            create [-s] [-e] path data acl
            addauth scheme auth
            #退出客戶端
            quit
            getAcl path
            #關閉連線
            close
            #連線到其他的伺服器
            connect host:port
    
    
    [email protected]
    :/opt/zookeeper/bin# ./zkCli.sh -timeout 5000 -server 192.168.153.129:2181
  • 在zookeeper中,每次對資料節點的寫操作都是一個事務,每個事務都會有一個事務ID

-客戶端指令詳解
#(1)ls與stat指令
  • ls path : 檢視節點的子節點列表
  • state path : 檢視節點狀態

    WatchedEvent state:SyncConnected type:None path:null
    #檢視節點下的子節點
    [zk: 192.168.153.129:2181(CONNECTED) 0] ls /
    [zookeeper]
    #檢視節點的狀態
    [zk: 192.168.153.129:2181(CONNECTED) 1] stat /
    #建立該節點的事務ID
    cZxid = 0x0
    #建立該節點的時間
    ctime = Thu Jan 01 08:00:00 CST 1970
    #最後一次被修改的事務ID
    mZxid = 0x0
    #最後一次被修改的ID
    mtime = Thu Jan 01 08:00:00 CST 1970
    #該節點的子節列表最後一次被修改的事務ID,為當前節點新增節點,或者從當前節點中刪除節點會引起子節點列表的改變,但是修改子節點的資料內容是不計算在內的
    pZxid = 0x0
    #子節點的版本號
    cversion = -1
    #資料版本號
    dataVersion = 0
    #許可權版本號
    aclVersion = 0
    #專用於臨時節點,建立該臨時節點的事務ID,如果該節點是一個持久節點,那麼該屬性的值就為固定值0
    ephemeralOwner = 0x0
    #當前節點所存放的資料的長度
    dataLength = 0
    #當前節點所擁有的子節點的個數
    numChildren = 1 
    
#(2)get指令 : 獲取節點的值
  • get path : 獲取節點的值

    [zk: 192.168.153.129:2181(CONNECTED) 5] get /zookeeper/node_1
    #節點值        
    345
    #節點狀態,與stat指令的輸出相同  
    cZxid = 0x1900000006
    ctime = Wed Apr 19 15:24:59 CST 2017
    mZxid = 0x1900000006
    mtime = Wed Apr 19 15:24:59 CST 2017
    pZxid = 0x1900000006
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    [zk: 192.168.153.129:2181(CONNECTED) 6]
    
#(3)ls2指令
  • ls2 path : 獲取節點的子節點列表,並顯示節點的狀態

    [zk: 192.168.153.129:2181(CONNECTED) 1] ls2 /zookeeper
    [node_1, quota]
    cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x1900000006
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 2
    
#(4)create指令
  • create [-s] [-e] path data acl : 建立一個節點,-s表示是否為順序節點,-e表示是否為臨時節點,path為節點路徑,data為節點資料,acl為節點許可權

    #建立普通節點(永久節點)
    [zk: 192.168.153.129:2181(CONNECTED) 0] create /node_1 123
    Created /node_1
    [zk: 192.168.153.129:2181(CONNECTED) 2] get /node_1
    123
    cZxid = 0x190000000b
    ctime = Wed Apr 19 15:36:40 CST 2017
    mZxid = 0x190000000b
    mtime = Wed Apr 19 15:36:40 CST 2017
    pZxid = 0x190000000b
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    #建立臨時節點,在結束客戶端連線後再重新登入,臨時節點就失效刪除了
    [zk: 192.168.153.129:2181(CONNECTED) 1] create -e /node_1/node_1_1 234
    Created /node_1/node_1_1
    [zk: 192.168.153.129:2181(CONNECTED) 2] ls /node_1
    [node_1_1]
    #退出客戶端
    [zk: 192.168.153.129:2181(CONNECTED) 3] quit
    Quitting...
    #重新連線客戶端
    [email protected]:/opt/zookeeper/bin# ./zkCli.sh -timeout 5000 -server 192.168.153.129:2181
    Connecting to 192.168.153.129:2181
    #重新查詢,節點的子節點為空
    [zk: 192.168.153.129:2181(CONNECTED) 0] ls /node_1
    []
    #建立順序節點
    [zk: 192.168.153.129:2181(CONNECTED) 1] create -s /node_1/node_1_1 234
    #建立成功之後返回的節點名稱
    Created /node_1/node_1_10000000001
    #同路徑下繼續建立相同名稱的節點名,因為是順序節點,會子啊節點後面自動遞增ID
    [zk: 192.168.153.129:2181(CONNECTED) 2] create -s /node_1/node_1_1 234
    Created /node_1/node_1_10000000002
    [zk: 192.168.153.129:2181(CONNECTED) 3] create -s /node_1/node_1_1 234
    Created /node_1/node_1_10000000003
    [zk: 192.168.153.129:2181(CONNECTED) 4] ls /node_1
    [node_1_10000000001, node_1_10000000003, node_1_10000000002]
    
#(5)set指令
  • set path data [version] : 修改節點,version為當前節點的資料版本號,可選引數,version必須要與當前節點的資料版本號一致才可以修改成功,否則失敗

    #修改節點內容
    [zk: 192.168.153.129:2181(CONNECTED) 3] set /node_1/node_1_10000000001 789
    cZxid = 0x1900000011
    ctime = Wed Apr 19 15:39:27 CST 2017
    mZxid = 0x1900000016
    mtime = Wed Apr 19 15:47:37 CST 2017
    pZxid = 0x1900000011
    cversion = 0
    #資料版本號加了1
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    #查詢節點內容
    [zk: 192.168.153.129:2181(CONNECTED) 4] get /node_1/node_1_1000000000
    789
    cZxid = 0x1900000011
    ctime = Wed Apr 19 15:39:27 CST 2017
    mZxid = 0x1900000016
    mtime = Wed Apr 19 15:47:37 CST 2017
    pZxid = 0x1900000011
    cversion = 0
    #資料版本號加了1
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    #指定資料版本號修改
    #版本號一致,修改成功,資料版本號加1
    [zk: 192.168.153.129:2181(CONNECTED) 5] set /node_1/node_1_10000000001 987 2
    cZxid = 0x1900000011
    ctime = Wed Apr 19 15:39:27 CST 2017
    mZxid = 0x190000001c
    mtime = Wed Apr 19 15:51:52 CST 2017
    pZxid = 0x1900000011
    cversion = 0
    dataVersion = 3
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 0
    #版本號不一致,修改失敗
    [zk: 192.168.153.129:2181(CONNECTED) 6] set /node_1/node_1_10000000001 987 2
    version No is not valid : /node_1/node_1_10000000001
    
#(6)delete指令與rmr指令
  • delete path [version] : 刪除節點,只能刪除沒有子節點的節點,否則報錯,version與set的版本號作用一致
  • rmr path : 遞迴刪除節點,會刪除節點下的所有子節點

    #delete刪除沒有子節點的節點
    [zk: 192.168.153.129:2181(CONNECTED) 0] delete /node_1/node_1_10000000001
    [zk: 192.168.153.129:2181(CONNECTED) 2] ls /node_1
    [node_1_10000000003, node_1_10000000002]
    #delete刪除有子節點的節點
    [zk: 192.168.153.129:2181(CONNECTED) 3] delete /node_1
    Node not empty: /node_1
    #rmr刪除有子節點的節點
    [zk: 192.168.153.129:2181(CONNECTED) 4] rmr /node_1
    [zk: 192.168.153.129:2181(CONNECTED) 5] ls /
    [zookeeper]
    
#(7)setquota指令
  • setquota -n|-b var path : 給節點設定配額,-n表示限制子節點的個數,-b表示限制子節點資料的長度, var為值, path路徑

    #設定配額,子節點的個數為2
    [zk: 192.168.153.129:2181(CONNECTED) 3] setquota -n 2 /node_1
    Comment: the parts are option -n val 2 path /node_1
    #建立子節點
    [zk: 192.168.153.129:2181(CONNECTED) 5] create -s /node_1/node_1_1 123
    Created /node_1/node_1_10000000001
    [zk: 192.168.153.129:2181(CONNECTED) 6] create -s /node_1/node_1_1 123
    Created /node_1/node_1_10000000002
    [zk: 192.168.153.129:2181(CONNECTED) 7] create -s /node_1/node_1_1 123
    Created /node_1/node_1_10000000003
    [zk: 192.168.153.129:2181(CONNECTED) 8] ls /node_1
    [node_1_10000000001, node_1_10000000003, node_1_10000000002]
    

此處發現,節點個數超過配額設定之後並沒有丟擲異常,因為zookeeper中,如果子節點的個數超過配額限制,並不會丟擲異常,而只是在日誌中記錄一條告警資訊,日誌在zookeeper安裝目錄下的bin目錄中

    #Quota exceeded: path count limit path為超出配額的節點路徑,count為當前狀態包括節點本身的子節點個數,limit子節點配額值
    2017-04-19 16:04:15,460 [myid:3] - WARN  [CommitProcessor:3:[email protected]] - Quota exceeded: /node_1 count=3 limit=2
    2017-04-19 16:04:18,128 [myid:3] - WARN  [CommitProcessor:3:[email protected]] - Quota exceeded: /node_1 count=4 limit=2
#(8)listquota指令
  • listquota path : 檢視節點的配額

    [zk: 192.168.153.129:2181(CONNECTED) 0] listquota /node_1
    absolute path is /zookeeper/quota/node_1/zookeeper_limits
    #當前節點的配額,子節點個數的配額為2,資料長度沒有限制(-1表示沒有限制)
    Output quota for /node_1 count=2,bytes=-1
    #當前節點的狀態,count表示當前節點包括自己在內的子節點個數,bytes表示包括節點資料在內的所有子節點的資料長度的和
    Output stat for /node_1 count=4,bytes=12    
    
#(9)listquota指令
  • delquota [-n|-b] path : 刪除節點的配額

    [zk: 192.168.153.129:2181(CONNECTED) 0] listquota /node_1
    absolute path is /zookeeper/quota/node_1/zookeeper_limits
    Output quota for /node_1 count=2,bytes=-1
    Output stat for /node_1 count=5,bytes=15
    [zk: 192.168.153.129:2181(CONNECTED) 1] delquota -n /node_1
    [zk: 192.168.153.129:2181(CONNECTED) 2] listquota /node_1
    absolute path is /zookeeper/quota/node_1/zookeeper_limits
    Output quota for /node_1 count=-1,bytes=-1
    Output stat for /node_1 count=5,bytes=15
    

相關推薦

Zookeeper入門學習--Zookeeper客戶使用

一、Zookeeper客戶端 1、ZooKeeper客戶端 (1)使用SSH連線ZooKeeper伺服器,然後進入到ZooKeeper安裝目錄下的bin目錄下,然後使用./zkCli.sh -timeout 5000 -r -server ip:port建

zookeeper使用--開源客戶

一、前言   上一篇部落格已經介紹瞭如何使用Zookeeper提供的原生態Java API進行操作,本篇博文主要講解如何通過開源客戶端來進行操作。 二、ZkClient   ZkClient是在Zookeeper原聲API介面之上進行了包裝,是一個更易用的Zookeeper客戶端,其內部

zookeeper入門學習:原理詳解

一 .Zookeeper功能簡介 ZooKeeper 是一個開源的分散式協調服務,由雅虎建立,是 Google Chubby 的開源實現。 分散式應用程式可以基於 ZooKeeper 實現諸如資料釋出/訂閱、負載均衡、命名服務、分散式協 調/通知

NS2入門學習之Tcl知識點

1、基本命令格式換(如下總結一些易錯的知識點) “#”:註釋 ";"或者"換行"作為語句的結束 2、變數 變數不需要事先宣告; 在使用變數時要在變數名前加$,如$var; set  var 3,set命令用來給變數賦值;   unset var,u

Java NIO入門學習

在上一篇中介紹了緩衝區的原理,下面來介紹NIO中另一個核心物件選擇器(Selector)以及NIO的原理。 在Client/Server模型中,Server往往需要同時處理大量來自Client的訪問請求,因此Server端需採用支援高併發訪問的架構。一種簡單而又直接的解決方

python資料分析pandas包入門學習彙總和統計描述

本文參考《利用Python進行資料分析》的第五章 pandas入門 pandas擁有一組常用的數學和統計方法。它們大部分屬於約簡和彙總統計,用於從Series中提取單個值(如sum和mean),或從DataFrame的行或列中提取一個Series。跟對應的Numpy陣列

JAVA入門學習

3.編寫HelloWorld程式        編寫Java程式的步驟:編輯原始碼,編譯,執行。    3.1.編寫原始碼             任何文字編輯器都可以編寫Java原始碼。       3.2.編譯        使用javac命令      3.3.執行

ZooKeeper原始碼閱讀:伺服器

服務端入口:org.apache.zookeeper.server.QuorumPeerMain.main (呼叫ZooKeeperServerMain.main) 執行引數:配置檔案 如:QuorumPeerMain /opt/zookeeper/zookeeper-3

docker入門學習使用docker中的Tomcat鏡像部署web項目

代碼 ive 分享圖片 running conf http class read ner 前面已經對安裝Tomcat進行了詳解:docker入門學習(一)    直接上代碼 //啟動一個Tomcat 命名為mytomcat [root@localhost ~]#

IM即時通訊客戶文字傳輸之聊天功能

主要內容: 多執行緒的應用 讀寫分離思想 伺服器轉發 伺服器轉發是什麼呢? 可以假想伺服器是一個大型的資料中心,按照一定的規則,將資訊送到你想送去的地方。 而且,這裡的規則是由開發者自己定義的。 原始碼例項: 客戶端 package me.mxzf; imp

dubbo遠端呼叫原始碼分析客戶接收反饋後的處理

dubbo遠端呼叫的原始碼分析,分成了三篇文章地址分別如下:下面是consumer接收到provider反饋時的處理consumer接收到provider的反饋後,觸發NettyClient的事件處理器,該事件對consumer來說是上行事件,觸發的是NettyCodecAd

Zookeeper學習 客戶和原生API

safe ima call proc string 過程 心跳 current catch 前言 在這篇博客裏我會主要總結下兩個部分的操作: 在安裝ZooKeeper的機器上利用ZKClient連接Zookeeper的集群,然後利用相應的命令做一些簡單的操作。相信很多沒有

ZooKeeper入門 ZooKeeper數據模型

每次 con ges 可用 同文件 2.3 per 而是 創建時間 1 簡述 ZooKeeper可以看成一種高可用性的文件系統,但是,它沒有文件和目錄,而是使用節點,稱為znode。 znode可以作為保存數據的容器(如同文件),也可以作為保存其他節點的容器(如同目錄)。

Zookeeper 原始碼Zookeeper 客戶原始碼

Zookeeper 原始碼(三)Zookeeper 客戶端原始碼 Zookeeper 客戶端由以下幾個核心元件組成: 類 說明 Zookeeper Zookeeper 客戶端入口 ClientWatch

zookeeper學習:配置zookeeper叢集

安裝zookeeper的條件: scp命令可以正常使用,jdk,mysql。 CentOS6.7 zookeeper-3.4.5 (1) 機器部署 安裝到3臺虛擬機器上 安裝好JDK (2) 上傳 上傳用工具。 (3) 解壓 tar -zxvf zookee

zookeeper學習系列zookeeper基本原理

ZooKeeper是一個分散式的,開放原始碼的分散式應用程式協調服務,它包含一個簡單的原語集,分散式應用程式可以基於它實現同步服務,配置維護和命名服務等。Zookeeper是hadoop的一個子專案。在分散式應用中,由於工程師不能很好地使用鎖機制,以及基於訊息的協調機制

RPC入門總結RMI+Zookeeper實現遠端呼叫框架

一、RMI的弊端 RMI是侷限於Java語言中的RPC框架,除了其語言侷限之外,其實現上還有其他的一些弊端。 1. RMI的I/O模型使用BIO模型(偽非同步I/O),使用BIO和執行緒池的方式在大資料量、多連線情況下存在效能瓶頸。 2. RMI 使用了 Java 預設的

C++學習入門篇——函數

image clu square src 函數接口 值類型 使用 mes 技術分享 C++函數分兩種:有返回值的和沒返回值的 1.有返回值的函數 調用函數流程 如圖,sqrt(6.25)為函數調用,

Dubbo框架應用之--Zookeeper註冊中心、管理控制臺的安裝及解說

root pan rda 查詢 bsp err 封裝 form keep 我是在linux下使用dubbo-2.3.3以上版本號的zookeeper註冊中心客戶端。Zookeeper是Apache Hadoop的子項目,強度相對較好,建議生產環境使用該註冊中

Zookeeper詳解Zookeeper中的Znode特性

zookeeper數據模型 znode 節點數據 數據模型ZK擁有一個命名空間就像一個精簡的文件系統,不同的是它的命名空間中的每個節點擁有它自己或者它下面子節點相關聯的數據。ZK中必須使用絕對路徑也就是使用“/”開頭。Znode:ZK目錄樹中每個節點對應一個Znode。每個Znode維護這一個屬性