ZooKeeper基础【只可意会不可言传】

ZooKeeper基础

ZooKeeper基于分布式计算的核心概念设计,主要目的是给开发人员提供一套易于理解和开发的接口,从而简化分布式系统构建的任务


(一)概念

1. znode

ZK采用类似于文件系统的层级树状结构进行管理,每一个节点称为一个znodeznode可以含有数据也可以没有,znode以字节数组存储数据

你可以将znode理解为文件夹。

类型

  1. 持久节点:只能通过delete删除
  2. 临时节点:当创建节点的客户端下线或崩溃,临时节点就会被删除
  3. 有序节点:一个有序节点会被分配为一个单调递增的唯一整数

    所以“分布式全局唯一ID”的一种方案就是利用ZK的有序节点。

API

  1. create/path data:创建名为/pathznode,并包含数据data
  2. delete/path:删除名为/pathznode
  3. exists/path:检查是否存在名为/pathznode
  4. getData/path:从/path节点获取数据
  5. setData/path data:将/path节点数据设置为data
  6. getChildren/path:获取/path的所有子节点

2. 监视(watch) & 通知

  • 客户端可以对znode设置监视点watch,当znode有改动时,就会通知所有设置了watch的客户端

3. 版本号zxid

  • 每一个znode都有一个版本号zxid,它随着数据变化而自增
  • getData/delete都可以传入版本号作为参数,只有版本号符合预期才操作成功。

    即:乐观锁


(二)运行模式

  1. 独立模式:单独的ZK服务器
  2. 仲裁模式(Quorum):ZK服务器集群,采用Quorum机制,每一个操作需要有超过半数机器同意

    所以ZK集群机器数量最好是奇数


(三)内部原理

1. 角色

  1. Leader:负责发起投票决策更新系统状态

    这意味着:所有改变系统状态的写请求都只能发送到Leader

  2. Follower:同步Leader数据,处理客户端读请求,参与投票

  3. Observer:同步Leader数据,处理客户端读请求,不参与投票


2. ZAB:恢复模式 + 广播模式

  1. 恢复模式:服务启动/Leader崩溃后,进入恢复模式,重新进行Leader选举
  2. 广播模式:Leader被选举出来,且超过半数FollowerObserver同步成功后,进入广播模式 —— FollowerObserver不断同步Leader状态。

3. Leader选举

  • 每一个FollowerLeader维护一个心跳
  • 当原Leader崩溃后,集群中的Follower发现后就可以发起选举,只要有超过半数的Follower同意,那么该Follower就可以晋升为Leader
  • Leader如果重新上线,会变为Follower

    可以看出ZAB协议其实是基于Paxos而非Raft的。
    如果是Raft协议,原Leader重新上线会再次进行票数比较。


(四)分布式锁

1.独占锁(X)

  1. 获取锁:将每个znode作为一个锁,所有客户端都去创建/lock节点,成功创建的那个客户端就拥有了锁。
  2. 释放锁:用完锁后删除/lock节点,就等于释放了锁。

2.时序共享锁(S)

  1. 获取锁:如果/lock节点已经存在,则所有客户端在它下面创建临时顺序编号目录节点,并监听它的上一个节点,编号最小的节点获得锁
  2. 释放锁:删除节点就是释放锁,所有节点监听编号比它小的最近节点,一旦该节点被删除就会获得通知,从而获得锁

(五)集群机器 加入 & 退出

  1. 所有节点在父目录下创建临时顺序编号目录节点,然后监听父目录节点的子节点变化消息
  2. 如果有机器退出,那么它创建的临时顺序编号目录节点会被删除,其他所有机器就会收到通知,从而知道机器下线了;
  3. 如果有新机器加入,那么它会创建临时顺序编号目录节点,其他所有机器也会收到通知,从而知道有新机器加入。
-------------本文结束感谢您的阅读-------------

本文标题:ZooKeeper基础【只可意会不可言传】

文章作者:DragonBaby308

发布时间:2019年10月10日 - 21:27

最后更新:2020年01月25日 - 13:27

原始链接:http://www.dragonbaby308.com/zk/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%