ZooKeeperシリーズ(2):ZooKeeperコマンドラインツールzkCli.sh

7474 ワード

ZooKeeperシリーズの記事:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk
 
1.概要
ZooKeeperは、ZooKeeperインストールディレクトリのbinディレクトリの下にある非常に簡単なコマンドラインクライアントzkCliを提供します.
[root@s1 zk]# ls /usr/local/zookeeper/bin/
zkCleanup.sh  zkCli.sh  zkEnv.sh  zkServer.sh

まず、すでに起動しているZooKeeperインスタンスに接続します.例:
zkCli.sh -server localhost:2181

接続中に大量の情報が出力されます.接続が成功すると、ZooKeeperのインタラクティブモードに入ります.
WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0]   #      ZooKeeper     

たとえば、helpを入力してヘルプ情報を出力します.
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
        stat path [watch]
        set path data [version]
        ls path [watch]
        delquota [-n|-b] path
        ls2 path [watch]
        setAcl path acl
        setquota -n|-b val path
        history 
        redo cmdno
        printwatches on|off
        delete path [version]
        sync path
        listquota path
        rmr path
        get path [watch]
        create [-s] [-e] path data acl
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port
[zk: localhost:2181(CONNECTED) 1] 

ここで、インタラクティブコマンドプロンプトには、上で順次操作を行った後、0から1になるなど、増加する数字があります.この数字はコマンドの履歴番号を表します.
zkCliを用いることもできる.shの非インタラクティブモードは、次のフォーマットで使い捨て操作を実行します.
zkCli.sh -server IP:PORT COMMAND

たとえばhelpコマンド:
zkCli.sh -server localhost:2181 help

インタラクティブ環境では、TABキーを使用して補完したり、使用可能なコマンド、パスをリストしたりできます.bashのようです.
ZooKeeperのコマンドは簡単ではありません.大きくいくつかのタイプに分けられます.
  • create:ツリー内のある場所にノードを作成します.
  • delete:ノードを削除します.
  • exists:ノードが存在するかどうかをテストします.
  • get data:ノードデータを読み出します.
  • set data:ノードにデータを書き込みます.
  • get children:あるノードのサブノードリストを取得します.
  • sync:伝播するデータを待つ.

  • これはコマンドの機能タイプにすぎず、コマンドであることを意味しないことに注意してください.
    2.znodeの作成
    create [-s] [-e] path data acl

    -s:ノードパスを0で埋めるシリアル番号付きノードを作成します.-e:一時ノードが作成されます.path:znodeのパス、ZooKeeperには相対パスがなく、すべてのパスは'/'で始まる必要があります.data:znodeが携帯するデータ.acl:このノードのACL.
    たとえば、znodeノードを作成します.
    [zk: localhost:2181(CONNECTED) 1] create /zk_test mydata1
    Created /zk_test

    このうち/zk_testはノード名であり、mydata1はそのノードが携帯するデータである.
    サブノードを作成するには
    [zk: localhost:2181(CONNECTED) 2] create /zk_test/child_node1 "mydata2"
    Created /zk_test/child_node1

    シーケンス番号付きznodeを作成するには:
    [zk: localhost:2181(CONNECTED) 31] create -s /test1 222
    Created /test10000000003

    なお、シーケンス番号付きznodeが作成されると、以降はシーケンス番号付きパス/test10000000003のみがこのznodeを参照することができ、/test1では参照できない.
    一時znodeを作成するには:
    [zk: localhost:2181(CONNECTED) 32] create -e /test2 333
    Created /test2

    一時znodeはセッション終了時に自動的に削除されるため、一時ノードにサブノードを作成できません.また、テンポラリノードはセッションに属しますが、すべてのクライアントが表示、参照できます.
    3.ノードのデータとステータス情報の表示
    ノードデータ、ステータス情報を取得するには、次の手順に従います.
    [zk: localhost:2181(CONNECTED) 6] get /zk_test
    mydata1           #        
    cZxid = 0x4
    ctime = Wed Jun 27 02:05:44 CST 2018
    mZxid = 0x4
    mtime = Wed Jun 27 02:05:44 CST 2018
    pZxid = 0x5
    cversion = 1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 7
    numChildren = 1
    
    [zk: localhost:2181(CONNECTED) 7] get /zk_test/child_node1
    mydata2
    cZxid = 0x5
    ctime = Wed Jun 27 02:29:12 CST 2018
    mZxid = 0x5
    mtime = Wed Jun 27 02:29:12 CST 2018
    pZxid = 0x5
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 7
    numChildren = 0

    ノードのステータス情報のみを取得する場合はstatコマンドを使用します.
    [zk: localhost:2181(CONNECTED) 8] stat /zk_test
    cZxid = 0x4
    ctime = Wed Jun 27 02:05:44 CST 2018
    mZxid = 0x4
    mtime = Wed Jun 27 02:05:44 CST 2018
    pZxid = 0x5
    cversion = 1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 7
    numChildren = 1
    ls2命令はlsstatの2つの命令の結合体であり、所与のノードの下のサブノードと所与のノードの状態情報を取得することができる.
    [zk: localhost:2181(CONNECTED) 12] ls2 /
    [zookeeper, zk_test]    #      
    cZxid = 0x0
    ctime = Thu Jan 01 08:00:00 CST 1970
    mZxid = 0x0
    mtime = Thu Jan 01 08:00:00 CST 1970
    pZxid = 0x4
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 0
    numChildren = 2      #      

    4.サブノードの表示lsコマンドは、ノードの下にあるサブノードを表示します.再帰的に取得されないことに注意してください.
    [zk: localhost:2181(CONNECTED) 3] ls /
    [zookeeper, zk_test]
    
    [zk: localhost:2181(CONNECTED) 4] ls /zk_test
    [child_node1]

    5.ノードデータの変更setコマンドは、ノードを変更するために使用されます.
    [zk: localhost:2181(CONNECTED) 13] set /zk_test "mydata2"
    cZxid = 0x4
    ctime = Wed Jun 27 02:05:44 CST 2018
    mZxid = 0x9
    mtime = Wed Jun 27 02:42:45 CST 2018
    pZxid = 0x7
    cversion = 2
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 7
    numChildren = 0

    6.ノードの削除deleteは、ノードを削除することができる.再帰的に削除されないので、サブノードを含むノードを削除するには、すべてのサブノードを削除する必要があります.
    [zk: localhost:2181(CONNECTED) 21] delete /zk_test
    Node not empty: /zk_test
    
    [zk: localhost:2181(CONNECTED) 22] delete /zk_test/child_node1
    rmrコマンドは、ノードを再帰的に削除できるため、ノード内のすべてのサブノードも削除されます.
    [zk: localhost:2181(CONNECTED) 36] create /test/hello 2323
    Created /test/hello
    [zk: localhost:2181(CONNECTED) 37] create /test/hello/hello1 23233
    Created /test/hello/hello1
    [zk: localhost:2181(CONNECTED) 38] rmr /test
    [zk: localhost:2181(CONNECTED) 39] ls /
    [test2, mynode, zookeeper, test10000000003, zk_test]

    7.historyとredohistoryコマンドは、最近の操作の10のコマンド履歴をリストし、各履歴コマンドの番号を与えることができる.redoコマンドは、履歴コマンドの番号に従ってこれらのコマンドを再呼び出すことができる.
    [zk: localhost:2181(CONNECTED) 18] history
    8 - stat /zk_test
    9 - get /
    10 - get child /
    11 - get children /
    12 - ls2 /
    13 - ls /
    14 - ls2 /zk_test
    15 - get /
    16 - help
    17 - ls /zk
    18 - history

    13番の履歴コマンドを再実行します.
    [zk: localhost:2181(CONNECTED) 27] redo 13
    [zookeeper, zk_test]

    8.connectとclose
    接続コマンドは、他のZooKeeperサーバに接続するために使用され、closeは現在の接続を閉じるために使用されます.sshが他のサーバに、そしてexitのように.
    #      ZooKeeper shell              :
    [zk: localhost:2181(CONNECTED) 40] connect 192.168.100.21:2181
    [zk: 192.168.100.21:2181(CONNECTED) 41] close
    [zk: 192.168.100.21:2181(CLOSED) 43]

    他のサーバに接続すると、現在の接続が切断され、現在のセッションの一時znodeが削除されることに注意してください.以下はconnectが他のサーバに接続されたときのzookeeperです.outの関連内容:
    2018-06-27 04:36:16,734 [myid:] - INFO  [ProcessThread(sid:0 cport:2181)::PrepRequestProcessor@487] - Processed session termination for sessionid: 0x10007ee8bb20003
    2018-06-27 04:36:16,737 [myid:] - INFO  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1040] - Closed socket connection for client /0:0:0:0:0:0:0:1:34376 which had sessionid 0x10007ee8bb20003

    したがって、上でcloseを実行すると、前の接続に戻ることはなく、手動で再接続する必要があります.
    [zk: 192.168.100.21:2181(CONNECTED) 41] close
    [zk: 192.168.100.21:2181(CLOSED) 43] ls /
    Not connected
    
    [zk: 192.168.100.21:2181(CLOSED) 44] connect localhost:2181
    
    [zk: localhost:2181(CONNECTED) 45] ls /
    [mynode, zookeeper, test10000000003, zk_test]

    9.quit quitコマンドZooKeeperのインタラクティブコマンドラインを終了します.
    [zk: localhost:2181(CONNECTED) 29] quit
    Quitting...