阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zookeeper

306次阅读
没有评论

共计 2433 个字符,预计需要花费 7 分钟才能阅读完成。

1、ZooKeeper 的安装和启动

步骤:

1. 从官网上下载 zookeeper,地址为:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz

2. 下载好后的安装包解压到指定目录, 解压后看到 Zookeeper 包含多个目录, 其中 conf 下存放的是配置文件,bin 目录下是 zookeeper 提供的可执行脚本

3. 修改 conf 目录下的 zoo_sample.cfg 为 zoo.cfg

4. 在 bin 目录下执行./zkServer.sh start

2、ZooKeeper 的数据结构

zookeeper 的数据模型和分布式文件系统类拟, 是一种层次化的属性结构

Zookeeper

zookeeper 的数据是结构化存储的,并没有在物理上体现出文件和目录。zookeeper 树中的每个节点都被称为 Znode,Znode 维护了一个 stat 状态信息, 其中包含数据变化的时间和版本等。并且每个 Znode 可以设置一个 value 值,zookeeper 并不用于通用的数据库或者大容量的对象存储,它只是管理和协调有关的数据,所以 value 的数据大小不建议设置得非常大,较大的数据会带来更大的网络开销

zookeeper 上的每个节点的数据都 是允许读和写的, 读表示获得指定 Znode 上的 value 数据, 写表示修改指定 Znode 上的 value 数据。

3、ZooKeeper 的特性

zookeeper 中的 Znode 在被创建的时候,需要指定节点的类型, 节点类型分为:

1. 持久化节点:节点的数据会持久化到磁盘

2. 临时节点:节点的生命周期和创建该节点的客户端的生命周期保持一致,一旦该客户端的会话结束,则该客户端所创建的临时节点会被自动删除

3. 有序节点:在创建的节点后面会增加一个递增的序列,该序列在同一级父节点之下是唯一的。需要注意的是,持久化节点或者临时节点也是可以设置为有序节点的,也就是持久化有序节点或者临时有序节点

** 注意:** 在同一级目录下,节点的名称必须是唯一的

4、新增的节点类型

在 3.5.3 版本之后,又增加了两种节点类型,分别是

1. 容器节点:当容器节点下的最后一个子节点被删除时,容器节点会被自动删除

2.TTL 节点:针对持久化节点或者持久化有序节点,我们可以设置一个存活时间,如果在存活时间之内该节点没有任何修改并且没有任何子节点,它就会自动删除

5、Watcher 机制

zookeeper 提供了一种针对 Znode 的订阅 / 通知机制, 也就是说当 Znode 节点状态发生变化时或者 zookeeper 客户端连接状态发生变化时,会触发事件通知。这个机制在服务注册与发现中,针对服务调用者及时感知到服务提供者的变化提供了非常好的解决方案

在 zookeeper 提供的 Java API 中,提供了三种机制来针对 Znode 进行注册监听, 分别是:

1.getData(),用于获取指定节点的 value 信息,并且可以注册监听,当监听节点的子节点进行创建、修改、删除操作时,触发相应的事件通知

2.getChildren(),用于获取指定节点的所有子节点,并且允许注册监听,当监听节点的子节点进行创建、修改、删除操作时,触发相应的事件通知

3.exists(),用于判断指定节点是否存在, 同样可以注册针对指定节点的监听,监听的时间 类型和 getData() 相同

Watcher 事件的触发都是一次性的,比如客户端通过 getData(’/node’,true) 注册监听,如果 /node 节点发生数据修改,那么该客户端会收到一个修改事件通知, 但是 /node 再次发生变化时,客户端无法收到 Watcher 事件, 为了解决这个问题, 客户端必须在收到的事件回调中再次注册事件

6、常见应用场景

基于 zookeeper 中节点的特性, 可以为多种应用场景提供解决方案

6.1、分布式锁

在分布式架构中,多个进程对同一个共享资源的访问,也存在数据安全性问题,因此也需要使用锁的形式来解决这类问题,而解决分布式环境下多进程对于共享资源访问带来的安全性问题的方案就是使用分布式锁

如果使用 zookeeper 实现分布式锁达到排他的目的,只需要用到节点的特性:临时节点,以及同级节点的唯一性

  • 获得锁的过程

在获得排他锁时,所有客户端可以去 zookeeper 服务器上 /Exclusive_Locks 节点下创建一个临时节点 /lock。zookeeper 基于同级节点的唯一性,会保证所有客户端中只有一个客户端能创建成功,创建成功的客户端获得了排他锁,没有获得锁的客户端需要通过 Watcher 机制监听 /Exclusive_Locks 节点下子节点的变更事件,用于实时监听 /lock 节点的变化情况以做出反应

  • 释放锁的过程

在获得锁地过程中,我们定义的锁节点 /lock 为临时节点,那么在以下两种情况下会触发锁释放:

1. 获得锁的客户端因为异常断开了和服务端的连接

2. 获得锁的客户端执行完业务逻辑之后,主动删除了创建的 /lock 节点

6.2 Master 选举

Master 选举是分布式系统中非常常见的场景,在分布式架构中,为了保证服务的可用性,通常会采用集群模式。在这种场景中,就需要从集群中选举一个节点作为 Master 节点,剩余的节点都作为备份节点随时待命。

zookeeper 就可以帮助集群中的节点实现 Master 选举。具体而言,zookeeper 中有两种方式来实现 Master 选举这一场景:

1. 同一级节点不能重复创建一个已经存在的节点。假设集群中有 3 个节点,需要选举出 Master,那么三个节点同时去 zookeeper 服务器上创建一个临时节点 /master-election,由于节点的特性,只会有一个客户端会创建成功,创建成功的客户端所在的机器就成了 Master

2. 利用临时有序节点的特性来实现:所有参与选举的客户端在 zookeeper 服务器的 /master 节点下创建一个临时有序节点,编号最小的节点表示 Master

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-06-06发表,共计2433字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中