zk笔记总结

z k

基本概念

  • zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据订阅/发布,负载均衡,命名服务,集群管理,分布式锁和分布式队列等功能;

  • Leader,Follower,Observer角色的理解

    在这里插入图片描述

    • Observer不参与Leader的选举过程,不参与写操作过半成功策略,因此可以在不影响写性能的情况下提高集群的性能;(如果没有Observer角色,那么如果Follower节点很多的话,会导致这个投票的成本过高,造成集群瓶颈问题)
  • leader处理请求

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lkhw9dHl-1593951511434)(/Users/yuanhuiliang/Library/Application Support/typora-user-images/image-20200627180610884.png)]

znode

类型

  • PERSISTENT-持久节点

    客户端与zookeeper断开连接后,该节点依旧存在,直到删除操作

  • PERSISTENT_SEQUENTIAL-持久化顺序节点

    客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

  • EPHEMERAL-临时节点

    就是会被自动清理掉的节点,它的生命周期和客户客户端会话绑在一起,客户端会话结束,节点会被删除。与持久性节点不同的是,临时节点不能创建自节点;

  • EPHEMERAL_SEQUENTIAL-临时顺序节点

    客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

操作命令

  • 客户端启动

    • ./zkcli.sh 连接本地的zookeeper服务器
    • ./zkCli.sh -server ip:port 连接指定的服务器
  • 查询

    • ls path:列出path下的文件

    • stat path:查看节点状态

      [zk: 127.0.0.1:2181(CONNECTED) 6] stat /zookeeper
      cZxid = 0x0
      ctime = Thu Jan 01 08:00:00 CST 1970
      mZxid = 0x0
      mtime = Thu Jan 01 08:00:00 CST 1970
      pZxid = 0x0
      cversion = -1
      dataVersion = 0
      aclVersion = 0
      ephemeralOwner = 0x0
      dataLength = 0
      numChildren = 1
      

      pZxid:子节点列表最后一次被修改的事务id

      cversion:节点版本号

      dataCersion:数据版本号

      aclVerson:acl权限版本号

       
      cZxid 就是 Create ZXID,表示节点被创建时的事务ID。
      ctime 就是 Create Time,表示节点创建时间。
      mZxid 就是 Modified ZXID,表示节点最后一次被修改时的事务ID。
      mtime 就是 Modified Time,表示节点最后一次被修改的时间。
      pZxid 表示该节点的子节点列表最后一次被修改时的事务 ID。只有子节点列表变更才会更新 pZxid,
      子节点内容变更不会更新。
      cversion 表示子节点的版本号。
      dataVersion 表示内容版本号。
      aclVersion 标识acl版本
      ephemeralOwner 表示创建该临时节点时的会话 sessionID,如果是持久性节点那么值为 0 dataLength 表示数据⻓度。
      numChildren 表示直系子节点数。
      
    • get path:获取指定节点的内容

    • ls2 path:列出path节点的子节点及状态信息

  • 创建指令

    create [-s] [-e] path data acl

    通过使用-s参数,创建一个顺序节点,我们虽然指定的节点名是node_1_1,但是实际上,名称却是 node_1_10000000001,如果我们重复执行:

  • 退出指令

    quit

  • 修改指令

    set path data [version]

    set /zk-permanent 456

    //修改 stat:状态信息对象 -1:最新版本
    Stat stat = zooKeeper.setData("/lg_persistent", "客户端修改内 容".getBytes(), -1);
    
  • 删除指令

    • 注意:delete只能删除不包含子节点的节点,如果要删除的节点包含子节点,使用rmr命令

    • delete /data-archive-job-zuoye

    • rmr /data-archive-job-zuoye

  • 更新和删除节点,如果有字节点的情况,都是先创建或者删除父节点,然后再对子节点进行操作

  • 子节点的监听

    • 				/*
                  客户端可以对一个不存在的节点进行子节点变更的监听
                  只要该节点的子节点列表发生变化,或者该节点本身被创建或者删除,都会触发监听
               */
              zkClient.subscribeChildChanges("/lg-zkclient-get", new IZkChildListener() {
      
                  /*
                      s : parentPath
                      list : 变化后子节点列表
                   */
      
                  public void handleChildChange(String parentPath, List<String> list) throws Exception {
                      System.out.println(parentPath + "的子节点列表发生了变化,变化后的子节点列表为"+ list);
      
                  }
              });
      
  • 节点数据监听

    • // 注册监听
      zkClient.subscribeDataChanges(path, new IZkDataListener() {
      
          /*
              当节点数据内容发生变化时,执行的回调方法
              s: path
              o: 变化后的节点内容
           */
          public void handleDataChange(String s, Object o) throws Exception {
              System.out.println(s+"该节点内容被更新,更新的内容"+o);
          }
      
          /*
              当节点被删除时,会执行的回调方法
              s : path
           */
          public void handleDataDeleted(String s) throws Exception {
              System.out.println(s+"该节点被删除");
          }
      });
      

应用场景

排他锁

在这里插入图片描述

共享锁在这里插入图片描述

FIFO先入先出队列

在这里插入图片描述

分布式屏障-等待队列元素聚集后统一安排处理的Barrier􏵅模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2irC7AP2-1593951511442)(/Users/yuanhuiliang/Library/Application Support/typora-user-images/image-20200627171548423.png)]

ZAB协议

 
即:所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为Leader服务器,余下的 服务器则称为Follower服务器,Leader服务器负责将一个客户端事务请求转化成一个事务Proposal(提 议),并将该Proposal分发给集群中所有的Follower服务器,之后Leader服务器需要等待所有 Follower服务器的反馈,一旦超过半数的Follower服务器进行了正确的反馈后,那么Leader就会再次向 所有的Follower服务器分发Commit消息,要求其将前一个Proposal进行提交

崩溃恢复

在这里插入图片描述

消息广播

在这里插入图片描述

启动

单机

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UEIe9o2A-1593951511445)(/Users/yuanhuiliang/Library/Application Support/typora-user-images/image-20200627185147608.png)]

集群

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8uqPh1w3-1593951511447)(/Users/yuanhuiliang/Library/Application Support/typora-user-images/image-20200627182724968.png)]

选举pk规则

􏲡􏰥􏺝􏺞 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PdnjoCGj-1593951511448)(/Users/yuanhuiliang/Library/Application Support/typora-user-images/image-20200627185431297.png)]

  • 每次投票后,服务器都会统计所有投票,判断是否已经有过半的机器接收到相同的投票信息。对于 Server1和Server2服务器来说,都统计出集群中已经有两台机器接受了(2,0)这个投票信息。这里我 们需要对“过半”的概念做一个简单的介绍。所谓“过半”就是指大于集群机器数量的一半,即大于或等于 (n/2+1)。对于这里由3台机器构成的集群,大于等于2台即为达到“过半”要求
  • 服务器运行期间的选举
  • 在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值