Zookeeper基础知识(一)

2023-10-27

一、Zookeeper是什么?

ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈,进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
分布式应用程序可以基于Zookeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列等功能。最主要用处:解决单点故障。
Zookeeper保证了如下分布式一致性特性:

  • 顺序一致性:来自客户端的更新将严格按照客户端发送的顺序处理
  • 原子性:更新或者成功或者失败,不存在部分成功或者部分失败的场景
  • 单一视图:无论客户端连接到哪个服务器,看到的都是一样的视图
  • 可靠性:一旦一个更新生效,它将一直保留,直到再次更新
  • 实时性:在特定的一段时间内,任何系统的改变都能被客户端看到,或者被监听到

客户端的读请求可以被集群中的任意一台机器处理。对于写请求,这些请求会同时发给其他zookeeper机器并且达成一致后,请求才会返回成功。因此,随着zookeeper的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。
有序性是zookeeper中非常重要的一个特性,所有的更新都是全局有序的,每个更新都有一个唯一的时间戳,这个时间戳称为zxid(Zookeeper Transaction Id)。而读请求只会相对于更新有序,也就是读请求的返回结果中会带有这个zookeeper最新的zxid。

二、常见API和命令

1.API
Create /path data
Delete /path
Exists /path
setData /path data
getData /path
getChildren /path

java:参照Apache curator(Netflix开源)、或者zk自带zkClient
Curator框架在原生zk客户端基础上进行了包装,提供了zk各种应用场景,如:分布式锁,集群领导者选举,共享计数器、缓存机制、分布式队列等。
Curator主要从以下几个方面降低了zk使用的复杂性:
重试机制:将所有捕获可恢复异常(后面会讲)配置了一个重试策略,内部也提供了几种标准的重试策略(指数补偿)
连接状态监控:Curator初始化之后会一直对zk连接进行监听,一旦状态变化做出相应处理
Zk客户端实例管理:Curator会对zk客户端到server集群连接进行管理,并在需要的时候重建zk实例,保证zk集群连接的可靠性。

2.命令
启动:./zkServer.sh start
查看zk运行状态:./zkServer.sh status
客户端连接zk: ./zkClis.sh
ls:查看
get:获取节点数据和更新
cZxid :创建节点的id
ctime : 节点的创建时间
mZxid :修改节点的id
mtime :修改节点的时间
pZxid :子节点的id
cversion : 子节点的版本
dataVersion : 当前节点数据的版本
aclVersion :权限的版本
ephemeralOwner :判断是否是临时节点
dataLength : 数据的长度
numChildren :子节点的数量
stat:获得节点更新信息
create –e:创建临时节点
create –s:创建顺序节点
delete /path :删除
stat path watch :设置watch事件
get path watch:设置watch事件

三、Zookeeper的权限控制

ACL权限控制:
ZK的节点有5种操作权限:CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda(即:每个单词的首字符缩写)。
注:这5种权限中,delete是指对子节点的删除权限,其它4种权限指对自身节点的操作权限

身份的认证有4种方式:

  • world:默认方式,相当于全世界都能访问
  • auth:代表已经认证通过的用户(cli中可以通过addauth digest user:pwd 来添加当前上下文中的授权用户)
  • digest:即用户名:密码这种方式认证,这也是业务系统中最常用的
  • ip:使用Ip地址认证
    命令:
    getAcl: 获取某个节点的权限信息
    setAcl: 设置权限

四、Znode节点

  1. 持久节点
  2. 临时节点
  3. 持久有序
  4. 临时有序
    在这里插入图片描述
    所谓持久节点,是指在节点创建后,就一直存在,直到有删除操作来主动清除这个节点——不会因为创建该节点的客户端会话失效而消失。
    这类节点的基本特性和上面的节点类型是一致的。额外的特性是,在ZK中,每个父节点会为他的第一级子节点维护一份时序,会记录每个子节点创建的先后顺序。基于这个特性,在创建子节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会自动为给定节点名加上一个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最大值。
    和持久节点不同的是,临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意,这里提到的是会话失效,而非连接断开。另外,在临时节点下面不能创建子节点。
    临时节点的生命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会自动被清除掉。注意 创建的节点会自动加上编号。

数据保存在内存中,所以高吞吐,低延迟,也证明zk文件节点不宜存储过大数据。

五、监视和通知

1、轮询查看
在这里插入图片描述
2、Watcher机制
在这里插入图片描述
zookeeper这个机制,减少了图1-1中多次2的网络开销。
在图1-2中为设置监听点watch的流程:
1:客户端c2 监听变化,C1连接后在监听/tasks目录下创建一个有序递增节点task1
2:C2收到watch通知
3:C2 向zk再次注册/task
问题:在第三步,C2添加新的watch节点时,如果有新的客户端c3连接后,向/tasks 添加一个新的任务,客户端C2是不是要错过这个变更?
答案:需在3步设置新的watch节点的之前读取下状态

注:尽量将多次变更合并为一个watch事件,watch是单次事件,不一定每次都成功,watch只会保存在内存,而不会持久化到硬盘,客户端与服务端断开连接,需要重置watch

使用watch需要注意的几点:

  • Watches通知是一次性的,必须重复注册.
  • 发生CONNECTIONLOSS之后,只要在session_timeout之内再次连接上(即不发生SESSIONEXPIRED),那么这个连接注册的watches依然在。
  • 节点数据的版本变化会触发NodeDataChanged,注意,这里特意说明了是版本变化。存在这样的情况,只要成功执行了setData()方法,无论内容是否和之前一致,都会触发NodeDataChanged。
  • 对某个节点注册了watch,但是节点被删除了,那么注册在这个节点上的watches都会被移除。
  • 同一个zk客户端对某一个节点注册相同的watch,只会收到一次通知。
  • Watcher对象只会保存在客户端,不会传递到服务端在,具体流程上,简单讲,客户端在向 ZooKeeper 服务器注册 Watcher 的同时,会将 Watcher 对象存储在客户端的 WatchManager 中。当ZooKeeper 服务器触发 Watcher 事件后,会向客户端发送通知,客户端线程从 WatchManager 的实现类中取出对应的 Watcher 对象来执行回调逻辑。

六、版本与运行模式

在这里插入图片描述
版本控制并发
举例:Client1和Client2每次setData后,会保存服务器的版本号在客户端,下次变更会携带版本号,两个调用以版本号作为传入参数,只有传入参数和服务器版本号一致,才能变更(CAS)

Zookeeper两种运行模式:
独立模式、仲裁模式
仲裁模式下有法定人数的概念,一般最少设置为(n/2+1)后续讲解

七、会话

Session 指的是 ZooKeeper 服务器与客户端会话。在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接。客户端启动的时候,首先会与服务器建立一个 TCP 连接,从第一次连接建立开始,客户端会话的生命周期也开始了。通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向Zookeeper服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的Watch事件通知。 Session的sessionTimeout值用来设置一个客户端会话的超时时间。当由于服务器压力太大、网络故障或是客户端主动断开连接等各种原因导致客户端连接断开时,只要在sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。
在为客户端创建会话之前,服务端首先会为每个客户端都分配一个sessionID。由于 sessionID 是 Zookeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 sessionID 的,因此,无论是哪台服务器为客户端分配的 sessionID,都务必保证全局唯一。

在这里插入图片描述
会话生命周期:

如果一个客户端与服务器因超时断开连接,客户端仍然保持connecting状态,直到sessionTimeout。如果设sessionTimeout = t,那么在t/3的时刻,客户端会重连,如果失败,在2t/3的时候,会寻找其他服务器,尝试连接。
连接的新服务器的状态不能落后于原服务器。所以用zxid来决定是否落后。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zookeeper基础知识(一) 的相关文章

  • java.lang.reflect.InvocationTargetException

    产生原因 1 包冲突 有重复包或者缺少包 2 项目jdk和部署jdk版本不一样 导致InvocationTargetException异常信息返回一个空值 没有调用invoc里的重写消息方法 3 映射文件发生改变 对于不同原因的解决 1 包
  • Eureka和Zookeeper的区别

    Eureka和Zookeeper的区别 Mysql Oracle SqlServer等关系型数据库遵循的原则是 ACID 原则 即 A 原子性 C 一致性 I 独立性 D 持久性 Redis Mogodb 等非关系型数据库遵循的原则是 CA
  • ZooKeeper(一):基础介绍

    文章目录 什么是 ZooKeeper ZooKeeper 发展历史 ZooKeeper 应用场景 ZooKeeper 服务的使用 ZooKeeper 数据模型 data tree 接口 znode 分类 总结 什么是 ZooKeeper Z
  • 【狂神说Java】SpringBoo

    作者简介 CSDN内容合伙人 信息安全专业在校大学生 系列专栏 添砖加瓦 狂神说JAVA系列笔记 新人博主 欢迎点赞收藏关注 会回访 个人格言 舞台再大 你不上台 永远是个观众 平台再好 你不参与 永远是局外人 能力再大 你不行动 只能看别
  • Zookeeper报错Will not attempt to authenticate using SASL解决办法

    Will not attempt to authenticate using SASL unknown error 经过查资料 这个问题与zookeeper里面的zoo cfg配置有关 在程序填写的zookeper的路径 一定与zoo cf
  • Kafka

    1 概述 1 1 定义 Kafka是一个分布式的基于发布 订阅模式的消息队列 主要应用于大数据实时处理领域 优势 kafka可以做到 使用非常普通的硬件 也可以支持每秒数百万的消息读写 MQ 代表消息队列 kafka只是众多mq中一款产品
  • Arthas 定位CPU跑满问题,源头竟是Apache Beanutils

    一 背景 大早上 线上k8s 机子 某个机子 cpu 飙高 导致k8s 健康检查失败 线上环境会自动执行jstack 上传到oss 通知到 钉钉告警群 直接分析锁 cpu 高的线程 二 过程分析 2 1 排查cpu 占用最高的线程 使用js
  • 如何启动单节点zookeeper以及注意事项

    1 安装jdk 因为zookeeper是基于java进行开发的 2 将zookeeper解压之后 再zookeeper目录下conf目录下有一个zoo sample cfg 将它改名成zoo cfg 因为zookeeper启动时自动加载的是
  • 微服务全栈:深入核心组件与开发技巧

    文章目录 1 服务注册与发现 1 1 客户端注册 ZooKeeper 1 2 第三方注册 独立的服务Registrar 1 3 客户端发现 1 4 服务端发现 1 5 Consul 1 6 Eureka 1 7 SmartStack 1 8
  • Eureka与Zookeeper的区别

    著名的CAP 理论指出 一个分布式系统不可能同时满足 C 一致性 A 可用性 和 P 分区容错性 由于分区容错性在是分布式系统中必须要保证的 因此我们只能在 A 和 C 之间进行权衡 在此 Zookeeper 保证的是 CP 而 Eurek
  • zookeeper看这一篇就够了

    第一章 zookeeper简介 第1节 zookeeper的由来 1 2 3 4 1 zookeeper最早起源于雅虎研究院的一个研究小组 2 在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调 并且这个系统还有单点问题 3
  • dubbo 项目既是提供方又是消费方,调用不到服务问题

    1 先查看服务提供者有没有注册 这里通过安装eclipse中的zookeeper插件 进行了查看 服务已经注册上了 2 注册上以后 查看调用者有没有在zookeeper中注册 此时通过查看 并没有 3 没有注册上 然后查看是否是配置哪里出了
  • Docker搭建zookeeper

    问题背景 前言 本文参考自 docker compose快速搭建Zookeeper集群 熬到凌晨三点多验证部署成功 网上有很多文章已经无法正确部署了 因为有些东西版本升级了 版本跟不上就会报错 还有一种更加详细更加全面的部署方式 Docke
  • Dubbo源码分析-服务导出源码解析(三)

    在这个版本中dubbo会通过注解 PostConstruct把ServiceBean实例放到ConfigManager中 public abstract class AbstractConfig implements Serializabl
  • Zookeeper之ZAB协议

    1 概念 Zookeeper使用 种称为Zookeeper Atomic Broadcast ZAB Zookeeper原 消息 播协议 的协议作为其数据 致性的核 算法 ZAB协议并不像Paxos算法那样 是 种通 的分布式 致性算法 它
  • 如何实现一个分布锁?

    基本概念 为何需要分布式锁 传统环境中的情况 在程序开发过程中不得不考虑的就是并发问题 在java中对于同一个jvm而言 jdk已经提供了lock和同步等 但是在分布式情况下 往往存在多个进程对一些资源产生竞争关系 而这些进程往往在不同的机
  • 【Docker安装部署Kafka+Zookeeper详细教程】

    Docker安装部署Kafka Zookeeper Docker拉取镜像 Docker拉取zookeeper的镜像 docker pull zookeeper Docker拉取kafka的镜像 docker pull wurstmeiste
  • ZooKeeper踩坑

    一 下载安装包时要下载文件名中带有bin的安装包 否则会报错 找不到或无法加载主类 org apache zookeeper server quorum QuorumPeerMain Error contacting service 这是由
  • Zookeeper 和 Dubbo 的关系?

    Zookeeper的作用 zookeeper用来注册服务和进行负载均衡 哪一个服务由哪一个机器来提供必需让调用者知道 简单来说就是ip地址和服务名称的对应关系 当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现 但是如果提供服务
  • 终于找到了最新版的Zookeeper入门级教程,建议收藏!

    小熊学Java https javaxiaobear cn 1 分布式一致性 1 CAP 理论 CAP 理论指出对于一个分布式计算系统来说 不可能同时满足以下三点 一致性 在分布式环境中 一致性是指数据在多个副本之间是否能够保持一致的特性

随机推荐

  • Oracle 数据库索引扫描方式

    1 索引范围扫描 Index Range Scan 当我们在查询操作中使用了 WHERE 子句进行范围查询时 Oracle 数据库会使用索引范围扫描方式 这种扫描方式通过索引键值的范围来定位需要的数据 例如 我们有一个名为 orders 的
  • 2012.11.20

    昨晚到23 50 实在是困了 于是睡了 发现 杆9其实是个虚拟杆 也就是说 相当于一个辅助线 不INITGEOMETRY 不绘制 只计算 现在设定P1的点 根据余弦定理求出 三角形P1P2P3中 P2对应的角度 a 2 b 2 c 2 2b
  • 为学生夫妻安排一间宿舍两张床,武大的回应亮了

    来源 中国青年报综合自武汉大学官微 身高太高 睡不下宿舍的床咋办 行动有障碍 不方便睡上下铺咋办 第一次来到南方 湿度太大怎么晾衣服 学生夫妻可以申请合宿吗 这两天 武大 宿舍定制服务 在网上刷屏 引发关注 1 学校为 持证上岗 的夫妻档准
  • python3+robotframework+selenium3 浏览器兼容性测试

    robot framework 测试浏览器兼容性 目前ride已支持一下浏览器 firefox ie chrome safari 本次我们已win 10中的ie为例 来看看如何使用python3 robotframework seleniu
  • 一次SpringBoot版本升级,引发的血案

    前言 最近项目组升级了SpringBoot版本 由之前的2 0 4升级到最新版本2 7 5 却引出了一个大Bug 到底是怎么回事呢 1 案发现场 有一天 项目组的同事反馈给我说 我之前有个接口在新的测试环境报错了 具体异常是 Missing
  • Git基本操作命令

    目录 一 简介 二 基本命令使用 1 git add 将该文件添加到暂存区 2 git status 命令用于查看在上次提交之后是否有对文件进行再次修改 3 git diff 比较文件在暂存区和工作区的差异 4 git commit 将暂存
  • [NOIP2014]珠心算测验 T1

    珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术 珠心算训练 既能够开发智力 又能够为日常生活带来很多便利 因而在很多学校得到普及 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法 他随机生成一个正整数集合 集合中的
  • go Hijack

    golang GO语言 http详解简单基础 1 因为好像长时间的写PHP可能大家感觉烦躁了 所以写一点golang的东西大家可以拿去玩玩 golang在web开发中让你得心应手 其实也是很好的东西 只要你玩进去之后感觉好爽 感觉比PHP的
  • 网络安全笔记5——数字签名

    网络安全笔记5 数字签名 参考课程 中国大学MOOC 网络安全 北京航空航天大学 文章目录 网络安全笔记5 数字签名 基本概念 分类 数学表示 RSA数字签名机制 ElGamal数字签名机制 Schnorr数字签名机制 DSS数字签名机制
  • 未能找到任何适合于指定的区域性或非特定区域性的资源

    试了所有的方法都不行 最后把resx文件删了 重新添加图片图标 ok
  • UVa 133 The Dole Queue(圈的下标处理)

    本题难点在于用数组处理圈状物时下标的计算 include
  • C++下几种新的数据类型

    一 CString 用法 CString s 123 对应库 include
  • 如何查看是否安装了java环境?

    一 win R 输入cmd 二 回车后进入cmd界面 三 在cmd窗口中输入java 若提示 java 不是内部或外部命令 也不是可运行的程序或批处理文件 则表示未安装JRE 这个错误提示表明系统无法找到 java 程序 可能是由于 Jav
  • Datatables

    1 10 x与1 9 x参数名对照表 Datatables 1 10 x在命名上与1 9 x的有区别 新版的使用的是驼峰的命名规则 而之前的是采用匈牙利命名规则 当然 这些变化都是向下兼容的 你可以继续使用旧版本的api方法的参数和名称 如
  • MongoDB安装配置详细教程

    1 安装平台 windows win7 win10均可 2 MongoDB安装包下载 MongoDB的安装包下载地址 https www mongodb com download center atlas 3 安装过程 1 运行下载的msi
  • 搞笑幽默段子-1(仅供娱乐)

    老师问小明 小明 你昨天为什么没来上课 小明回答 老师 我昨天去办事 结果碰到一只猪 我和它相视了一会儿 然后它居然把我当成兄弟 跟着我进了学校 我只好带着它一起上课 老师一脸错愕 你确定那只猪跟着你一起进了学校 小明犹豫片刻 回答 老师
  • node实现文件上传(1)

    1 FormData对象 以对象的方式来表示页面中的表单 又称为表单对象 以key value的方式来保存数据 XMLHttpRequest对象可以轻松的表单对象发送的服务器端 1 是一个构造函数 new FormData 2 常用的API
  • 分布式事务的二阶段提交和三阶段提交

    分布式事务 是指存在多个跨库事务的事务一致性问题 或者是指分布式架构下由多个应用节点组成的多个事务之间的事务一致性问题 在单点服务时 某电商会员购买上市时会出现以下情况 开启数据库事务 创建订单 会员积分减少 商品库存减少 提交数据库事务
  • MYSQL获取最近7天的日期

    写一个简单的 获取最近7填日期的sql select DATE SUB curdate INTERVAL 1 DAY day1 union select DATE SUB curdate INTERVAL 2 DAY day2 union
  • Zookeeper基础知识(一)

    一 Zookeeper是什么 ZooKeeper是一个开放源码的分布式协调服务 它是集群的管理者 监视着集群中各个节点的状态根据节点提交的反馈 进行下一步合理操作 最终 将简单易用的接口和性能高效 功能稳定的系统提供给用户 分布式应用程序可