zookeeper相关总结
1. ZooKeeper 的架构
ZooKeeper 采用主从架构(Leader-Follower 模型),包括以下组件:
- Leader:负责处理所有写请求和协调事务一致性。
- Follower:处理读请求并转发写请求给 Leader。参与 Leader 选举和事务提交过程。
- Observer:只处理读请求,不参与写请求的投票和事务提交,主要用于扩展读取吞吐量。
2. ZAB 协议(ZooKeeper Atomic Broadcast)
ZooKeeper 使用 ZAB 协议来保证事务的一致性和容错性。ZAB 协议包括两个主要阶段:
2.1 恢复阶段
在这个阶段,ZooKeeper 集群会进行 Leader 选举,并确保系统中的所有节点都达成一致的初始状态。具体步骤如下:
- Leader 选举:当 ZooKeeper 集群启动或现有 Leader 失效时,系统会进行 Leader 选举。节点会相互通信,选出具有最大 zxid 的节点作为新的 Leader。
- 同步状态:新 Leader 会将其最新的状态同步到所有 Follower 节点,确保所有节点的数据状态一致。
2.2 广播阶段
在这个阶段,Leader 处理客户端的写请求,并将这些请求以事务的形式广播给所有 Follower 节点。具体步骤如下:
- 事务提议:Leader 收到写请求后,生成一个事务提议(proposal),并分配一个唯一的 zxid。
- 提议广播:Leader 将事务提议广播给所有 Follower 节点。
- 事务确认:Follower 节点接收到提议后,记录到本地日志,并向 Leader 发送确认(ACK)。
- 事务提交:当 Leader 收到多数 Follower 节点的确认后,提交事务,并将提交消息广播给所有 Follower 节点。
- 数据应用:所有节点按照 zxid 的顺序应用事务变更,更新本地数据状态。
3. 数据一致性
ZooKeeper 保证数据的一致性,通过以下机制实现:
- 原子广播:ZAB 协议确保所有节点以相同的顺序处理事务,保证数据的一致性。
- 多数确认:写操作需要得到多数节点的确认才能提交,避免单点故障导致的数据不一致。
- 数据同步:Leader 选举过程中,新 Leader 会将最新的数据状态同步给所有 Follower,确保数据一致。
4. Session 和 Watch
4.1 Session
客户端与 ZooKeeper 集群之间通过会话(Session)进行通信。每个会话都有一个唯一的会话 ID 和超时时间。在会话期间,客户端可以发送请求和接收响应。当会话失效(如客户端崩溃或网络中断)时,与该会话相关的临时节点会被自动删除。
4.2 Watch
ZooKeeper 提供了 watch 机制,允许客户端在 znode 上设置观察器,以便在数据发生变化时接收通知。watch 是一次性触发的,触发后需要重新设置。
5. ZooKeeper 的一致性模型
ZooKeeper 提供线性一致性和顺序一致性:
- 线性一致性:所有写请求在整个集群中按照严格的顺序进行处理,确保所有节点在同一时刻具有相同的数据状态。
- 顺序一致性:所有写请求按接收的顺序进行处理,读请求可能会返回旧数据,但保证读操作的顺序。
6. 实际应用中的 ZooKeeper
ZooKeeper 被广泛应用于分布式系统中,主要用于以下场景:
- 配置管理:存储和管理分布式系统的配置信息,确保所有节点读取一致的配置信息。
- 命名服务:提供分布式系统中唯一的命名服务,确保资源的唯一性。
- 分布式锁:通过临时节点实现分布式锁,确保多个客户端之间的互斥访问。
- 领导者选举:通过临时顺序节点实现领导者选举,确保分布式系统中唯一的领导者。
总结
ZooKeeper 通过主从架构、ZAB 协议、Session 和 Watch 机制,实现了高可用、强一致性的分布式协调服务。它在分布式系统中起到了关键作用,为配置管理、命名服务、分布式锁和领导者选举等场景提供了可靠的解决方案。
6 Zookeeper的节点
ooKeeper 提供了两种主要的节点类型:临时节点(Ephemeral Znode)和永久节点(Persistent Znode),它们各自有不同的用途和适用场景。
临时节点(Ephemeral Znode)
特点:
- 当创建临时节点的客户端会话结束(例如客户端崩溃或主动关闭),节点会被自动删除。
- 临时节点不能拥有子节点,即不能创建子节点。
适用场景:
- 会话状态管理:例如在分布式系统中,客户端可以创建临时节点来表示自己的在线状态或工作状态。当客户端会话结束时,对应的临时节点会自动删除,用于动态管理和监控客户端的在线状态。
- 分布式锁:使用临时节点实现分布式锁时,锁的持有和释放与客户端的会话状态绑定,确保在客户端会话结束时自动释放锁
永久节点(Persistent Znode)
特点:
- 永久节点在创建后会一直存在,直到明确被删除。
- 永久节点可以拥有子节点,可以作为一个持久的目录结构来组织和存储数据。
适用场景:
- 配置管理:存储和管理分布式系统的配置信息,例如数据库连接信息、系统参数等。
- 命名服务:提供分布式系统中唯一的命名服务,例如服务注册和发现中的节点注册。
- 状态信息:存储和展示系统的状态信息,例如集群节点的运行状态、统计信息等。
1 Zookeeper的工作原理
ZooKeeper 的核心是原子广播,这个机制保证了各个 Server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。
Zab协议是为分布式协调服务Zookeeper专门设计的一种 支持崩溃恢复 的 原子广播协议 ,是Zookeeper保证数据一致性的核心算法。Zab借鉴了Paxos算法,但又不像Paxos那样,是一种通用的分布式一致性算法。它是特别为Zookeeper设计的支持崩溃恢复的原子广播协议。
基于该协议,zk实现了一种主备模型(即Leader和Follower模型)的系统架构来保证集群中各个副本之间数据的一致性。
这里的主备系统架构模型,就是指只有一台客户端(Leader)负责处理外部的写事务请求,然后Leader客户端将数据同步到其他Follower节点。
zab协议分为消息广播和崩溃恢复两种模式。
崩溃模式
Leader和Folower以一定间隔进行心跳连接,当超过一半的Follower与Leader失去联系,则认为Leader失效,zookeeper集群进入崩溃恢复模式。
崩溃恢复主要包括两部分:Leader选举 和 数据恢复。
恢复模式主要处理节点故障和leader选举。当leader节点出现故障或新的leader被选举出来时,系统进入恢复模式。恢复模式的主要步骤包括:
- 选举新的leader:通过选举算法选择一个新的leader节点。
- 数据同步:新选出的leader从follower节点中收集最新的数据状态,并将这些状态同步到所有的follower节点。
- 确认同步完成:当所有follower节点与leader节点的数据状态一致后,系统退出恢复模式,进入广播模式。
广播模式
消息广播主要是针对写请求。
zookeeper客户端会随机连接到zookeeper集群中的某个节点,如果是读请求,就直接从当前节点中读取数据;如果是写请求,那么节点就会向 Leader 发送写请求,由Leader依赖zab协议处理。
zab协议对于写操作的处理有些类似于分布式事务的两阶段提交。
在两阶段提交里,写操作分为投票(prepare)阶段和提交(commit)阶段。当一个写请求到达时,协调中心会将请求发给所有的参与者,如果所有的参与者都写入成功,那么就提交这个写请求,反之,只要有一个参与者写入失败就会回滚。在所有的参与者返回结果之前,协调中心会一直阻塞,耗时比较久。
zab协议在此基础上做了修改:将节点角色分为leader和follower,只需要半数以上的follower写入成功即可。
广播模式主要处理正常情况下的数据同步。在广播模式下,所有的写请求都首先发送到leader节点,leader节点会将这些请求以事务的形式广播给所有的follower节点。广播模式的主要步骤包括:
- 事务提议:leader节点接收到写请求后,生成一个事务提议(Proposal),并将其广播给所有的follower节点。
- 事务确认:follower节点接收到事务提议后,写入本地日志,并发送确认(ACK)给leader节点。
- 事务提交:leader节点收到大多数follower节点的确认后,将事务提交,并再次广播提交消息(Commit)给所有的follower节点。
- 事务应用:follower节点接收到提交消息后,将事务应用到本地数据状态。
2 ZooKeeper 的 CP 特性
-
一致性(Consistency):
- ZooKeeper 确保在任何时刻,所有节点的数据都是一致的。每次写操作必须得到集群中多数节点的确认才能提交,保证了数据的强一致性。
- ZAB 协议(ZooKeeper Atomic Broadcast)通过事务日志和数据快照机制,确保所有节点的数据状态一致。
-
分区容忍性(Partition Tolerance):
- ZooKeeper 能够容忍网络分区,保证集群在部分节点失联或网络故障时继续运行。
- 在发生网络分区时,只有包含多数节点的分区能够选举出新的 Leader 并继续处理写请求,防止数据不一致。
1)ZooKeeper中的一致性
ZooKeeper通过多数确认机制确保数据一致性的描述,实际上应该是线性一致性(Linearizability)或顺序一致性(Sequential Consistency),而不完全等同于强一致性(Strong Consistency)在某些特定上下文中的严格定义。让我们更详细地探讨这个问题。 ZooKeeper通过多数确认机制、单一leader处理写请求、事务日志和数据同步等机制,提供了线性一致性和顺序一致性。这些一致性模型在实践中通常被认为是“强一致性”的有效形式,确保了系统在面对网络分区和节点故障时,仍然能够保持数据的一致性。
zxid 和数据一致性
在 ZooKeeper 中,zxid(ZooKeeper Transaction ID)是一个全局唯一的事务标识符,用于标记和排序所有的事务操作。每一个 zxid 表示一个特定的状态变更(如创建节点、删除节点、修改节点数据等),它是确保 ZooKeeper 数据一致性和顺序性的关键机制。
zxid 的作用
- 全局顺序:zxid 确保所有事务在 ZooKeeper 集群中具有全局顺序,所有节点以相同的顺序处理事务,从而保证数据一致性。
- Leader 选举:在 Leader 选举过程中,节点会比较 zxid,以确定哪个节点具有最新的数据状态,优先选择拥有最大 zxid 的节点作为新 Leader。
- 数据恢复:当节点重新加入集群或在崩溃后恢复时,zxid 用于识别和同步缺失的事务,确保节点的数据与 Leader 保持一致。
zxid 是 ZooKeeper 保证数据一致性和顺序性的核心机制。通过 zxid,ZooKeeper 能够在分布式环境中实现以下目标:
- 全局有序性:所有节点按照相同的顺序处理事务,确保数据一致性。
- 故障恢复:在 Leader 失效或网络分区恢复后,使用 zxid 同步和恢复数据,保证系统的可靠性。
- 一致性视图:客户端在读取数据时,能够看到一个一致的视图,因为所有写操作都是按照 zxid 的顺序提交和应用的
2)ZooKeeper 不强调可用性(Availability)
由于 ZooKeeper 优先保证一致性和分区容忍性,因此在某些情况下,系统可能会牺牲部分可用性。例如:
- Leader 选举期间:当现任 Leader 失效或发生网络分区时,ZooKeeper 需要时间进行 Leader 选举。在选举过程中,集群无法处理写请求,导致短暂的不可用。
- 多数确认机制:写操作需要得到多数节点的确认才能提交,如果多数节点不可用,则写操作无法完成,导致系统部分不可用。
3)实际应用中的平衡
虽然 ZooKeeper 是一个 CP 系统,但在实际应用中,ZooKeeper 通过优化 Leader 选举和数据同步过程,尽量减少不可用的时间,提供尽可能高的可用性。这使得 ZooKeeper 在需要强一致性和分区容忍性的分布式系统中成为一个可靠的协调服务。
总结
- ZooKeeper 是一个 CP 系统,在 CAP 定理中优先保证一致性和分区容忍性。
- 一致性:通过多数确认机制和 ZAB 协议确保数据一致性。
- 分区容忍性:在网络分区时,通过选举新的 Leader 保持系统运行。
- 可用性:在某些情况下会被牺牲,以确保系统的一致性和分区容忍性。
3 Leader选举过程
初始状态
在ZooKeeper集群启动或Leader失效时,会触发Leader选举。每个节点都处于LOOKING状态,表示正在寻找新的Leader。
投票机制
-
发起投票:
- 每个节点(假设节点为ZK1, ZK2, ZK3, ZK4, ZK5)会发起一个投票,首先投票给自己。投票包括节点ID和节点的事务ID(zxid,表示节点处理到的最新事务)。
-
投票交换:
- 每个节点会将自己的投票发送给其他所有节点。
- 节点接收到其他节点的投票后,会比较投票内容。
-
投票比较:
- 比较规则:首先比较zxid,zxid大的节点优先;如果zxid相同,则比较节点ID,节点ID大的优先。
- 如果接收到的投票比当前节点的投票更优(根据比较规则),则当前节点更新自己的投票,改为投票给优先级更高的节点。
-
计数投票:
- 每个节点维护一个投票计数,统计每个节点获得的投票数。
相关文章:

zookeeper相关总结
1. ZooKeeper 的架构 ZooKeeper 采用主从架构(Leader-Follower 模型),包括以下组件: Leader:负责处理所有写请求和协调事务一致性。Follower:处理读请求并转发写请求给 Leader。参与 Leader 选举和事务提…...

【openwrt】Openwrt系统新增普通用户指南
文章目录 1 如何新增普通用户2 如何以普通用户权限运行服务3 普通用户如何访问root账户的ubus服务4 其他权限控制5 参考 Openwrt系统在默认情况下只提供一个 root账户,所有的服务都是以 root权限运行的,包括 WebUI也是通过root账户访问的,…...

【GD32】从零开始学GD32单片机 | WDGT看门狗定时器+独立看门狗和窗口看门狗例程(GD32F470ZGT6)
1. 简介 看门狗从本质上来说也是一个定时器,它是用来监测硬件或软件的故障的;它的工作原理大概就是开启后内部定时器会按照设置的频率更新,在程序运行过程中我们需不断地重装载看门狗,以使它不溢出;如果硬件或软件发生…...

详解曼达拉升级:如何用网络拓扑结构扩容BSV区块链
发表时间:2024年5月24日 BSV曼达拉升级是对BSV基础设施的战略性重塑,意在显著增强其性能,运行效率和可扩容。该概念于2018年提出,其战略落地将使BSV区块链顺利过渡,从现有的基于单一集成功能组件的网络拓扑结构&am…...

编译打包自己的云手机(redroid)镜像
前言 香橙派上跑云手机可以看之前的文章: 香橙派5plus上跑云手机方案一 redroid(带硬件加速)香橙派5plus上跑云手机方案二 waydroid 还有一个cuttlefish方案没说,后面再研究,cuttlefish的优势在于可以自定义内核且selinux是开启的…...

自动驾驶的规划控制简介
自动驾驶的规划控制是自动驾驶系统中的核心组成部分,它负责生成安全、合理且高效的行驶轨迹,并控制车辆按照这个轨迹行驶。规划控制分为几个层次,通常包括行为决策(Behavior Planning)、轨迹规划(Trajector…...

java配置nginx网络安全,防止国外ip访问,自动添加黑名单,需手动重新加载nginx
通过访问日志自动添加国外ip黑名单 创建一个类,自己添加一个main启动类即可测试 import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.json.JSONArray; import org.json.JSONObject; import org.sp…...

ARP协议
计算机网络资料下载:CSDN ARP协议 APR(address resolution protocol):地址解析协议,用于实现从IP地址到MAC地址的映射,即访问目标ip地址的mac地址。 网络层及以上采用的ip地址来标记网络接口,但是以太数据帧的传输,…...

Qt程序图标更改以及程序打包
Qt程序图标更改以及程序打包 1 windows1.1 cmake1.1.1 修改.exe程序图标1.1.2 修改显示页面左上角图标 1.2 qmake1.2.1 修改.exe程序图标1.2.2 修改显示页面左上角图标 2 程序打包2.1 MinGW2.2 Visual Studio 3 参考链接 QT6 6.7.2 1 windows 1.1 cmake 1.1.1 修改.exe程序图…...

普通人还有必要学习 Python 之类的编程语言吗?
在开始前分享一些编程的资料需要的同学评论888即可拿走 是我根据网友给的问题精心整理的对于编程的重要性,这里就不详谈了。 未来,我们和机器的交流会越来越多,编程可以简单看作是和机器对话并分发给机器任务。机器不仅越来越强大࿰…...

「Python」基于Gunicorn、Flask和Docker的高并发部署
目标预期 使用Gunicorn作为WSGI HTTP服务器,提供高效的Python应用服务。使用Flask作为轻量级Web应用框架,快速开发Web应用。利用Docker容器化技术,确保应用的可移植性和一致性。实现高并发处理,提高应用的响应速度和稳定性。过程 环境准备:安装Docker和Docker Compose。编…...

在攻防演练中遇到的一个“有马蜂的蜜罐”
在攻防演练中遇到的一个“有马蜂的蜜罐” 有趣的结论,请一路看到文章结尾 在前几天的攻防演练中,我跟队友的气氛氛围都很好,有说有笑,恐怕也是全场话最多、笑最多的队伍了。 也是因为我们遇到了许多相当有趣的事情,其…...

一文了解MySQL的表级锁
文章目录 ☃️概述☃️表级锁❄️❄️介绍❄️❄️表锁❄️❄️元数据锁❄️❄️意向锁⛷️⛷️⛷️ 介绍 ☃️概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外࿰…...

LVS+Keepalive高可用
1、keepalive 调度器的高可用 vip地址主备之间的切换,主在工作时,vip地址只在主上,vip漂移到备服务器。 在主备的优先级不变的情况下,主恢复工作,vip会飘回到住服务器 1、配优先级 2、配置vip和真实服务器 3、主…...

网络安全防御【防火墙安全策略用户认证综合实验】
目录 一、实验拓扑图 二、实验要求 三、实验思路 四、实验步骤 1、打开ensp防火墙的web服务(带内管理的工作模式) 2、在FW1的web网页中网络相关配置 3、交换机LSW6(总公司)的相关配置: 4、路由器相关接口配置&a…...

IOS上微信小程序密码框光标离开提示存储密码解决方案
问题: ios密码框输入密码光标离开之后会提示存储密码的弹窗 解决方案 1、在苹果手机上面把 “自动填充密码”关闭,但是苹果这个默认开启,而且大部分客户也不会去自己关闭。 2、欺骗苹果手机,代码实现。 先说解决思路…...

AWS CDN新增用户ip 地区 城市 响应头
1.需要自定义cdn缓存策略 这里的策略也是先复制之前的cdn策略哈 最后复制完了 全部新增这两条标头key CloudFront-Viewer-Country CloudFront-Viewer-City 2.然后新增cdn函数,应用你写的这个函数 function handler(event) {var request event.request;var respon…...

Elasticsearch基础概念
Elasticsearch 是一款开源的,ESTful风格的 分布式搜索、存储、分析引擎; 常见的使用场景 网站搜索,代码搜索等日志管理与分析,应用系统性能分析,安全指标监控等数据库同步,将数据库某个表的数据同步到elasticsearch上然后提供搜索服务 ES基本概念 文档 我们向elasticsearch存…...

Redis 7.x 系列【24】哨兵模式配置项
有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 配置项2.1 protected-mode2.2 port2.3 daemonize2.4 pidfile2.5 loglevel2.…...

SpringBoot+Vue实现简单的文件上传(策略模式)
SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1,Vue 2,ElementUI 2 问题 前两篇文章,我们上传了txt、Excel文件,其实文件类型有很多种,如果我们的upload组件没有上传文件类型的限制,那么同一个…...

软考中级科目包含哪些?应该考哪个?
软考中级包含5个专业方向,分别是:计算机软件、计算机网络、计算机应用技术、信息系统、信息服务。这5个方向又对应15个软考中级科目。 信息系统包括:系统集成项目管理工程师、信息系统监理师、信息安全工程师、数据库系统工程师、信息系统管…...

ArcGIS Enterprise 命令行组件创建配置
1. 创建ArcGIS Server站点 使用 createsite工具 命令行直接执行 createsite.sh [-u <arg>] [-p <arg>] [-d <arg>] [-c <arg>]执行文件 createsite.sh [-f <FILE>]安装目录下会有类似的创建站点文件: 修改其中的内容,…...

Web组成架构
网站源码:分脚本类型,分应用方向操作系统:windows,linux中间件(搭建平台):apche、IIS、tomcat、nginx等数据库:mssql、oracle、sybase、db2、access等 WEB相关安全漏洞 WEB源码类对…...

「Pytorch」roLabelImg 图像异常旋转 bug
在进行Yolo-obb 模型训练的时候需要标注旋转框,roLabelImg 是比较推荐的一款旋转框标注工具,既可以标注正常的矩形框,还可以标注旋转框 roLabelImg Github 地址:https://github.com/HumanSignal/labelImg 但是在使用过程中遇到了…...

java.sql.SQLException: Unknown system variable ‘query_cache_size‘【Pyspark】
1、问题描述 学习SparkSql中,将spark中dataframe数据结构保存为jdbc的格式并提交到本地的mysql中,相关代码见文章末尾。 运行代码时报出相关配置文件错误,如下。 根据该报错,发现网络上多数解决方都是基于java开发的解决方案&a…...

汽车连接器革新!中国星坤产品在汽车安全与效率中的卓越表现!
随着汽车行业的快速发展,车载电子系统的复杂性不断增加,对连接器的性能要求也越来越高。中国星坤推出的汽车连接器,以其卓越的设计和性能,为汽车行业带来了一场技术革新。这些连接器不仅能够适应极端的工作环境,还确保…...

DHCP服务、FTP服务
一、DHCP 1.1 DHCP是什么 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…...

AWS云计算实战:电商平台发卡机器人开发指南
在当今数字化时代,电商平台的自动化运营变得尤为重要。本文将深入探讨如何利用AWS云计算平台开发一款高效的发卡机器人,旨在提高电商平台的自动化水平和用户体验。 关键词 AWS云计算, 电商平台, 发卡机器人 1. 引言 随着电商行业的蓬勃发展ÿ…...

虚拟机及其Debian(kali)安装
本机电脑为Windows10系统专业版,在此基础上安装VMware和系统(Kali) 步骤如下 一、安装 VMware Workstation Pro v16.2.4 安装步骤可参照网上博客,该步骤较简单,此处不做讲解。文件中共计两个,其中一个是激活…...

Linux部署禅道(无脑复制版)
目录 环境部署1、下载,解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接: https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …...