初识zookeeper

1、zookeeper应用场景

    是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用、具有严格顺序访问控制能力的分布式协调存储服务。

  •  维护配置信息
  •  分布式锁服务
  •  集群管理
  • 生成分布式唯一ID

2、 zookeeper的数据模型

    zookeeper的数据节点可以视为树状结构(或者目录),树种的各节点被称为znode(即zookeepernode),一个znode可以有多个子节点。zookeeper节点在结构上表现为树状;使用路径path来定位某个znode,比如 /ns-1/sch/table1。

    znode兼具文件和目录的两个特点。既像文件一样维护着数据、元信息、ACL、时间戳等数据结构,又像目录一样可以作为路径标识的一部分。

    一个znode大体分为3个部分

  • 节点的数据:即znode data(节点path、节点data)的关系就像map(key value)的关系
  • 节点的子节点children
  • 节点的状态stat:用来描述当前节点的创建、修改记录、包括cZxid、ctime等

   节点状态stat的属性

   使用get 命令查看查看指定路径节点的data、stat信息

  cZxid:数据节点创建时的事物ID

  ctime:数据节点创建的时间

  mZxid:数据节点最后一次更新时的事物ID

  mtime:数据节点最后一次更新的时间

  pZxid:数据节点的子节点最后一次被修改的事物ID

  cversion:子节点的更改次数

  dateVersion:节点数据的更改次数

  aclVersion:节点的ACL的更改次数

  ephemeralOwner:如果节点是临时节点,则表示创建该节点的会话的SessionID,如果是持久节点为0

  dataLength:数据内容的长度

  numChildren:数据节点当前的子节点个数

节点类型

     临时节点和永久节点,节点的类型在创建时被确定,不能改变

     临时节点:该节点的生命周期依赖于创建它的会话,一旦会话结束,临时节点将被自动删除,当然也可手动删除。虽然每个临时的Znode都会绑定到一个客户端会话,但他们对所有的客户端还是可见的。临时节点不允许有子节点。

      持久化节点:生命周期不依赖于会话,只有在客户端显示执行操作的时候,才会被删除。

    3、zookeeper安装

        cd ~ 进入用户目录

        tar -xzvf zookeeper.tar.gz   解压

        cp  zoo_sample.cfg  zoo.cfg  复制配置文件

         mkdir    data   创建data目录

          dataDir=/app/zk/zookeeper-3.4.10/data  此路径用于存储zookeeper中数据的内存快照及事物日志文件

        ./zkServer.sh start 启动

        ./zkServer.sh status  查看启动是否完成

                ZooKeeper JMX enabled by default
                Using config: /app/zo/zookeeper-3.4.14/bin/../conf/zoo.cfg
                Mode: standalone

         ./zkServer.sh stop

         ./zkCli.sh [-server ip:port]  登录   

        ps -ef|grep zookeeper  查看zookeeper进程存在

4、zookeeper常用shell命令

      4.1、新增节点

       create [-s] [-e] path data     -s为有序节点   -e临时节点

       create /hadoop "创建持久化节点"

       create -s /a "创建持久化有序节点"    会在节点路径后面加序列号 Created /a0000000001,为分布式环境创建唯一id

       create -e /tmp "创建临时节点"           quit退出zookeeper客户端

      create -s -e /aa "创建临时有序节点"    生成分布式锁

    4.2、更新节点

        set /hadoop "aaa"

       set /hadoop "aaa"   2   基于路径和版本号更改,传入的版本号和当前节点的数据版本号不符合,

                                            会拒绝修改version No is not valid : /hadoop

    4.3、删除节点

          delete path [version]   与更新类似,也可以指定路径和版本号。如果有子节点,无法删除

          rmr path                      可删除有子节点的节点

   4.4、查看节点和状态

           get path   返回数据和节点属性

           stat path  只返回当前节点属性

   4.5、查看节点列表

            ls /hadoop     返回子节点列表

            ls2 /hadoop  前者的增加,返回子节点列表和当前节点信息

  4.6、监听器  (配置信息)

          监听器能够在节点内容发生改变的时候,向客户端发出通知。注意:zookeeper的触发器是一次性的(One-time trigger),触发一次后立即失败  (在A客户端注册监听器,在B客户端修改,A能获得通知。且一次通知后监听器失效)

          注册监听器   get /hadoop watch

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/hadoop

          注册监听器2  stat path [watch]

          注册监听器3  ls/ls2 path watch  监听子节点

5、zookeeper的acl权限控制

  5.1、概述

   zookeeper类似于文件系统。access control list访问控制列表可以做到节点的权限控制。

   acl权限控制,使用scheme:id:permission来标识,主要涵盖3个方面

  •          授权模式(scheme):授权的策略
  •          授权对象(id):授权的对象
  •          权限(permission):授权的权限

   其特性如下:

  •         zookeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限
  •         每个znode支持设置多种权限控制方案和多个权限
  •         子节点不会继承父节点的权限,客户端无权访问莫节点,但可能可以访问它的子节点

  5.2、授权模式    采用何种方式授权

方案描述
world只有一个用户:anyone,代表登录zookeeper的所有人(默认)
ip对客户端使用IP地址认证
auth使用已添加认证的用户认证
digest使用“用户名:密码”方式认证

    5.3、授予的权限

  

权限ACL简称描述
createc可以创建子节点
deleted可以删除子节点(仅下一级节点)
readr可以读取节点数据及显示子节点列表
writew可以设置节点数据
admina可以设置节点访问控制列表权限ACL

    5.4、授权的相关命令

    setAcl /test2 ip:192.168.60.130:crwda 

    getAcl path

    addauth scheme auth

   5.5 setAcl world:anyone:[acl]

         setAcl world:anyone:     去掉所有权限

   5.6、ip授权模式     连接其他ipzk服务:先zkCli.sh -server ip

     给两个ip设置权限  setAcl ip:ip1:crwda,ip:ip2:crwda

  5.7、Auth授权模式:

     先添加授权用户:addauth digest itcast:123456 每次quit退出要重新添加

  5.8、Digest授权模式

   命令: setAcl path digest:<user>:<密码密文>:[acl]

   这里的密码是经过SHA1和BASE64处理的密文,在shell中可以通过以下命令计算:

     echo -n haha:123456 | openssl dgst -binary -sha1 | openssl base64    

   5.9、acl超级管理员

  zookeeper的权限管理模式有一种叫做supper,改模式提供一个超管可以方便的访问任何权限的节点

 假设这个超管是supper:admin,需要先为超管生成密码的密文

 打开/bin/zkServer.sh,添加如下命令,使用超级管理员之前要先添加授权用户 addauth digest super:123456

nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:xQJmxLMiHGwaqBvst5y6rkB6HQs=" \

6、zookeeper的java原生api

    6.1、链接

    //计数器对象
    CountDownLatch countDownLatch = new CountDownLatch(1);
    ZooKeeper zooKeeper = new ZooKeeper("168.61.9.142:2181", 5000, new Watcher() {
      @Override
      public void process(WatchedEvent watchedEvent) {
        //链接成功
        if (watchedEvent.getState() == KeeperState.SyncConnected) {
          countDownLatch.countDown();
        }
      }
    });
    //主线程堵塞等待连接对象的创建成功
    countDownLatch.await();
    System.out.println(zooKeeper.getSessionId());
    zooKeeper.close();

    6.2、创建节点

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值