当前位置: 首页 > news >正文

ZooKeeper 入门:初学者指南

在分布式系统领域,协调和同步至关重要。Apache ZooKeeper 是一种分布式协调服务,是帮助管理和同步分布式环境中服务的基本组件。本指南旨在深入分析 ZooKeeper、其架构及其在现代分布式系统中的作用。我们还将探索一个示例来展示其实际影响。

ZooKeeper 简介

ZooKeeper 是 Apache 软件基金会开发的一个开源项目。它旨在提供用于维护配置信息、命名、提供分布式同步和提供组服务的集中服务。ZooKeeper 的目标是使这些任务可靠且易于实现。

主要特征

  1. 协调服务:ZooKeeper 提供了一组原语来实现更高级别的同步服务,例如分布式锁、领导者选举和障碍。
  2. 高可用性:ZooKeeper 设计为高可用性和可靠性,确保其提供的服务始终可用。
  3. 最终一致性:ZooKeeper 通过在服务器仲裁中复制数据来实现最终一致性,这确保即使某些服务器出现故障,数据仍然可访问。
  4. 原子性:ZooKeeper 中的所有操作都是原子的,确保它们要么成功完成,要么根本不产生任何影响。
  5. 顺序保证:ZooKeeper 保证数据更新按顺序排序,确保所有客户端的数据视图一致。

ZooKeeper 架构

ZooKeeper 在集群中运行,集群通常由多台服务器组成。该架构基于复制服务模型,集群中的每台服务器都维护整个系统状态的副本。ZooKeeper 架构的关键组件包括:

  1. Leader:Leader 服务器负责处理所有来自客户端的写入请求,确保所有状态变更都一致地复制到 Follower 服务器。
  2. 追随者:追随者服务器从领导者那里复制状态。该进程读取来自客户端的请求并参与领导者选举过程。
  3. 客户端:客户端是与 ZooKeeper 集合交互以执行各种协调任务的应用程序或服务。

领导者选举

领导者选举是 ZooKeeper 架构的一个重要方面。当领导者发生故障时,跟随服务器将参与选举过程以选出新的领导者。这可确保即使领导者服务器发生故障,系统仍可正常运行。

数据模型

ZooKeeper 的数据模型类似于分层文件系统。它将数据存储在称为“znodes”树的树状结构中。树中的每个节点称为 znode,它可以存储数据并具有子 znode。znode 有两种类型:

持久性 Znode:这些 znode 一直存在,直到被明确删除。
临时 Znode:这些 znode 仅在创建它们的会话处于活动状态时存在。

安装和配置 ZooKeeper

设置 ZooKeeper 涉及以下步骤:

步骤 1.下载 ZooKeeper

从Apache ZooKeeper 网站下载 ZooKeeper 的最新稳定版本。

步骤 2.安装 ZooKeeper

解压下载的档案并导航到解压的目录。目录结构应包括以下内容:

  • bin:包含启动和停止ZooKeeper的可执行脚本。
  • conf:包含配置文件。
  • lib:包含所需的库。

步骤 3.配置 ZooKeeper

zoo.cfg在目录中创建一个名为的配置文件conf。以下是示例配置:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181
initLimit=10
syncLimit=5
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
  • tickTime:ZooKeeper使用的基本时间单位,以毫秒为单位。
  • dataDir:ZooKeeper 存储其数据的目录。
  • clientPort:ZooKeeper 将监听客户端连接的端口。
  • initLimit:允许追随者与领导者连接并同步的时间(以刻度为单位)。
  • syncLimit:允许追随者与领导者同步的时间(以刻度为单位)。
  • server.X:ZooKeeper 集合中的服务器列表。

步骤 4.启动 ZooKeeper

使用以下命令启动 ZooKeeper 服务器:

bin/zkServer.sh start

要检查 ZooKeeper 服务器的状态,请使用:

bin/zkServer.sh status

使用 ZooKeeper

一旦 ZooKeeper 启动并运行,客户端就可以连接到 ZooKeeper 集合并执行各种操作。

创建一个Znode

要创建 znode,请使用zkCli.sh命令行界面连接到 ZooKeeper 服务器:

bin/zkCli.sh -server localhost:2181

使用以下命令创建 znode create:

create /myapp "Hello ZooKeeper"

此命令创建一个名为/myapp“Hello ZooKeeper”的znode。

从 Znode 读取数据

要从 znode 读取数据,请使用以下get命令:

get /myapp

此命令检索存储在 znode 中的数据/myapp。

更新 Znode 中的数据

要更新 znode 中的数据,请使用以下set命令:

set /myapp "Updated Data"

此命令将znode中的数据更新/myapp为“已更新的数据”。

删除 Znode

要删除 znode,请使用以下delete命令:

delete /myapp

此命令删除/myappznode。

示例,实现分布式锁

ZooKeeper 的一个常见用例是实现分布式锁。分布式锁用于确保多个进程不会同时执行同一任务。

步骤 1. 创建锁定 Znode

创建一个将用作锁的 znode:

create /lock ""

步骤 2. 获取锁

为了获取锁,客户端在/lockznode 下创建一个临时顺序 znode:

create -e -s /lock/lock_ ""

此命令在 下创建一个临时顺序 znode /lock,例如/lock/lock_0000000001。

步骤 3. 检查锁所有权

然后,客户端检查它创建的 znode 是否在所有 znode 下具有最低的序列号/lock。如果是,则客户端已获取锁定。否则,客户端将监视具有下一个最低序列号的 znode。

步骤 4. 释放锁

当客户端完成其任务时,它会删除其创建的 znode,并释放锁:

delete /lock/lock_0000000001

实际影响

使用 ZooKeeper 实现分布式锁可确保只有一个进程可以在任何给定时间获取锁,从而防止竞争条件并确保数据一致性。此机制在分布式应用程序中特别有用,因为服务的多个实例可能会同时尝试访问共享资源。

结论

Apache ZooKeeper 是一种功能强大且可靠的分布式应用程序协调服务。其架构基于复制服务模型,可确保高可用性和一致性。通过提供分布式同步、配置管理和组服务原语,ZooKeeper 简化了分布式系统中复杂协调任务的实施。

本指南介绍了 ZooKeeper 的基础知识,从其架构和安装到实际使用示例。有了这个基础,您可以开始利用 ZooKeeper 构建强大且可扩展的分布式应用程序。

相关文章:

ZooKeeper 入门:初学者指南

在分布式系统领域,协调和同步至关重要。Apache ZooKeeper 是一种分布式协调服务,是帮助管理和同步分布式环境中服务的基本组件。本指南旨在深入分析 ZooKeeper、其架构及其在现代分布式系统中的作用。我们还将探索一个示例来展示其实际影响。 ZooKeeper…...

【数据结构(邓俊辉)学习笔记】二叉搜索树04——AVL树

文章目录 1.重平衡1.1 AVL BBST1.2 平衡因子1.3 适度平衡1.4 接口1.5 失衡 复衡 2. 插入2.1 单旋2.2 双旋2.3 实现 3. 删除3.1 单旋3.2 双旋3.3 实现 4. (3 4)-重构4.1 "34"重构4.2 "34"实现4.3 rotateAt4.4 综合评价 1.重平衡 1…...

SpringMVC基础详解

文章目录 一、SpringMVC简介1、什么是MVC2、MVC架构模式与三层模型的区别3、什么是SpringMVC 二、HelloWorld程序1、pom文件2、springmvc.xml3、配置web.xml文件4、html文件5、执行Controller 三、RequestMapping注解1、value属性1.1、基础使用1.2、Ant风格(模糊匹配…...

SQL SERVER 设置端口

要在SQL Server中设置端口&#xff0c;可以通过SQL Server Configuration Manager来完成。以下是详细的步骤&#xff1a; 1. 打开SQL Server Configuration Manager 在Windows中&#xff0c;按 Win R 键打开运行窗口。输入 SQLServerManager<version>.msc 并按回车。例…...

华芯微特2024慕尼黑上海电子展预告

7月8日-7月10日&#xff0c;2024慕尼黑上海电子展在上海新国际博览中心举办。华芯微特展号:E4.4815&#xff0c;诚意邀请各位莅临参观。 公司介绍 华芯微特是一家由留美归国资深技术团队创立的中国芯片设计公司&#xff0c;是国家高新技术企业。2014年进军MCU产业&#xff0c;专…...

DETR End-to-End Object Detection with Transformers

End-to-End Object Detection with Transformers 论文链接&#xff1a;http://arxiv.org/abs/2005.12872 代码地址&#xff1a;https://github.com/facebookresearch/detr 一、摘要 提出了一种将目标检测视为直接集合预测问题的新方法。该方法简化了检测流程&#xff0c;有效…...

【后端面试题】【中间件】【NoSQL】ElasticSearch 节点角色、写入数据过程、Translog和索引与分片

中间件的常考方向&#xff1a; 中间件如何做到高可用和高性能的&#xff1f; 你在实践中怎么做的高可用和高性能的&#xff1f; Elasticsearch节点角色 Elasticsearch的节点可以分为很多种角色&#xff0c;并且一个节点可以扮演多种角色&#xff0c;下面列举几种主要的&…...

【TB作品】玩具电子琴,ATMEGA128单片机,Proteus仿真

题目 7 &#xff1a;玩具电子琴 基于单片机设计一能够发出中音八个音阶的音乐信号的电子琴&#xff0c;能够实现弹奏和音符显示功 能。 具有 8 个音阶按键&#xff0c;每按下一个按键时&#xff0c;所对应的 LED 点亮&#xff0c;音符进行显示。 具体要求如下&#xff1a; &…...

1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库…...

SQL游标的应用场景及使用方法

SQL游标的应用场景及使用方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨SQL中游标的应用场景及使用方法。游标在SQL中是一种重要的数据…...

LLama-Factory使用教程

本文是github项目llama-factory的使用教程 注意&#xff0c;最新的llama-factory的github中训练模型中&#xff0c;涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观&#xff0c;本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …...

Java面试题:讨论在Java Web应用中实现安全的认证和授权机制,如使用Spring Security

在Java Web应用中&#xff0c;实现安全的认证和授权是至关重要的&#xff0c;Spring Security是一个强大的框架&#xff0c;可以简化这项工作。以下是详细讨论如何在Java Web应用中使用Spring Security实现安全的认证和授权机制。 Spring Security简介 Spring Security是一个…...

如何在Vue3项目中使用Pinia进行状态管理

**第一步&#xff1a;安装Pinia依赖** 要在Vue3项目中使用Pinia进行状态管理&#xff0c;首先需要安装Pinia依赖。可以使用以下npm命令进行安装&#xff1a; bash npm install pinia 或者如果你使用的是yarn&#xff0c;可以使用以下命令&#xff1a; bash yarn add pinia *…...

【初阶数据结构】深入解析队列:探索底层逻辑

&#x1f525;引言 本篇将深入解析队列:探索底层逻辑&#xff0c;理解底层是如何实现并了解该接口实现的优缺点&#xff0c;以便于我们在编写程序灵活地使用该数据结构。 &#x1f308;个人主页&#xff1a;是店小二呀 &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#…...

Go 语言环境搭建

本篇文章为Go语言环境搭建及下载编译器后配置Git终端方法。 目录 安装GO语言SDK Window环境安装 下载 安装测试 安装编辑器 下载编译器 设置git终端方法 总结 安装GO语言SDK Window环境安装 网站 Go下载 - Go语言中文网 - Golang中文社区 还有 All releases - The…...

javascript v8编译器的使用记录

我的机器是MacOS Mx系列。 一、v8源码下载构建 1.1 下载并更新depot_tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH/path/to/depot_tools:$PATH 失败的话可能是网络问题&#xff0c;可以试一下是否能ping通&#xff0c;连…...

C语言--vs使用调试技巧

1.什么是bug? 1.产品说明书中规定要做的事情&#xff0c;而软件没有实现。 2.产品说明书中规定不要做的事情&#xff0c;而软件确实现了。 3.产品说明书中没有提到过的事情&#xff0c;而软件确实现了。 4.产品说明书中没有提到但是必须要做的事情&#xff0c;软件确没有实…...

Spring Boot中的国际化配置

Spring Boot中的国际化配置 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中实现国际化配置&#xff0c;使得应用能够轻松…...

WPF的IValueConverter用于校验和格式化TextBox的数字输入

在数据绑定&#xff08;Data Binding&#xff09;的上下文中&#xff0c;我们经常使用继承 IValueConverter 接口的类&#xff0c;用于在源值和目标值之间进行转换。该接口定义了两个方法&#xff1a;Convert 和 ConvertBack&#xff0c;这两个方法分别用于从源值到目标值的转换…...

SQL Server的守护神:Always On 高可用性详解

&#x1f6e1;️ SQL Server的守护神&#xff1a;Always On 高可用性详解 在企业级应用中&#xff0c;数据的可用性和业务连续性至关重要。SQL Server的Always On功能提供了一个高可用性解决方案&#xff0c;确保数据库服务的持续运行和快速故障恢复。本文将详细解释SQL Serve…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...