1. 掌握zookeeper命令,看這篇文章就夠了

        共 15318字,需瀏覽 31分鐘

         ·

        2020-09-20 19:48

        點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”

        優(yōu)質(zhì)文章,第一時間送達(dá)

        66套java從入門到精通實戰(zhàn)課程分享

        zookeeper使用

        安裝與配置

        使用安裝包安裝

        #?下載
        $?wget?https://downloads.apache.org/zookeeper/zookeeper-3.6.0/apache-zookeeper-3.6.0-bin.tar.gz

        $?tar?-zxvf?apache-zookeeper-3.6.0-bin.tar.gz
        $?cd?apache-zookeeper-3.6.0-bin
        #?配置
        $?cp?conf/zoo_sample.cfg?conf/zoo.cfg

        #?編輯配置文件,下面介紹
        $?vi?conf/zoo.cfg

        #?啟動服務(wù)端
        $?bin/zkServer.sh?start

        #?查看狀態(tài)
        $?bin/zkServer.sh?status

        #?停止
        $?bin/zkServer.sh?stop

        #?重啟
        $?bin/zkServer.sh?restart

        #?用?jps?查看狀態(tài)
        $?jps
        46193?QuorumPeerMain

        Homebrew 安裝 zookeeper

        $?brew?install?zookeeper
        #?啟動服務(wù)
        $?brew?services?start?zookeeper
        #?停止服務(wù)
        $?brew?services?stop?zookeeper

        #?配置文件位置?
        $?ls?/usr/local/etc/zookeeper
        defaults?????????log4j.properties?zoo.cfg??????????zoo_sample.cfg

        配置文件

        下面是配置文件的內(nèi)容:

        #?The?number?of?milliseconds?of?each?tick
        tickTime=2000
        #?The?number?of?ticks?that?the?initial
        #?synchronization?phase?can?take
        initLimit=10
        #?The?number?of?ticks?that?can?pass?between
        #?sending?a?request?and?getting?an?acknowledgement
        syncLimit=5
        #?the?directory?where?the?snapshot?is?stored.
        #?do?not?use?/tmp?for?storage,?/tmp?here?is?just
        #?example?sakes.
        dataDir=/tmp/zookeeper/data
        dataLogDir=/tmp/zookeeper/log
        #?the?port?at?which?the?clients?will?connect
        clientPort=2181


        tickTime:配置單元時間。單元時間是ZooKeeper的時間計算單元,其他的時間間隔都是使用tickTime的倍數(shù)來表示的。

        initLimit:節(jié)點的初始化時間。該參數(shù)用于Follower(從節(jié)點)的啟動,并完成與Leader(主節(jié)點)進(jìn)行數(shù)據(jù)同步的時間。Follower節(jié)點在啟動過程中,會與Leader節(jié)點建立連接并完成對數(shù)據(jù)的同步,從而確定自己的起始狀態(tài)。Leader節(jié)點允許Follower節(jié)點在initLimit時間內(nèi)完成這項工作。該參數(shù)默認(rèn)值為10,表示是參數(shù)tickTime值的10倍。

        syncLimit:心跳最大延遲周期。該參數(shù)用于配置Leader節(jié)點和Follower節(jié)點之間進(jìn)行心跳檢測的最大延時時間。在ZK集群運行的過程中,Leader節(jié)點會通過心跳檢測來確定Follower節(jié)點是否存活。如果Leader節(jié)點在syncLimit時間內(nèi)無法獲取到Follower節(jié)點的心跳檢測響應(yīng),那么Leader節(jié)點就會認(rèn)為該Follower節(jié)點已經(jīng)脫離了和自己的同步。該參數(shù)默認(rèn)值為5,表示是參數(shù)tickTime值的5倍。

        dataDir:是zookeeper持久化數(shù)據(jù)存放的目錄。myid文件處于此目錄下。
        dataLogDir:日志目錄選項,如果沒有設(shè)置該參數(shù),默認(rèn)將使用和dataDir相同的設(shè)置。
        clientPort:zookeeper監(jiān)聽客戶端連接的端口,默認(rèn)是2181。

        zookeeper cli

        使用 brew 安裝,已經(jīng)把 zookeeper bin 目錄下的命令添加的系統(tǒng)中,因此在終端直接執(zhí)行?zkCli,就創(chuàng)建了一個 zk 客戶端,連接 zk 服務(wù)。
        使用壓縮包安裝,可以執(zhí)行:

        $?bin/zkCli.sh?-server?127.0.0.1:2181

        輸入 help 命令(其實輸入任何 zkCli 不能識別的命令,都會列出所有的命令),查看可用的命令:

        對 znode 進(jìn)行增刪改查

        創(chuàng)建節(jié)點 create

        create [-s] [-e] [-c] [-t ttl] path [data] [acl]?

        -s?創(chuàng)建有序節(jié)點
        如果在創(chuàng)建znode時,我們使用排序標(biāo)志的話,ZooKeeper會在我們指定的 znode 名字后面增加一個數(shù)字。我們繼續(xù)加入相同名字的znode時,這個數(shù)字會不斷增加。這個序號的計數(shù)器是由這些排序znode的父節(jié)點來維護的。


        -e?創(chuàng)建臨時節(jié)點
        znode有兩種類型:ephemeral 和 persistent。在創(chuàng)建znode時,我們指定znode的類型,并且在之后不會再被修改。當(dāng)創(chuàng)建znode的客戶端的session結(jié)束后,ephemeral類型的znode將被刪除。persistent類型的znode在創(chuàng)建以后,就與客戶端沒什么聯(lián)系了,除非主動去刪除它,否則他會一直存在。Ephemeral znode沒有任何子節(jié)點。

        acl?在下面的《 ACL 操作》中詳細(xì)介紹。

        使用方法:

        普通節(jié)點

        [zk:?localhost:2181(CONNECTED)?3]?create?/mynode?hello
        Created?/mynode
        [zk:?localhost:2181(CONNECTED)?4]?create?/mynode/subnode?world
        Created?/mynode/subnode

        [zk:?localhost:2181(CONNECTED)?9]?get?/mynode
        hello
        [zk:?localhost:2181(CONNECTED)?10]?get?/mynode/subnode
        world

        有序節(jié)點

        [zk:?localhost:2181(CONNECTED)?4]?create?-s?/mynode?hello
        Created?/mynode0000000004
        [zk:?localhost:2181(CONNECTED)?6]?create?-s?/mynode?world
        Created?/mynode0000000005

        臨時節(jié)點

        [zk:?localhost:2181(CONNECTED)?7]?create?-e?/temp?hello
        Created?/temp

        退出 zkCli,然后再重新打開它,/temp 節(jié)點已經(jīng)被刪除了。

        列出節(jié)點 ls

        ls [-s] [-w] [-R] path

        -w?添加一個 watch(監(jiān)視器),如果該節(jié)點發(fā)生變化,watch 可以使客戶端得到通知。watch 只能被觸發(fā)一次。如果要一直獲得 znode 的創(chuàng)建和刪除的通知,那么就需要不斷的在znode上開啟觀察模式。如果在該 path 下節(jié)點發(fā)生變化,會產(chǎn)生?NodeChildrenChanged?事件,刪除節(jié)點,會產(chǎn)生?NodeDeleted?事件。

        使用方法:

        [zk:?localhost:2181(CONNECTED)?12]?ls?/
        [mynode,?mynode0000000003,?mynode0000000004,?test,?zookeeper]
        [zk:?localhost:2181(CONNECTED)?13]?ls?-s?/
        [mynode,?mynode0000000003,?mynode0000000004,?test,?zookeeper]
        cZxid?=?0x0
        ctime?=?Thu?Jan?01?08:00:00?CST?1970
        mZxid?=?0x0
        mtime?=?Thu?Jan?01?08:00:00?CST?1970
        pZxid?=?0x300000053
        cversion?=?7
        dataVersion?=?0
        aclVersion?=?0
        ephemeralOwner?=?0x0
        dataLength?=?0
        numChildren?=?5

        [zk:?localhost:2181(CONNECTED)?2]?ls?/mynode
        [subnode]

        使用?-w?查看 /mynode 節(jié)點,然后在它下面添加(刪除)子節(jié)點,就會觸發(fā)該 watch。在其他節(jié)點下創(chuàng)建子節(jié)點,不會觸發(fā)該 watch。

        [zk:?localhost:2181(CONNECTED)?20]?ls?-w?/mynode
        [subnode]
        [zk:?localhost:2181(CONNECTED)?21]?create?/mynode/subnode2

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeChildrenChanged?path:/mynode
        Created?/mynode/subnode2

        #?監(jiān)聽父節(jié)點,刪除子節(jié)點,產(chǎn)生?NodeChildrenChanged事件
        [zk:?localhost:2181(CONNECTED)?22]?ls?-w?/mynode
        [subnode,?subnode2]
        [zk:?localhost:2181(CONNECTED)?23]?delete?/mynode/subnode2

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeChildrenChanged?path:/mynode

        #?監(jiān)聽子節(jié)點,刪除子節(jié)點,產(chǎn)生?NodeDeleted?事件
        [zk:?localhost:2181(CONNECTED)?51]?create?/mynode/subnode2
        Created?/mynode/subnode2
        [zk:?localhost:2181(CONNECTED)?52]?ls?-w?/mynode/subnode2
        []
        [zk:?localhost:2181(CONNECTED)?53]?delete?/mynode/subnode2

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeDeleted?path:/mynode/subnode2

        從上面的操作可以看到,在 /mynode 下添加了 subnode2 節(jié)點之后,觸發(fā)了 watch,WatchedEvent 的類型是?NodeChildrenChanged。之后再刪除 subnode2 節(jié)點,也出發(fā)了 watch。

        獲取節(jié)點信息 get

        get [-s] [-w] path

        -w?添加一個 watch(監(jiān)視器),如果節(jié)點內(nèi)容發(fā)生改變,會產(chǎn)生?NodeDataChanged?事件;如果刪除節(jié)點,會產(chǎn)生?NodeDeleted?事件。

        使用方法

        [zk:?localhost:2181(CONNECTED)?20]?ls?-w?/mynode
        [subnode]
        [zk:?localhost:2181(CONNECTED)?21]?create?/mynode/subnode2

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeChildrenChanged?path:/mynode
        Created?/mynode/subnode2

        #?監(jiān)聽父節(jié)點,刪除子節(jié)點,產(chǎn)生?NodeChildrenChanged事件
        [zk:?localhost:2181(CONNECTED)?22]?ls?-w?/mynode
        [subnode,?subnode2]
        [zk:?localhost:2181(CONNECTED)?23]?delete?/mynode/subnode2

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeChildrenChanged?path:/mynode

        #?監(jiān)聽子節(jié)點,刪除子節(jié)點,產(chǎn)生?NodeDeleted?事件
        [zk:?localhost:2181(CONNECTED)?51]?create?/mynode/subnode2
        Created?/mynode/subnode2
        [zk:?localhost:2181(CONNECTED)?52]?ls?-w?/mynode/subnode2
        []
        [zk:?localhost:2181(CONNECTED)?53]?delete?/mynode/subnode2

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeDeleted?path:/mynode/subnode2

        每一個對znode樹的更新操作,都會被賦予一個全局唯一的ID,我們稱之為zxid(ZooKeeper Transaction ID)。更新操作的ID按照發(fā)生的時間順序升序排序。例如,z1大于z2,那么z1的操作就早于z2操作。

        每個 znode 的狀態(tài)信息包含以下內(nèi)容:

        • czxid,創(chuàng)建(create)該 znode 的 zxid

        • mzxid,最后一次修改(modify)該 znode 的 zxid

        • pzxid,最后一次修改該 znode?子節(jié)點的 zxid

        • ctime,創(chuàng)建該 znode 的時間

        • mtime,最后一次修改該 znode 的時間

        • dataVersion,該節(jié)點內(nèi)容的版本,每次修改內(nèi)容,版本都會增加

        • cversion,該節(jié)點子節(jié)點的版本

        • aclVersion,該節(jié)點的 ACL 版本

        • ephemeralOwner,如果該節(jié)點是臨時節(jié)點(ephemeral node),會列出該節(jié)點所在客戶端的 session id;如果不是臨時節(jié)點,該值為 0

        • dataLength,該節(jié)點存儲的數(shù)據(jù)長度

        • numChildren,該節(jié)點子節(jié)點的個數(shù)

        檢查狀態(tài) stat

        stat [-w] path

        -w?添加一個 watch(監(jiān)視器),如果節(jié)點內(nèi)容發(fā)生改變,會產(chǎn)生?NodeDataChanged?事件;如果刪除節(jié)點,會產(chǎn)生?NodeDeleted?事件。
        與 get 的區(qū)別是,不回列出 znode 的值。
        使用方法

        [zk:?localhost:2181(CONNECTED)?56]?stat?/mynode
        cZxid?=?0x30000004c
        ctime?=?Sun?Apr?05?15:48:14?CST?2020
        mZxid?=?0x30000005e
        mtime?=?Sun?Apr?05?16:09:32?CST?2020
        pZxid?=?0x300000067
        cversion?=?16
        dataVersion?=?2
        aclVersion?=?0
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0

        修改節(jié)點 set

        set [-s] [-v version] path data?
        修改已經(jīng)存在的節(jié)點的值
        使用方法

        [zk:?localhost:2181(CONNECTED)?57]?set?/mynode?hello
        [zk:?localhost:2181(CONNECTED)?58]?ls?/mynode
        []
        [zk:?localhost:2181(CONNECTED)?59]?stat?/mynode
        cZxid?=?0x30000004c
        ctime?=?Sun?Apr?05?15:48:14?CST?2020
        mZxid?=?0x300000068
        mtime?=?Sun?Apr?05?16:20:34?CST?2020
        pZxid?=?0x300000067
        cversion?=?16
        dataVersion?=?3
        aclVersion?=?0
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0

        可以看到,在修改節(jié)點值之后,mZxid、mtime、dataVersion 都發(fā)生了變化。

        刪除節(jié)點 deleteall

        deleteall path [-b batch size]?
        使用方法

        [zk:?localhost:2181(CONNECTED)?34]?delete?/mynode

        刪除 /mynode,不會返回任何內(nèi)容。如果有子節(jié)點的時候,都會刪除。

        刪除節(jié)點 delete

        delete [-v version] path

        調(diào)用deleteset操作時,如果指定znode版本號,需要與當(dāng)前的版本號匹配。如果版本號不匹配,操作將會失敗。失敗的原因可能是在我們提交之前,該znode已經(jīng)被修改過了,版本號發(fā)生了增量變化。如果不指定版本號,就是直接操作最新版本的 znode。
        使用方法

        [zk:?localhost:2181(CONNECTED)?15]?create?/mynode?hello
        Created?/mynode
        [zk:?localhost:2181(CONNECTED)?16]?delete?/mynode

        如果要刪除的節(jié)點有子節(jié)點,不能刪除

        [zk:?localhost:2181(CONNECTED)?33]?create?/mynode/sub?sub
        Created?/mynode/sub
        [zk:?localhost:2181(CONNECTED)?34]?delete?/mynode
        Node?not?empty:?/mynode

        其他指令

        歷史記錄 history

        history?列出最近的10條歷史記錄

        [zk:?localhost:2181(CONNECTED)?7]?history
        0?-?history
        1?-?create?/mynode?hello
        2?-?ls?/
        3?-?set?/mynode?worold
        4?-?get?/mynode
        5?-?stat?/mynode
        6?-?rmr?/mynode
        7?-?history

        重復(fù)之前的命令 redo

        redo cmdno?根據(jù) cmdno 重復(fù)之前的命令,cmdno 就是方括號里面最后的數(shù)字,每次執(zhí)行命令都會自增。

        [zk:?localhost:2181(CONNECTED)?5]?create?/mynode?hello
        Created?/mynode
        [zk:?localhost:2181(CONNECTED)?6]?rmr?/mynode
        [zk:?localhost:2181(CONNECTED)?7]?redo?5
        Created?/mynode

        是否輸出 watch 事件(printwatches)

        語法
        printwatches on|off
        使用方法

        [zk:?localhost:2181(CONNECTED)?43]?printwatches
        printwatches?is?on
        [zk:?localhost:2181(CONNECTED)?44]?ls?/mynode?1
        [sub]
        [zk:?localhost:2181(CONNECTED)?45]?create?/mynode/child?child

        WATCHER::

        WatchedEvent?state:SyncConnected?type:NodeChildrenChanged?path:/mynode
        Created?/mynode/child

        如果設(shè)置?printwatches off?,就看不到上面的 WATCHER 事件了。

        關(guān)閉連接 close

        close

        [zk:?localhost:2181(CONNECTED)?50]?close
        [zk:?localhost:2181(CLOSED)?51]
        [zk:?localhost:2181(CLOSED)?52]?ls?/
        Not?connected

        打開連接 connect

        connect host:port

        [zk:?localhost:2181(CLOSED)?52]?connect
        [zk:?localhost:2181(CONNECTING)?53]
        WATCHER::

        WatchedEvent?state:SyncConnected?type:None?path:null

        [zk:?localhost:2181(CONNECTED)?53]

        指定 host:port 可以連接遠(yuǎn)程的 zk 服務(wù)。缺省的時候,會連接本地的 2181 端口。

        退出連接 quit

        quit

        直接退出當(dāng)前的 zkCli 命令行。

        強制同步 sync

        sync path

        sync方法會強制客戶端所連接的服務(wù)器狀態(tài)與leader的狀態(tài)同步,這樣在讀取 path 的值就是最新的值了。

        ACL 操作

        一個znode中不僅包含了存儲的數(shù)據(jù),還有?ACL(Access Control List)。znode的創(chuàng)建時,可以給它設(shè)置一個ACL(Access Control List),來決定誰可以對znode做哪些操作。
        ACL 具有以下特點:

        1. ZooKeeper的權(quán)限控制是基于每個znode節(jié)點的,需要對每個節(jié)點設(shè)置權(quán)限

        2. 每個znode支持設(shè)置多種權(quán)限控制方案和多個權(quán)限

        3. 子節(jié)點不會繼承父節(jié)點的權(quán)限,客戶端無權(quán)訪問某節(jié)點,但可能可以訪問它的子節(jié)點

        ACL Permissions

        ACL 權(quán)限ACL 簡寫允許的操作
        CREATEc創(chuàng)建子節(jié)點
        READr獲取節(jié)點的數(shù)據(jù)和它的子節(jié)點
        WRITEw設(shè)置節(jié)點的數(shù)據(jù)
        DELETEd刪除子節(jié)點 (僅下一級節(jié)點)
        ADMINa設(shè)置 ACL 權(quán)限


        權(quán)限相關(guān)命令

        命令語法描述
        getAclgetAcl [-s] path讀取ACL權(quán)限
        setAclsetAcl [-s] [-v version] [-R] path acl設(shè)置ACL權(quán)限
        addauthaddauth scheme auth添加認(rèn)證用戶
        createcreate [-s] [-e] path data acl創(chuàng)建節(jié)點時指明 ACL 權(quán)限


        ACL Schemes


        ZooKeeper內(nèi)置了一些權(quán)限控制方案,可以用以下方案為每個節(jié)點設(shè)置權(quán)限:

        方案描述
        world只有一個用戶:anyone,代表所有人(默認(rèn))
        ip使用IP地址認(rèn)證
        auth使用已添加認(rèn)證的用戶認(rèn)證
        digest使用“用戶名:密碼”方式認(rèn)證


        ACL是由鑒權(quán)方式、鑒權(quán)方式的ID和一個許可(permession)的集合組成。例如,我們想通過一個ip地址為10.0.0.1的客戶端訪問一個znode。那么,我們需要為znode設(shè)置一個ACL,鑒權(quán)方式使用IP鑒權(quán)方式,鑒權(quán)方式的ID為10.0.0.1,只允許讀權(quán)限。那么 ACL 的格式就是:ip:10.0.0.1:w


        world 方案

        設(shè)置方式:setAcl world:anyone:

        默認(rèn)情況下時 world 方法,任何人有所有權(quán)限:

        [zk:?localhost:2181(CONNECTED)?6]?getAcl?/mynode
        'world,'anyone
        :?cdrwa
        [zk:?localhost:2181(CONNECTED)?7]?setAcl?/mynode?world:anyone:cdr
        cZxid?=?0x54a
        ctime?=?Tue?Apr?03?09:26:36?CST?2018
        mZxid?=?0x54a
        mtime?=?Tue?Apr?03?09:26:36?CST?2018
        pZxid?=?0x54a
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?1
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0
        [zk:?localhost:2181(CONNECTED)?15]?set?/mynode?hello
        Authentication?is?not?valid?:?/mynode

        可以看出,在修改權(quán)限為 cdr 之后,不能再設(shè)置節(jié)點數(shù)據(jù)了。注意 aclVersion 也發(fā)生了變化。

        IP 方案

        設(shè)置方式:setAcl ip::

        :可以是具體IP也可以是IP/bit格式,即IP轉(zhuǎn)換為二進(jìn)制,匹配前bit位,如192.168.0.0/16匹配192.168.*.*

        [zk:?localhost:2181(CONNECTED)?19]?create?/mynode?hello
        Created?/mynode
        [zk:?localhost:2181(CONNECTED)?20]?setAcl?/mynode?ip:192.168.1.250:cdrwa
        cZxid?=?0x552
        ctime?=?Tue?Apr?03?09:38:58?CST?2018
        mZxid?=?0x552
        mtime?=?Tue?Apr?03?09:38:58?CST?2018
        pZxid?=?0x552
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?1
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0
        [zk:?localhost:2181(CONNECTED)?21]?getAcl?/mynode
        'ip,'192.168.1.250
        :?cdrwa

        使用其他電腦方法方法該節(jié)點:

        #使用IP非?192.168.100.1?的機器
        [zk:?localhost:2181(CONNECTED)?0]?get?/node2
        Authentication?is?not?valid?:?/node2?#沒有權(quán)限

        [zk:?localhost:2181(CONNECTED)?1]?delete?/node2?#刪除成功(因為設(shè)置DELETE權(quán)限僅對下一級子節(jié)點有效,并不包含此節(jié)點)

        auth 方案

        設(shè)置方式

        addauth?digest?:?#添加認(rèn)證用戶
        setAcl??auth::

        示例:

        [zk:?localhost:2181(CONNECTED)?22]?create?/mynode1?hello
        Created?/mynode1
        [zk:?localhost:2181(CONNECTED)?23]?addauth?digest?admin:admin?#添加認(rèn)證用戶
        [zk:?localhost:2181(CONNECTED)?24]?setAcl?/mynode1?auth:admin:cdrwa
        cZxid?=?0x554
        ctime?=?Tue?Apr?03?09:44:32?CST?2018
        mZxid?=?0x554
        mtime?=?Tue?Apr?03?09:44:32?CST?2018
        pZxid?=?0x554
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?1
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0
        [zk:?localhost:2181(CONNECTED)?25]?getAcl?/mynode1
        'digest,'admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=
        :?cdrwa
        [zk:?localhost:2181(CONNECTED)?26]?get?/mynode1
        hello?#剛才已經(jīng)添加認(rèn)證用戶,可以直接讀取數(shù)據(jù),斷開會話重連需要重新addauth添加認(rèn)證用戶
        cZxid?=?0x554
        ctime?=?Tue?Apr?03?09:44:32?CST?2018
        mZxid?=?0x554
        mtime?=?Tue?Apr?03?09:44:32?CST?2018
        pZxid?=?0x554
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?1
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0

        digest 方案

        設(shè)置方式

        setAcl??digest:::

        這里的密碼是經(jīng)過SHA1及BASE64處理的密文,在SHELL中可以通過以下命令計算:

        echo?-n?:?|?openssl?dgst?-binary?-sha1?|?openssl?base64

        先來算一個密文密碼:

        echo?-n?admin:admin?|?openssl?dgst?-binary?-sha1?|?openssl?base64
        x1nq8J5GOJVPY6zgzhtTtA9izLc=

        示例:

        [zk:?localhost:2181(CONNECTED)?8]?create?/mynode2?hello
        Created?/mynode2

        #使用是上面算好的密文密碼添加權(quán)限:
        [zk:?localhost:2181(CONNECTED)?9]?setAcl?/mynode2?
        digest:admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=:cdrwa
        cZxid?=?0x55a
        ctime?=?Tue?Apr?03?13:17:12?CST?2018
        mZxid?=?0x55a
        mtime?=?Tue?Apr?03?13:17:12?CST?2018
        pZxid?=?0x55a
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?1
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0
        [zk:?localhost:2181(CONNECTED)?10]?getAcl?/mynode2
        'digest,'admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=
        :?cdrwa

        [zk:?localhost:2181(CONNECTED)?11]?get?/mynode2
        #沒有權(quán)限
        Authentication?is?not?valid?:?/mynode2

        [zk:?localhost:2181(CONNECTED)?12]?addauth?digest?admin:admin?#添加認(rèn)證用戶
        [zk:?localhost:2181(CONNECTED)?13]?get?/mynode2
        hello??#成功讀取數(shù)據(jù)
        cZxid?=?0x55a
        ctime?=?Tue?Apr?03?13:17:12?CST?2018
        mZxid?=?0x55a
        mtime?=?Tue?Apr?03?13:17:12?CST?2018
        pZxid?=?0x55a
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?1
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0

        創(chuàng)建節(jié)點時指定 ACL

        #添加?admin?用戶
        [zk:?localhost:2181(CONNECTED)?2]?addauth?digest?admin:admin
        #創(chuàng)建節(jié)點時賦予權(quán)限
        [zk:?localhost:2181(CONNECTED)?3]?create?/mynode?hello?auth:admin:cdrwa
        Created?/mynode
        [zk:?localhost:2181(CONNECTED)?4]?getAcl?/mynode
        'digest,'admin:x1nq8J5GOJVPY6zgzhtTtA9izLc=
        :?cdrwa
        [zk:?localhost:2181(CONNECTED)?5]?close
        [zk:?localhost:2181(CLOSED)?6]?connect
        [zk:?localhost:2181(CONNECTING)?7]
        WATCHER::

        WatchedEvent?state:SyncConnected?type:None?path:null
        #斷開會話重連需要重新addauth添加認(rèn)證用戶
        [zk:?localhost:2181(CONNECTED)?7]?get?/mynode
        Authentication?is?not?valid?:?/mynode
        [zk:?localhost:2181(CONNECTED)?8]?addauth?digest?admin:admin
        [zk:?localhost:2181(CONNECTED)?9]?get?/mynode
        hello
        cZxid?=?0x56c
        ctime?=?Tue?Apr?03?15:00:27?CST?2018
        mZxid?=?0x56c
        mtime?=?Tue?Apr?03?15:00:27?CST?2018
        pZxid?=?0x56c
        cversion?=?0
        dataVersion?=?0
        aclVersion?=?0
        ephemeralOwner?=?0x0
        dataLength?=?5
        numChildren?=?0

        注意了!使用 rmr 刪除節(jié)點沒有權(quán)限時,竟然可以使用 delete

        [zk:?localhost:2181(CONNECTED)?25]?rmr?/mynode
        Authentication?is?not?valid?:?/mynode
        [zk:?localhost:2181(CONNECTED)?26]?delete?/mynode

        zookeeper quota

        zookeeper quota 機制支持節(jié)點個數(shù)(namespace)和空間大小(bytes)的設(shè)置。
        zookeeper quota 保存在?
        /zookeeper/quota?節(jié)點下,可以設(shè)置該節(jié)點的 ACL 權(quán)限,以防其他人修改。
        語法:
        listquota path

        setquota -n|-b val path

        delquota [-n|-b] path

        使用方法:

        #?目前還沒有任何設(shè)置
        [zk:?localhost:2181(CONNECTED)?9]?ls?/zookeeper/quota
        []
        #?還沒有為?/mynode?設(shè)置?quota
        [zk:?localhost:2181(CONNECTED)?10]?listquota?/mynode
        absolute?path?is?/zookeeper/quota/mynode/zookeeper_limits
        quota?for?/mynode?does?not?exist.

        #?-n表示設(shè)置znode?count限制,這里表示/mynode這個path下的znode?count個數(shù)限制為3(包括/mynode本身)
        [zk:?localhost:2181(CONNECTED)?11]?setquota?-n?3?/mynode
        Comment:?the?parts?are?option?-n?val?3?path?/mynode
        [zk:?localhost:2181(CONNECTED)?12]?create?/mynode/sub1?hello
        Created?/mynode/sub1
        [zk:?localhost:2181(CONNECTED)?9]?listquota?/mynode
        absolute?path?is?/zookeeper/quota/mynode/zookeeper_limits
        Output?quota?for?/mynode?count=3,bytes=-1
        Output?stat?for?/mynode?count=2,bytes=6

        注意,即使節(jié)點數(shù)超出了限制,也不會看到提示信息,zookeeper 只會在日志中提醒一下。
        使用 listquota 列出了節(jié)點的設(shè)置的 quota,和節(jié)點實際的容量。

        [zk:?localhost:2181(CONNECTED)?20]?delquota?-n?/mynode
        [zk:?localhost:2181(CONNECTED)?21]?listquota?/mynode
        absolute?path?is?/zookeeper/quota/mynode/zookeeper_limits
        Output?quota?for?/mynode?count=-1,bytes=-1
        Output?stat?for?/mynode?count=2,bytes=6

        刪除 quota 之后,count 也變成了 -1
        至此,Zookeeper客戶端所有的命令介紹完畢!



        版權(quán)聲明:本文為博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。

        本文鏈接:

        http://blog.csdn.net/feixiang2039/article/details/79810102




        ??? ?



        感謝點贊支持下哈?

        瀏覽 56
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 亚洲一区翔田千里无码 | 亚洲网站在线免费观看 | 日韩精品福利视频 | 男人色色天堂 | 欧洲精品无码一区二区三区在线 |