• zookeeper命令整理


    目录

    一、概览

    二、功能脚本

      2.1、zkServer状态管理

      2.2、zkCli客户端登录

    三、数据操作命令

    四、watch机制

      4.1、特点

      4.2、通知状态和事件类型

      4.3、watch示例

      

     

    一、概览

      Zookeeper的命令,分为两类:

      一类是状态管理命令,比如启动Zk服务器、终止Zk服务器、查看Zk服务器状态..

      另一类就是操作Zk服务器中的数据,比如创建数据节点、删除数据节点、查看数据节点内容....

      下面将分别介绍。

    二、功能脚本

    2.1、zkServer状态管理

      Zookeeper的状态管理是通过运行zkServer.sh脚本来实现,在zookeeper安装目录的bin目录下。

      所有的操作如下:

    zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

      使用方式如下:

    # 启动当前的zk服务器
    /usr/local/zookeeper/bin/zkServer.sh start
    
    # 重启当前的zk服务器
    /usr/local/zookeeper/bin/zkServer.sh restart
    
    # 关闭当前的zk服务器
    /usr/local/zookeeper/bin/zkServer.sh stop
    
    # 查看当前的zk服务器运行状态
    /usr/local/zookeeper/bin/zkServer.sh status
    

      

    2.2、zkCli客户端登录

      当服务器端启动后,可以使用zkCli.sh(同样在zookeeper安装目录的bin目录下)实现。

      使用方式:

    # 格式zkCli.sh -server ip:port
    /usr/local/zookeeper/bin/zkCli.sh -server 192.168.1.3:2181
    
    # 不指定-server,默认使用本机localhost:2181
    /usr/local/zookeeper/bin/zkCli.sh
    

      

    三、数据操作命令

      登录到zookeeper服务器后,输入任意字符,回车确认后就会出现很多命令:

    [zk: 127.0.0.1:2181(CONNECTED) 0] info
    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
    

      其实上面的命令列表已经很明显的展示了zookeeper中可以操作的命令,包括他的功能都比较容易理解,下面就简单说几个常用的命令

    3.1、ls path

      查看path节点下有哪些子节点,不会显示孙子及以下层级的节点,示例如下:

    [zk: 127.0.0.1:2181(CONNECTED) 3] ls /       
    [zookeeper]
    

      

    3.2、create path data

      该命令用来创建path节点,并且设置节点的值为data。需要注意的是,使用create创建path时,不能嵌套创建path,比如创建/abc/xyz,那么/abc必须是已经存在的,不能直接创建/abc/xyz。并且,使用create创建节点的时候,必须指定data,否则节点不会被创建。

    [zk: 127.0.0.1:2181(CONNECTED) 4] create /abc xxxxxx
    Created /abc
    [zk: 127.0.0.1:2181(CONNECTED) 5] ls /
    [abc, zookeeper]
    

      嵌套创建path时,如果上级目录不存在,则创建失败:

    [zk: 127.0.0.1:2181(CONNECTED) 5] ls /
    [abc, zookeeper]
    [zk: 127.0.0.1:2181(CONNECTED) 6] create /xyz/aaa 12345
    Node does not exist: /xyz/aaa
    [zk: 127.0.0.1:2181(CONNECTED) 7] create /xyz 123
    Created /xyz
    [zk: 127.0.0.1:2181(CONNECTED) 8] create /xyz/aaa 12345
    Created /xyz/aaa
    

      使用create命令时,有-s和-e选项,分别表示Sequence(有序节点)、Ephemeral(临时节点),zookeeper默认的节点类型是无序、永久节点;

      无序是指一个节点下创建子节点时,子节点不会重复;

      永久是指并且如果不主动删除,那么节点就会一直存在;

      有序是指创建节点时,会在节点名称后面加一个10位长度的数字,表示其顺序(序号),可以创建相同的节点名称(但是序号不相同);

      临时是指创建的节点只在当前连接(session)有效,当连接断开后,临时节点就会被删除(可能会有几秒的延迟)。

      需要注意的是,不能在临时节点下创建子节点

    # 无序、永久节点,不能重复创建
    [zk: localhost:2181(CONNECTED) 1] create /abc 123
    Created /abc
    [zk: localhost:2181(CONNECTED) 2] create /abc 456
    Node already exists: /abc
    
    # 有序节点可以重复创建
    [zk: localhost:2181(CONNECTED) 3] create -s /xyz 123
    Created /xyz0000000001
    [zk: localhost:2181(CONNECTED) 4] create -s /xyz 456
    Created /xyz0000000002
    [zk: localhost:2181(CONNECTED) 5] ls /
    [xyz0000000001, abc, xyz0000000002, zookeeper]

    3.3、get path

      该命令用来查看path节点上值以及节点信息,示例如下:

    [zk: 127.0.0.1:2181(CONNECTED) 12] get /xyz
    123
    cZxid = 0x1f
    ctime = Sun Jun 09 15:12:07 CST 2019
    mZxid = 0x1f
    mtime = Sun Jun 09 15:12:07 CST 2019
    pZxid = 0x20
    cversion = 1
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 1
    

      

    3.4、set path data

      该命令用来对已经存在的path的data进行设置,需要注意的是,如果path不存在,那么set操作就会失败,示例如下:

    [zk: 127.0.0.1:2181(CONNECTED) 13] set /xyz 321
    cZxid = 0x1f
    ctime = Sun Jun 09 15:12:07 CST 2019
    mZxid = 0x22
    mtime = Sun Jun 09 15:15:18 CST 2019
    pZxid = 0x20
    cversion = 1
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 3
    numChildren = 1
    [zk: 127.0.0.1:2181(CONNECTED) 14] set /www notExists   # path不存在,操作失败
    Node does not exist: /www
    

      set命令可以有一个version可选项,表示要设置哪一个version的path:当要设置的path,对应的dataVersion为version时,才进行set操作,否则认为失败,因为version不同,表示要设置的path不匹配。  

    3.5、delete path

      该命令用来删除叶子节点,叶子节点就是没有子节点的节点。如果删除path下面还有其他的子节点,那么删除操作就会失败。

    [zk: 127.0.0.1:2181(CONNECTED) 19] ls /       
    [xyz, abc, zookeeper]
    [zk: 127.0.0.1:2181(CONNECTED) 20] ls /xyz    
    [aaa]
    [zk: 127.0.0.1:2181(CONNECTED) 21] ls /xyz/aaa
    []
    [zk: 127.0.0.1:2181(CONNECTED) 22] delete /xyz  # 删除的path包含子节点,删除失败
    Node not empty: /xyz
    [zk: 127.0.0.1:2181(CONNECTED) 23] delete /xyz/aaa # 删除的节点没有子节点,删除成功
    

      

    3.6、rmr path

      该命令用来递归删除path,如果path下面有子节点,那么子节点都会被全部删除。

    [zk: 127.0.0.1:2181(CONNECTED) 24] ls /xyz
    []
    [zk: 127.0.0.1:2181(CONNECTED) 25] create /xyz/abc 3333
    Created /xyz/abc
    [zk: 127.0.0.1:2181(CONNECTED) 26] rmr /xyz
    

      

    3.7、stat path

      用来获取path节点的相关信息,示例如下:

    [zk: 127.0.0.1:2181(CONNECTED) 29] stat /abc
    cZxid = 0x1d
    ctime = Sun Jun 09 15:10:39 CST 2019
    mZxid = 0x21
    mtime = Sun Jun 09 15:13:30 CST 2019
    pZxid = 0x1d
    cversion = 0
    dataVersion = 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 5
    numChildren = 0
    

      

    四、watch机制

      对于zookeeper目录树上的节点来说,我们可能需要关注某个节点,当节点发生变化时,需要触发一些事件,举个例子,当/user/Jane节点被删除时,通知客户端删除用户Jane,这就是watch机制(监听)。

    4.1、watch机制的特点

      先注册后监听:对于节点的变化,需要先监听,当节点发生变化时,才会触发通知;

      一次性触发:watch后,只会触发一次通知,如果要每次都触发,那么就需要在触发watch的事件后,重新watch;

      异步通知:当事件触发后,通知时异步发给客户端的;

    4.2、通知状态和事件类型

      在zookeeper中,可以对数据节点进行很多操作,比如删除、修改、增加子节点...在触发watch通知的时候,应该通知客户端哪个节点进行了什么操作。 

      通知状态包括三类:SyncConnected、Disconnected、Expired、AuthFailed

      每一个通知状态(KeeperState)下又有多种事件类型(EventType);

      SyncConnected

        None:客户端与服务器成功建立连接;

        NodeCreated:监听的节点被创建;

        NodeDeleted:监听的节点被删除;

        NodeDataChanged:监听的节点数据内容被修改;

        NodeChildChanged:监听的节点的子节点的节点数据内容发生改变;

      Disconnected

        None:客户端与服务器断开连接

      Expired

        None:会话超时

      AuthFailed

        None:鉴权失败

      

    4.3、watch示例

       只有一部分zookeeper命令支持watch操作,可以通过查看zk的命令列表,后面有[watch]的命令才支持(只有stat、ls、ls2、get这四个命令支持)。

      

      有ls命令为例

      窗口1:单纯的使用ls,不加watch选项,就没有监听

    [zk: 192.168.1.3:2181(CONNECTED) 2] ls /
    [zookeeper]
    

      

      窗口2:登录到192.168.1.4上,新增节点/abc

    [zk: 192.168.1.4(CONNECTED) 0] ls /
    [zookeeper]
    [zk: 192.168.1.4(CONNECTED) 1] create /abc 123
    Created /abc
    

      新增节点/abc时,窗口1没有变化;

      窗口1:使用watch选项

    [zk: 192.168.1.3:2181(CONNECTED) 3] ls /
    [abc, zookeeper]
    [zk: 192.168.1.3:2181(CONNECTED) 4] ls / watch
    [abc, zookeeper]
    

      

      窗口2:创建/xyz节点

    [zk: 192.168.1.4(CONNECTED) 2] create /xyz 456
    Created /xyz
    

      观察窗口1,发现有其他信息输出,如下图

      

      窗口2:继续创建/opq节点

    [zk: 192.168.1.4(CONNECTED) 3] create /opq 789
    Created /opq
    

      观察窗口1,没有发现其他信息输出,说明watch操作只触发了一次。

      如果需要再次触发通知,就必须再次进行watch操作。

  • 相关阅读:
    算法实现:在10个数中选6个数,显示所有组合
    转载:PostgreSQL和MySQL协议简介
    转载:国内外高精地图厂商一览
    使用带key访问iPortalREST服务
    cass启动提示Frame主框架程序没有加载
    设置Gridview单元格内容不换行
    Sql自定义编号唯一性问题
    关于EXCEL数据导入到SQLServer中字段存在NULL的问题
    Gridview显示网格线
    ComboBox自动匹配查找
  • 原文地址:https://www.cnblogs.com/-beyond/p/10993693.html
Copyright © 2020-2023  润新知