Zookeeper 核心原理详解以及快速搭建

server/2025/3/25 23:22:44/
一、引言

Zookeeper 是 Apache 开源的分布式协调服务,专为分布式系统提供一致性、高可用性和容错能力。其核心设计目标是通过简单的接口(如文件系统目录树结构)实现复杂的分布式一致性协议,帮助开发者解决分布式环境下的协调难题,如配置管理、分布式锁、服务注册与发现等。

二、架构与数据模型
  1. 集群架构

    • 角色分工
      • Leader:负责处理事务请求(写操作),通过 ZAB 协议同步数据。
      • Follower:处理读请求,参与 Leader 选举和事务提交投票。
      • Observer:扩展读能力,不参与投票,降低集群压力。
    • 通信机制:节点间通过心跳(PING)检测存活状态,使用原子广播协议同步数据。
  2. 数据模型:ZNode

    • 树形结构:类似文件系统,每个节点(ZNode)存储数据和 ACL 权限。
    • 节点类型
      • 持久节点(Persistent):手动删除。
      • 临时节点(Ephemeral):会话结束自动删除。
      • 顺序节点(Sequential):名称自动追加全局递增序号。
    • 版本控制:每个 ZNode 维护版本号(dataVersion),确保写入操作的原子性。
三、核心原理:ZAB 协议

Zookeeper 使用 ZAB(Zookeeper Atomic Broadcast)协议 保证数据一致性,分为两个阶段:

  1. 崩溃恢复模式

    • Leader 选举:集群启动或 Leader 宕机时,进入选举阶段。节点根据 ZXID(事务ID,高位为 epoch 周期,低位为计数器)和 myid 投票,遵循“数据最新者优先”原则,快速选出新 Leader。
    • 数据同步:新 Leader 将自身数据状态同步至所有 Follower,确保集群数据一致。
  2. 消息广播模式

    • 两阶段提交
      1. Leader 生成事务提案(Proposal)并分配 ZXID,广播给所有 Follower。
      2. Follower 写入日志并反馈 ACK,收到半数以上 ACK 后,Leader 发送 Commit 命令提交事务。
    • 严格顺序性:所有事务按 ZXID 顺序处理,保证全局有序。
四、一致性保证
  • 顺序一致性:客户端的请求按发送顺序执行。
  • 原子性:事务在所有节点上成功或失败。
  • 最终一致性:客户端总能读取最新数据(通过 Sync 操作强制同步)。
五、会话(Session)机制
  • 会话生命周期:客户端通过 TCP 长连接与服务器通信,会话超时(Session Timeout)内无心跳则会话失效,临时节点被删除。
  • 重连机制:客户端自动重连至其他服务器,会话保持有效。
六、Watch 监听机制
  • 事件驱动:客户端可对 ZNode 设置 Watch,监听节点创建、删除、数据变更等事件。
  • 一次性触发:Watch 触发后需重新注册,避免重复通知。
  • 轻量级设计:服务端仅存储事件类型和节点路径,不记录客户端状态。
七、典型应用场景
  1. 配置管理:将配置存储在持久节点,客户端监听节点变化,实现动态配置更新。
  2. 分布式
    • 排他锁:通过创建临时节点实现,成功创建者获得锁。
    • 读写锁:利用顺序节点和临时节点组合实现。
  3. 服务注册与发现:服务提供者创建临时节点,服务消费者监听节点列表变化。
  4. 选主(Leader Election):多个节点创建临时顺序节点,序号最小者成为 Leader。
八、最佳实践与局限性
  • 最佳实践
    • 避免存储大文件(ZNode 数据上限通常为 1MB)。
    • 合理设置会话超时时间(默认 2*TickTime)。
    • 使用 Observer 节点扩展读性能。
  • 局限性
    • 大规模节点(如上万)可能导致 Watch 通知延迟。
    • 写性能受 Leader 单点限制,可通过分片(Sharding)缓解。
九、总结

Zookeeper 通过 ZAB 协议、ZNode 数据模型和 Watch 机制,为分布式系统提供高效可靠的协调服务。理解其原理有助于在微服务、大数据等场景中合理设计系统架构,规避分布式环境下的常见问题。随着云原生技术的发展,Zookeeper 仍是在一致性要求严格的场景下的重要基础设施。

标题快速搭建Zookeeper


步骤一:下载文件压缩包
首先,下载所需的文件压缩包(如 ZooKeeper 的安装包)。
下载地址

https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz

在这里插入图片描述
步骤二:解压文件
将下载的压缩包解压到当前工作目录。

在这里插入图片描述

步骤三:创建所需目录
在解压后的 bin 目录下,新建两个文件夹:data 和 log。

在这里插入图片描述

步骤四:复制并编辑配置文件
进入 conf 目录,复制 zoo_sample.cfg 文件,并将副本重命名为 zoo.cfg,然后编辑该配置文件。
在这里插入图片描述

将原来的dataDir注释 ,将刚刚创建的两个文件目录编辑为下图所示

要注意一个是dataDir 一个是dataLogDir

下面可以配置端口号,建议不要更改

在这里插入图片描述

步骤五:启动 ZooKeeper 服务
进入 bin 目录并启动 ZooKeeper 服务

先启动server再启动Cli

在这里插入图片描述

若是cli出现 Welcome to Zookeeper则代表启动成功

在这里插入图片描述


http://www.ppmy.cn/server/179087.html

相关文章

3. 轴指令(omron 机器自动化控制器)——>MC_CamIn

机器自动化控制器——第三章 轴指令 14 MC_CamIn变量▶输入变量▶输出变量▶输入输出变量 功能说明▶指令详情▶时序图▶指令的中止▶重启运动指令▶多重启动运动指令▶异常 示例程序1▶参数设定▶动作示例▶梯形图▶结构文本(ST)▶示例程序2▶参数设定▶动作示例▶梯形图▶结构…

机器学习-04-分类算法-02贝叶斯算法案例

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与贝叶斯算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

Milvus vs. ElasticSearch:向量库检索性能测试

目录 1. 构建检索库2. 测试条件3. 测试结果4. 性能分析5. 结论 1. 构建检索库 构建通用场景库总计约2万张。构建车辆数据库总计约12万张。构建公共数据库,包括Flickr30k、COCO、nlvr2、vqa等数据集约43万张。 2. 测试条件 环境说明:分别单机部署Milvu…

基于Spring Boot的可信捐赠系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

关于CNN,RNN,GAN,GNN,DQN,Transformer,LSTM,DBN你了解多少

以下是神经网络中常见的几种模型的简要介绍: 1. ​CNN (Convolutional Neural Network, 卷积神经网络) ​用途: 主要用于图像处理和计算机视觉任务。​特点: 通过卷积核提取局部特征,具有平移不变性,能够有效处理高维数据(如图像…

D-Link 登录信息泄露(越权)CVE-2018-7034 漏洞分析

D-Link 登录信息泄露(越权)CVE-2018-7034 漏洞分析 Description TRENDnet TEW-751DR v1.03B03, TEW-752DRU v1.03B01, and TEW733GR v1.03B01 devices allow authentication bypass via an AUTHORIZED_GROUP1 value, as demonstrated by a request for…

git管理时keil项目忽略文件列表

在使用 Git 管理 Keil MDK(μVision 5)工程时,需要忽略编译生成的临时文件、调试文件、用户配置等非必要内容。以下是忽略文件的详细列表及说明,可直接保存为 .gitignore 文件: Keil MDK 工程的 .gitignore 文件 giti…

Linux第九讲:动静态库

Linux第九讲:动静态库 1.静态库的制作 && 什么是库1.1静态库生成 2.动态库2.1动态库生成2.2静态链接和动态链接的区别2.3解决策略2.3.1将我们写的动态库拷贝至系统2.3.2建立软链接2.3.3LD_LIBRARY_PATH2.3.4ldconfig方案:配置/etc/ld.so.conf.d/…