Zookeeper 分布式服务协调治理框架介绍入门

news2025/6/9 18:15:13

文章目录

  • 为甚么需要Zookeeper
  • 一、Zookeeper 介绍
    • 1.1 介绍
    • 1.2 Zookeeper中的一些概念
      • 1.2.1 集群角色
      • 1.2.2 会话 session
      • 1.2.3 数据节点 Znode
      • 1.2.4 版本
      • 1.2.5 事件监听器 Watcher
      • 1.2.6 ACL 权限控制表(Access Control Lists)
  • 二、 Zookeeper的系统模型
      • 2.1.1 ZNode节点
      • 2.1.2 ZNode的分类
      • 2.1.3 事务ID
      • 2.1.4 ZNode的状态信息
      • 2.1.5 Watcher 数据变更通知
      • 2.1.6 ACL 保障数据的安全

Zookeeper最主要的使用场景,是作为分布式系统的分布式协同服务
资料:

  • zookeeper官方文档 https://zookeeper.apache.org/doc/r3.7.0/zookeeperInternals.html#sc_consistency

其他:

  • 3.5支持动态节点扩容,之前要么全部停止,要么一个一个停止更新
  • zookeeper的核心 zab协议,是一个最终一致性的协议,因为除了主节点外其他节点都是异步写入的数据,客户端如果在未同步完成前读取数据,就有可能出现数据不一致。如果要保证强一致性,那么写入性能将大受影响。如过要保证最新的值,那么客户端API提供了sync()方法,读取节点数据前调用一下,节点就会和主节点进行最新的同步。

为甚么需要Zookeeper

分布式系统的信息传输不可靠可能导致信息不一致
分布式系统使用n个服务器组成集群,可以增强系统的计算能力,但是服务器之间的信息传输协调,依靠的是不可靠的网络传输。需要考虑网络延迟、中断、服务器之间的信息不对等等问题。所以需要通过某种方式,让每个服务器之间能够信息同步和共享。
让分布式系统信息同步和共享

  • 方式1:通过网络进行信息共享 通过网络进行信息共享,每次有数据变动时直接通知给每台服务器。出现网络问题的话,可能就会数据不一致,并且后续加入的服务器无法得知之前的消息。
  • **方式2:通过共享存储进行信息共享 **例如对于需要共享的数据,放在可以共享访问的数据库中,各个服务器定期主动拉取数据。
  • 方式2优化 对于需要共享的数据,放在所有服务器都能共享访问的地方。并且当数据发生改变时,主动通知关注的服务器,这样各个服务器都能第一时间获取到最新的数据。Zookeeper就是这种方式实现的对分布式系统的协调。

一、Zookeeper 介绍

1.1 介绍

zookeeper 是一个开源的**分布式协调服务,**是一个典型的分布式数据一致性的解决方案。实现了分布式数据的强一致性!基于Zookeeper可以实现数据发布/订阅,负载均衡、命名服务、集群管理、分布式锁、分布式队列等功能。

1.2 Zookeeper中的一些概念

1.2.1 集群角色

  • 在通常的集群方式中,最典型的就是Master/Slave模式(主备) ,这种模式对能够处理写操作的机器称为Master通过异步复制获取最新数据的称为Slave机器。
  • Zookeeper没有直接使用M/S模式,引入了Leader、Follower、Observer三种角色。
  • Zookeeper集群中所有机器通过Leader选举,选出Leader、Leader能提供事务写入服务,其他节点则仅提供读取服务,并且负责转发客户端写入事务到Leader节点。
  • Observer和Follower节点的区别就是,Observer节点不参与投票,也不参与选举。Observer类型节点可以提升选举和投票的效率。

1.2.2 会话 session

  • Session指的是客户端会话,zookeeper使用的是基于TCP的自己实现的通信协议。
  • 会话指的就是客户端和服务端之间的一次TCP长连接的创建和销毁。客户端通过这个TCP长连接来和服务器保持有效的会话,也能向服务器发送请求接受响应,同时还能接受来自服务器的Watch事件。

1.2.3 数据节点 Znode

  • 在分布式系统中,“节点”往往是指代一台机器,但是 Zookeeper中,节点可以指代构成集群的机器称为“机器节点”,另外往往指代zookeeper的一中数据模型的数据单元**,** 称为数据节点。
  • Zookeeper 将所有数据存储在内存中,数据模型是一棵树 ZNode Tree,由斜杠 / 进行分割的路径,就是一个Znode,例如 /lock/app 。每个ZNode可以保存自己的数据内容,同时还会保存一系列属性信息。

1.2.4 版本

  • 每个Znode会存储数据,并且Zookeeper会为其维护一个叫做叫做Stat的数据结构,Stat记录了这个ZNode的三个数据版本。
  • version 指代当前的 Znode 保存的数据内容版本。
  • cversion 指代当前ZNode子节点的版本
  • aversion 当前ZNode的ACL版本

1.2.5 事件监听器 Watcher

Watcher是Zookeeper很重要的特性,Zookeeper允许客户端在指定节点上注册一些Watcher,并且在对应事件触发时主动通知到监听的客户端。这也是Zookeeper实现分布式协调服务的重要特性。

1.2.6 ACL 权限控制表(Access Control Lists)

Zookeeper 使用ACL (Access Control Lists) 策略来进行权限控制其包含了下面五种权限

  1. CREATE 创建子节点的权限
  2. READ 获取子节点和子节点列表的权限
  3. WRITE 更新节点数据的权限
  4. DELETE 删除子节点的权限
  5. ADMIN 设置节点ACL的权限

二、 Zookeeper的系统模型

2.1.1 ZNode节点

  • ZooKeeper中,数据信息被保存在一个个的数据节点上,这些节点称为znode
  • ZNode是Zookeeper中最小的数据单位
  • ZNode一层层可以往下挂Znode,最后形成一颗ZNode树,类似文件系统的层级树状结构。
  • ZNode使用 / 来分割,/ 也表示根目录。
  • image.png

2.1.2 ZNode的分类

ZooKeeper 的节点类型可以分为三类

  • 持久性节点 Presistent 是Zookeeper中最常见的一种节点类型,节点被创建后除非主动删除否则会一直存在ZooKeeper服务中。
  • 临时性节点 Ephemeral 会被自动清理的节点,生命周期和客户端会话绑定,一旦会话结束节点就会被删除。并且临时节点无法再创建子节点。
  • 顺序节点 Sequential 顺序节点也分为临时顺序节点和持久顺序节点,顺序节点在创建后,会自动加上数字后缀,能体现节点的顺序。

2.1.3 事务ID

  • 什么是事务:这里的事务不是指数据库的事务而是指能够改变ZooKeeper服务器状态的操作。称之为 实务操作,或者更新操作,一般包含数据节点的创建、删除、更新等等。
  • 对于每一个事务请求,ZooKeeper 都会为其分配一个全局唯一的事务ID
  • 事务ID用ZXID来标识,通常是一个64位的数字,每一个ZXID对应一次更新操作,从这些XZID中可以间接的识别出ZooKeeper处理这些更新操作请求的全局顺序。

2.1.4 ZNode的状态信息

[zk: localhost:15881(CONNECTED) 8] stat /zk-premament
cZxid = 0x100000006
ctime = Fri Jun 30 11:02:24 CST 2023
mZxid = 0x100000008
mtime = Fri Jun 30 11:03:38 CST 2023
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
  • 查看ZNode的状态 stat /zk-premament
  • cZxid Create ZXID 节点被创建时的事务ID
  • ctime Create Time 标识节点创建的事件
  • mZxid Modified ZXID 节点最后一次被修改时的事务ID
  • mtime Modified Time 节点最后一次被修改的事件
  • pZxid 子节点列表最后一次被更新时的事务ID。注意子节点内容变化这个id不会改变。
  • cversion 标识子节点的版本号
  • dataVersion 表示节点内容版本号
  • acVersion 表示acl策略版本号
  • ephemeralOwner 表示创建该临时节点的会话 sessionId 如果是持久性节点那么值为0
  • dataLength 表示数据长度
  • numChildren 表示直系子节点数

2.1.5 Watcher 数据变更通知

  • ZooKeeper使用Watcher机制实现了分布式数据发布/订阅功能
  • 在 ZooKeeper 中,引⼊了 Watcher 机制来实现这种分布式的通知功能。ZooKeeper 允许客户端向服务端注册⼀个 Watcher 监听,当服务端的⼀些指定事件触发了这个 Watcher,那么就会向指定客户端发送⼀个事件通知来实现分布式的通知功能。
  • image.png
  • Zookeeper的Watcher机制主要包括客户端线程客户端WatcherManagerZookeeper服务器三部分
  • 具体⼯作流程为:
    1. 客户端在向Zookeeper服务器注册的同时,会将Watcher对象存储在客户端的WatcherManager当中。
    2. 当Zookeeper服务器触发Watcher事件后,会向客户端发送通知,客户端线程从WatcherManager中取出对应的Watcher对象来执⾏回调逻辑。

2.1.6 ACL 保障数据的安全

Zookeeper作为⼀个分布式协调框架,其内部存储了分布式系统运⾏时状态的元数据,这些元数据会直接影响基于Zookeeper进⾏构造的分布式系统的运⾏状态,因此,如何保障系统中数据的安全,从⽽避免因误操作所带来的数据随意变更⽽导致的数据库异常⼗分重要,在Zookeeper中,提供了⼀套完善的ACL(Access Control List)权限控制机制来保障数据的安全。

  • 我们可以从三个⽅⾯来理解ACL机制:
    • 权限模式(Scheme)
    • 授权对象(ID)
    • 权限(Permission),
  • 通常使⽤"scheme: id : permission"来标识⼀个有效的ACL信息。

**权限模式 Scheme **
用来确定权限验证过程中使用的检验策略,可以分成IP/IP段和账号密码,细分的话可以分为如下四种。

  1. IP 通过ip地址的粒度来进行权限控制,可以配置某个IP也可以配置某个ip网段。
  2. **Digest **是最常用的权限控制模式,更符合我们对权限控制的认识,使用“username:password”形式的权限标识来进行权限配置,可以区分不同的应用来进行权限控制。当我们通过username:password”配置了权限标识后,Zookeper会对其进行SHA-1加密和BASE64编码
  3. **World **是一种开放的权限控制模式,即数据节点的权限对所有用户开放。也可以看成Digest的一种特殊形式。即 “world:anyone”
  4. super 就是超级用户授权,启动zookeeper时修改zkServer.sh的启动命令脚本开启super模式,登录后添加超级管理员账户即可操作管理所有节点。
  5. **Auth **授权用户,用户名:密码 ,需要先添加ACL账户
#1添加ACL账户
# addauth digest 用户名:密码
[zk: localhost:2181(CONNECTED) 4] addauth digest test:test123

#2创建测试节点
# create 测试节点 测试节点值
[zk: localhost:2181(CONNECTED) 3] create /test_acl value_of_test_acl

#3给测试节点设置Auth权限
# setAcl 测试节点 auth:用户名:crawd (权限)
[zk: localhost:2181(CONNECTED) 5] setAcl /test_acl auth:test:crawd

#第一步:将要设置的密码进行base64编码可以使用linux命令,也可以使用其他语言自己实现
>>echo -n test:test | openssl dgst -binary -sha1 | openssl base64
>>V28q/NynI4JI3Rk54h0r8O5kMug=

#第二步:创建测试节点
[zk: localhost:2181] create /digest user
#第三步:给节点设置 digest授权
[zk: localhost:2181] setAcl /digest digest:test:V28q/NynI4JI3Rk54h0r8O5kMug==:rwadc
#第四步:查询ACL
[zk: localhost:2181] getAcl /digest
#ACL输出结果
[zk: localhost:2181] addauth digest user:passwd
#开启SuperDigest超级管理员举例 
 
#1、修改zkServer.sh,加入super权限设置
SUPER_ACL="-Dzookeeper.DigestAuthenticationProvider.superDigest=super:gG7s8t3oDEtIqF6DM9LlI/R+9Ss="
 
#2、重新启动Zookeeper
# ./zkServer.sh restart
 
# 添加认证前无法访问节点
[zk: localhost:2181] ls /test
Authentication is not valid : /test

#3、使用super:super进行认证,添加super认证
[zk: localhost:2181) ] addauth digest super:super
#获得了节点权限
[zk: localhost:2181) ] ls /test
[]
[zk: localhost:2181)] get /test

权限ID
就是权限模式对应的内容,例如权限模式是IP那么对应的ID就是IP地址或网段

**权限Permission **
zookeeper中权限可以分为五大类

  • CREATE(C):数据节点的创建权限,允许授权对象在该数据节点下创建⼦节点
  • DELETE(D):⼦节点的删除权限,允许授权对象删除该数据节点的⼦节点。
  • READ(R):数据节点的读取权限,允许授权对象访问该数据节点并读取其数据内容或⼦节点列表等。
  • WRITE(W):数据节点的更新权限,允许授权对象对该数据节点进⾏更新操作。
  • ADMIN(A):数据节点的管理权限,允许授权对象对该数据节点进⾏ ACL 相关的设置操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1355072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亿可达:提升工作效能的秘诀

在竞争激烈的职场中,提高工作效率对于个人和团队都至关重要。而选择适合自己的工作效率软件,可以为我们提供更好的工作协作和任务管理体验。下面是我个人推荐的一些实用工作效率软件,希望能对您有所帮助。 1. Any.do:Any.do是一款…

AI小冰入驻淘宝 将提供虚拟人陪伴服务

AI小冰正式入驻淘宝! 据悉,小冰在淘宝开出了“小冰旗舰店”、以及手淘小程序“X Eva 克隆人的平行世界”,为消费者提供基于KOL虚拟人带来的陪伴服务体验。用户搜索“小冰旗舰店”就可以直达店铺进行选购。 ​小冰旗舰店的首批商品包括冰花直充…

‘react-native‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

原因:没有下载react-native 解决下载react-native npm i -g react-native-cli

19|BabyAGI:根据气候变化自动制定鲜花存储策略

19|BabyAGI:根据气候变化自动制定鲜花存储策略 随着 ChatGPT 的崭露头角,我们迎来了一种新型的代理——Autonomous Agents(自治代理或自主代理)。这些代理的设计初衷就是能够独立地执行任务,并持续地追求长…

使用 Jupyter 分析 ROS 消息时间间隔抖动数据

ROS 是一个分布式机器人操作系统软件框架,节点之间通过松耦合的方式进行组合,包括使用 Topic、RPC 服务和参数服务器等方式进行通信。其中,Topic 是最常见的一种通信方式,例如一个雷达传感器节点实时采集三维点云数据,…

WEB 3D技术 three.js 几何体uv属性讲解与基本演示

本文 我们来说说uv 那么 它是什么呢? 首先 比如 我们几何体 贴一个图 那么 为什么我们图的四个边就能正好贴到几何体的边 为什么不可以图就在几何体中间呢? 中心为什么能对齐 它就不能偏一点吗? 这是第一个问题 还有我们 gltf 这种文件 其实…

服务器防护怎么做

随着网络攻击的日益猖獗,服务器安全已成为关注的焦点。如何有效防御各种网络威胁,确保数据安全与业务连续性,已成为一项迫切的需求。目前服务器所面临的主要威胁包括但不限于:DDoS攻击、SQL注入、跨站脚本攻击(XSS)、远程命令执行…

Linux_CentOS_7.9_Oracle11gr2配置数据库及监听服务自启动多方案实操之简易记录

前言: 作为运维保障,都无法准确预估硬件宕机的突发阶段,其生产数据实时在产出,那作为dba数据库服务以及相关Listener的其重要性、必要性就突显而出。这里拿虚拟机试验做个配置记录,便于大家学习参考。 实现方法一: 环境变量值::$ORACLE_HOME= /data/oracle/product/1…

利用深度学习图像识别技术实现教室人数识别

引言 在现代教育环境中,高效管理和监控教室成为了一个重要议题。随着人工智能技术的迅猛发展,特别是深度学习和图像识别领域的突破,我们现在可以通过智能系统来自动识别教室内的人数,从而实现更加智能化的教室管理。 深度学习与图…

可调恒流电子负载的工作原理

可调恒流电子负载是能够模拟真实负载的电子设备,它可以在电源和负载之间提供稳定的电流。这种设备在电源测试、电池充放电测试、电源老化测试等领域有着广泛的应用。 可调恒流电子负载的工作原理主要基于欧姆定律和功率守恒定律。欧姆定律指出,电流通过一…

聚名平台域名外部入库流程

如果您的域名是在聚名平台管理(不管注册商是聚名还是阿里云、腾讯云等其他注册商),外部入库时请选择聚名。 在外部入库操作之前,请先登录聚名平台获取聚名平台的用户ID和邮箱信息。详细的账户ID和邮箱信息获取位置如下图&#xff…

八、HTML 链接

一、HTML 链接 HTML 使用超级链接与网络上的另一个文档相连。 HTML中的链接是一种用于在不同网页之间导航的元素。 链接通常用于将一个网页与另一个网页或资源(如文档、图像、音频文件等)相关联。 链接允许用户在浏览网页时单击文本或图像来跳转到其…

C#: Label、TextBox 鼠标停留时显示提示信息

说明:记录在 Label、TextBox 控件上 鼠标停留时显示提示信息的方法。 1.效果图 2.具体实现步骤 1. 在Form 窗口中先创建 Label 并取名:KEY_label ,或 TextBox 取名:KEY_textBox 在 Form1 函数中添加初始化代码,如下&…

各章练习题解析

目录 第1章 EDIT模型概述 题目 解析 第1章 EDIT模型概述 题目 第1题 第2题

深度学习中的大模型「幻觉」问题:解析、原因及未来展望

如何解决大模型的「幻觉」问题? 什么是大模型「幻觉」 大模型幻觉是指在深度学习领域中,尤其是涉及大型神经网络时,模型展现出在理论上不应具备的性能或能力。这种现象可能导致误导性的结果,表现为在训练数据上过度拟合&#xff0…

Apache 网页优化

技能目标: 掌握 Apache 网页压缩掌握 Apache 网页缓存掌握Apache 隐藏版本信息掌握 Apache 网页防盗链 1.1网页压缩与缓存 在使用 Apache 作为 Web 服务器的过程中,只有对 Apache 服务器进行适当的优化配 置才能让 Apache 发挥出更好的性能。反过来说&…

CompressAI:深度学习与传统图像压缩

1、图像压缩算法原理 传统的有损图像压缩方法,如JPEG , JPEG2000 , HEVC或AV1或VVC,在类似的编码方案上进行了迭代改进:将图像划分为像素块,使用变换域通过线性变换(例如:DCT或DWT)去相关空间频率&#xf…

Unity 打包AB 场景烘培信息丢失

场景打包成 AB 资源的时候,Unity 不会打包一些自带相关的资源 解决办法:在 Project settings > Graphics下设置(Automatic 修改成 Custom)

ELement UI时间控件el-date-picker误差8小时解决办法

一、问题描述&#xff1a; 在项目中引用了elementui中的date-picker组件&#xff0c;选中的时间跟实际相差八小时&#xff0c;且格式不是自己想要的格式 <el-date-pickertype"date"placeholder"选择日期"format"yyyy/M/d"v-model"form…

宏集PC Runtime软件助推食品行业生产线数字化革新

一、前言 近年来&#xff0c;中国食品行业发展迅速且灵活多变&#xff0c;在当前经济下行的情形下&#xff0c;食品行业正面临着日益激烈的竞争&#xff0c;导致企业利润下降。 为了保持企业市场竞争力&#xff0c;国内某top10食品企业采用宏集SCADA解决方案—PC Runtime软件…