<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 15318字,需瀏覽 31分鐘

           ·

          2020-09-20 19:48

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

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

          66套java從入門(mén)到精通實(shí)戰(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

          #?啟動(dòng)服務(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
          #?啟動(dòng)服務(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:配置單元時(shí)間。單元時(shí)間是ZooKeeper的時(shí)間計(jì)算單元,其他的時(shí)間間隔都是使用tickTime的倍數(shù)來(lái)表示的。

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

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

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

          zookeeper cli

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

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

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

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

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

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

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


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

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

          使用方法:

          普通節(jié)點(diǎn)

          [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é)點(diǎn)

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

          臨時(shí)節(jié)點(diǎn)

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

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

          列出節(jié)點(diǎn) ls

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

          -w?添加一個(gè) watch(監(jiān)視器),如果該節(jié)點(diǎn)發(fā)生變化,watch 可以使客戶(hù)端得到通知。watch 只能被觸發(fā)一次。如果要一直獲得 znode 的創(chuàng)建和刪除的通知,那么就需要不斷的在znode上開(kāi)啟觀察模式。如果在該 path 下節(jié)點(diǎn)發(fā)生變化,會(huì)產(chǎn)生?NodeChildrenChanged?事件,刪除節(jié)點(diǎn),會(huì)產(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é)點(diǎn),然后在它下面添加(刪除)子節(jié)點(diǎn),就會(huì)觸發(fā)該 watch。在其他節(jié)點(diǎn)下創(chuàng)建子節(jié)點(diǎn),不會(huì)觸發(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)聽(tīng)父節(jié)點(diǎn),刪除子節(jié)點(diǎn),產(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)聽(tīng)子節(jié)點(diǎn),刪除子節(jié)點(diǎn),產(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é)點(diǎn)之后,觸發(fā)了 watch,WatchedEvent 的類(lèi)型是?NodeChildrenChanged。之后再刪除 subnode2 節(jié)點(diǎn),也出發(fā)了 watch。

          獲取節(jié)點(diǎn)信息 get

          get [-s] [-w] path

          -w?添加一個(gè) watch(監(jiān)視器),如果節(jié)點(diǎn)內(nèi)容發(fā)生改變,會(huì)產(chǎn)生?NodeDataChanged?事件;如果刪除節(jié)點(diǎn),會(huì)產(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)聽(tīng)父節(jié)點(diǎn),刪除子節(jié)點(diǎn),產(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)聽(tīng)子節(jié)點(diǎn),刪除子節(jié)點(diǎn),產(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

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

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

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

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

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

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

          • mtime,最后一次修改該 znode 的時(shí)間

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

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

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

          • ephemeralOwner,如果該節(jié)點(diǎn)是臨時(shí)節(jié)點(diǎn)(ephemeral node),會(huì)列出該節(jié)點(diǎn)所在客戶(hù)端的 session id;如果不是臨時(shí)節(jié)點(diǎn),該值為 0

          • dataLength,該節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)長(zhǎng)度

          • numChildren,該節(jié)點(diǎn)子節(jié)點(diǎn)的個(gè)數(shù)

          檢查狀態(tài) stat

          stat [-w] path

          -w?添加一個(gè) watch(監(jiān)視器),如果節(jié)點(diǎn)內(nèi)容發(fā)生改變,會(huì)產(chǎn)生?NodeDataChanged?事件;如果刪除節(jié)點(diǎn),會(huì)產(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é)點(diǎn) set

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

          [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é)點(diǎn)值之后,mZxid、mtime、dataVersion 都發(fā)生了變化。

          刪除節(jié)點(diǎn) deleteall

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

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

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

          刪除節(jié)點(diǎn) delete

          delete [-v version] path

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

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

          如果要?jiǎng)h除的節(jié)點(diǎn)有子節(jié)點(diǎn),不能刪除

          [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 就是方括號(hào)里面最后的數(shù)字,每次執(zhí)行命令都會(huì)自增。

          [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)

          語(yǔ)法
          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

          打開(kāi)連接 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ù)。缺省的時(shí)候,會(huì)連接本地的 2181 端口。

          退出連接 quit

          quit

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

          強(qiáng)制同步 sync

          sync path

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

          ACL 操作

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

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

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

          3. 子節(jié)點(diǎn)不會(huì)繼承父節(jié)點(diǎn)的權(quán)限,客戶(hù)端無(wú)權(quán)訪問(wèn)某節(jié)點(diǎn),但可能可以訪問(wèn)它的子節(jié)點(diǎn)

          ACL Permissions

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


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

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


          ACL Schemes


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

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


          ACL是由鑒權(quán)方式、鑒權(quán)方式的ID和一個(gè)許可(permession)的集合組成。例如,我們想通過(guò)一個(gè)ip地址為10.0.0.1的客戶(hù)端訪問(wèn)一個(gè)znode。那么,我們需要為znode設(shè)置一個(gè)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)情況下時(shí) 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é)點(diǎn)數(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é)點(diǎn):

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

          [zk:?localhost:2181(CONNECTED)?1]?delete?/node2?#刪除成功(因?yàn)樵O(shè)置DELETE權(quán)限僅對(duì)下一級(jí)子節(jié)點(diǎn)有效,并不包含此節(jié)點(diǎn))

          auth 方案

          設(shè)置方式

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

          示例:

          [zk:?localhost:2181(CONNECTED)?22]?create?/mynode1?hello
          Created?/mynode1
          [zk:?localhost:2181(CONNECTED)?23]?addauth?digest?admin:admin?#添加認(rèn)證用戶(hù)
          [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)證用戶(hù),可以直接讀取數(shù)據(jù),斷開(kāi)會(huì)話(huà)重連需要重新addauth添加認(rèn)證用戶(hù)
          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)過(guò)SHA1及BASE64處理的密文,在SHELL中可以通過(guò)以下命令計(jì)算:

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

          先來(lái)算一個(gè)密文密碼:

          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
          #沒(méi)有權(quán)限
          Authentication?is?not?valid?:?/mynode2

          [zk:?localhost:2181(CONNECTED)?12]?addauth?digest?admin:admin?#添加認(rèn)證用戶(hù)
          [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é)點(diǎn)時(shí)指定 ACL

          #添加?admin?用戶(hù)
          [zk:?localhost:2181(CONNECTED)?2]?addauth?digest?admin:admin
          #創(chuàng)建節(jié)點(diǎn)時(shí)賦予權(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
          #斷開(kāi)會(huì)話(huà)重連需要重新addauth添加認(rèn)證用戶(hù)
          [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é)點(diǎn)沒(méi)有權(quán)限時(shí),竟然可以使用 delete

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

          zookeeper quota

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

          setquota -n|-b val path

          delquota [-n|-b] path

          使用方法:

          #?目前還沒(méi)有任何設(shè)置
          [zk:?localhost:2181(CONNECTED)?9]?ls?/zookeeper/quota
          []
          #?還沒(méi)有為?/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這個(gè)path下的znode?count個(gè)數(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é)點(diǎn)數(shù)超出了限制,也不會(huì)看到提示信息,zookeeper 只會(huì)在日志中提醒一下。
          使用 listquota 列出了節(jié)點(diǎn)的設(shè)置的 quota,和節(jié)點(diǎn)實(shí)際的容量。

          [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客戶(hù)端所有的命令介紹完畢!



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

          本文鏈接:

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




          ??? ?



          感謝點(diǎn)贊支持下哈?

          瀏覽 56
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色哟哟——国产精品 | 色五月网站 | 东北女人挨操内射 | 黄色毛片学生妹免费看视频 | 亚洲综合在线视频 |