简介

本章将记录所有的zookeeper命令以及可能使用的场景,需提前配置好zookeeper环境

ZNode增删查改操作

  • help 查看zk命令列表
  • create ,创建节点, path可以为绝对路径也可以为相对路径 , data为节点值, -s 表示创建顺序节点, -e表示创建临时节点(使用很多,会话关闭或者创建节点的Cli关闭节点会小时)。 
  • delete , 删除空节点,节点不为空或有子节点时,会报错“node not empty”, ,version代表期望的版本号,输入version时只有节点的数据版本号与version相同才能删除节点。
  • rmr  , 删除path节点及子路径,不要求节点为空
  • ls , 查询path下子节点, watch可选,表示是否监听节点,后面watch都是这个含义。当watch大于0时,当节点数据改变、
  • ls2 ,
  • get ,获取节点数据
  • set , 修改path节点数据为data。输入version时,只有当前数据版本号与version相同时修改成功。
  • stat , 查看节点状态

quota

  • setquota  ,设置path配额
  • listquota    列出path配额
  • delquota ,删除path配额

ACL

ACL(访问控制列表)机制用于ZK节点的权限控制,,

ACL控制类型分为world、auth、digest、ip四种方式,,world是默认类型,所有人可访问,,ip用于对cli的ip进行控制,,digest是用户名和密码形式,密码为Base64(sha1(password)),先sha1加密,Base64编码。

权限分为crwda,分别代表创建(create)、读取(read)、修改(write)、删除(delete)、管理(admin),,

  • setAcl ,
  • getAcl ,查询path的acl设置
  • addAuth ,操作节点前ASC验证

测试: 

ipacl:

zookeeper java删除持久有序节点 zookeeper删除节点命令_zookeeper

,创建新节点,, 

zookeeper java删除持久有序节点 zookeeper删除节点命令_版本号_02

,查看ACL,默认为world:anyone,允许cdrwa操作,即所有操作,,

zookeeper java删除持久有序节点 zookeeper删除节点命令_数据_03

 ,设置ipacl节点acl为ip。

zookeeper java删除持久有序节点 zookeeper删除节点命令_zookeeper_04

 ,,

zookeeper java删除持久有序节点 zookeeper删除节点命令_zookeeper_05

,不能直接访问,只能通过192.168.100.1的cli访问digest:

zookeeper java删除持久有序节点 zookeeper删除节点命令_版本号_06

,,

zookeeper java删除持久有序节点 zookeeper删除节点命令_数据_07

,设置/degest节点为digest方式,auth为user1 HY.../s=这部分是123456按照sha1加密,Base64编码的结果,授予rwda权限。

zookeeper java删除持久有序节点 zookeeper删除节点命令_版本号_08

,直接访问节点被拒绝,,

zookeeper java删除持久有序节点 zookeeper删除节点命令_版本号_09

,添加验证然后访问,这里的密码为明文。

附一个JAVA生成ACL密码的方法:

static public String generateDigest(String idPassword)
            throws Exception {
        String parts[] = idPassword.split(":", 2);
        byte digest[] = MessageDigest.getInstance("SHA1").digest(
                idPassword.getBytes());
        return parts[0] + ":" + base64Encode(digest);
    }

    private static String base64Encode(byte[] bytes) throws Exception {
        final Base64.Decoder decoder = Base64.getDecoder();
        final Base64.Encoder encoder = Base64.getEncoder();
        //编码
        final String encodedText = encoder.encodeToString(bytes);
        return encodedText;
    }

 

其它

  • history 列出历史命令及命令号 
  • zookeeper java删除持久有序节点 zookeeper删除节点命令_数据_10

  • redo 
  • zookeeper java删除持久有序节点 zookeeper删除节点命令_zookeeper_11

  • ,重新执行cmdno的命令,命令号可用history查出
  • sync 
  • zookeeper java删除持久有序节点 zookeeper删除节点命令_数据_12

  • ,强制zk集群同步数据,,因为做修改时只要有半数机器应用即提示应用成功,sync将path的修改应用到整个集群,而不仅是半数机器。
  • close
  • zookeeper java删除持久有序节点 zookeeper删除节点命令_数据_13

  • ,关闭连接 ,不退出zkCli
  • connect 
  • zookeeper java删除持久有序节点 zookeeper删除节点命令_zookeeper_14

  • , close后连接host:port
  • quit 退出zkCli