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

Zookeeper

523次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7819845
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛NAS-8:有了NAS你可以干什么?软件汇总篇

星哥带你玩飞牛 NAS-8:有了 NAS 你可以干什么?软件汇总篇 前言 哈喽各位玩友!我是是星哥,不少朋友私...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比

小白也能看懂:什么是云服务器?腾讯云 vs 阿里云对比 星哥玩云,带你从小白到上云高手。今天咱们就来聊聊——什...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...