ZooKeeper 入门:初学者指南
在分布式系统领域,协调和同步至关重要。Apache ZooKeeper 是一种分布式协调服务,是帮助管理和同步分布式环境中服务的基本组件。本指南旨在深入分析 ZooKeeper、其架构及其在现代分布式系统中的作用。我们还将探索一个示例来展示其实际影响。
ZooKeeper 简介
ZooKeeper 是 Apache 软件基金会开发的一个开源项目。它旨在提供用于维护配置信息、命名、提供分布式同步和提供组服务的集中服务。ZooKeeper 的目标是使这些任务可靠且易于实现。
主要特征
- 协调服务:ZooKeeper 提供了一组原语来实现更高级别的同步服务,例如分布式锁、领导者选举和障碍。
- 高可用性:ZooKeeper 设计为高可用性和可靠性,确保其提供的服务始终可用。
- 最终一致性:ZooKeeper 通过在服务器仲裁中复制数据来实现最终一致性,这确保即使某些服务器出现故障,数据仍然可访问。
- 原子性:ZooKeeper 中的所有操作都是原子的,确保它们要么成功完成,要么根本不产生任何影响。
- 顺序保证:ZooKeeper 保证数据更新按顺序排序,确保所有客户端的数据视图一致。
ZooKeeper 架构
ZooKeeper 在集群中运行,集群通常由多台服务器组成。该架构基于复制服务模型,集群中的每台服务器都维护整个系统状态的副本。ZooKeeper 架构的关键组件包括:
- Leader:Leader 服务器负责处理所有来自客户端的写入请求,确保所有状态变更都一致地复制到 Follower 服务器。
- 追随者:追随者服务器从领导者那里复制状态。该进程读取来自客户端的请求并参与领导者选举过程。
- 客户端:客户端是与 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中设置端口,可以通过SQL Server Configuration Manager来完成。以下是详细的步骤: 1. 打开SQL Server Configuration Manager 在Windows中,按 Win R 键打开运行窗口。输入 SQLServerManager<version>.msc 并按回车。例…...
华芯微特2024慕尼黑上海电子展预告
7月8日-7月10日,2024慕尼黑上海电子展在上海新国际博览中心举办。华芯微特展号:E4.4815,诚意邀请各位莅临参观。 公司介绍 华芯微特是一家由留美归国资深技术团队创立的中国芯片设计公司,是国家高新技术企业。2014年进军MCU产业,专…...
DETR End-to-End Object Detection with Transformers
End-to-End Object Detection with Transformers 论文链接:http://arxiv.org/abs/2005.12872 代码地址:https://github.com/facebookresearch/detr 一、摘要 提出了一种将目标检测视为直接集合预测问题的新方法。该方法简化了检测流程,有效…...
【后端面试题】【中间件】【NoSQL】ElasticSearch 节点角色、写入数据过程、Translog和索引与分片
中间件的常考方向: 中间件如何做到高可用和高性能的? 你在实践中怎么做的高可用和高性能的? Elasticsearch节点角色 Elasticsearch的节点可以分为很多种角色,并且一个节点可以扮演多种角色,下面列举几种主要的&…...
【TB作品】玩具电子琴,ATMEGA128单片机,Proteus仿真
题目 7 :玩具电子琴 基于单片机设计一能够发出中音八个音阶的音乐信号的电子琴,能够实现弹奏和音符显示功 能。 具有 8 个音阶按键,每按下一个按键时,所对应的 LED 点亮,音符进行显示。 具体要求如下: &…...
1974Springboot医院远程诊断管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目
一、源码特点 springboot医院远程诊断管理系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库…...
SQL游标的应用场景及使用方法
SQL游标的应用场景及使用方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨SQL中游标的应用场景及使用方法。游标在SQL中是一种重要的数据…...
LLama-Factory使用教程
本文是github项目llama-factory的使用教程 注意,最新的llama-factory的github中训练模型中,涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观,本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …...
Java面试题:讨论在Java Web应用中实现安全的认证和授权机制,如使用Spring Security
在Java Web应用中,实现安全的认证和授权是至关重要的,Spring Security是一个强大的框架,可以简化这项工作。以下是详细讨论如何在Java Web应用中使用Spring Security实现安全的认证和授权机制。 Spring Security简介 Spring Security是一个…...
如何在Vue3项目中使用Pinia进行状态管理
**第一步:安装Pinia依赖** 要在Vue3项目中使用Pinia进行状态管理,首先需要安装Pinia依赖。可以使用以下npm命令进行安装: bash npm install pinia 或者如果你使用的是yarn,可以使用以下命令: bash yarn add pinia *…...
【初阶数据结构】深入解析队列:探索底层逻辑
🔥引言 本篇将深入解析队列:探索底层逻辑,理解底层是如何实现并了解该接口实现的优缺点,以便于我们在编写程序灵活地使用该数据结构。 🌈个人主页:是店小二呀 🌈C语言笔记专栏: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 失败的话可能是网络问题,可以试一下是否能ping通,连…...
C语言--vs使用调试技巧
1.什么是bug? 1.产品说明书中规定要做的事情,而软件没有实现。 2.产品说明书中规定不要做的事情,而软件确实现了。 3.产品说明书中没有提到过的事情,而软件确实现了。 4.产品说明书中没有提到但是必须要做的事情,软件确没有实…...
Spring Boot中的国际化配置
Spring Boot中的国际化配置 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中实现国际化配置,使得应用能够轻松…...
WPF的IValueConverter用于校验和格式化TextBox的数字输入
在数据绑定(Data Binding)的上下文中,我们经常使用继承 IValueConverter 接口的类,用于在源值和目标值之间进行转换。该接口定义了两个方法:Convert 和 ConvertBack,这两个方法分别用于从源值到目标值的转换…...
SQL Server的守护神:Always On 高可用性详解
🛡️ SQL Server的守护神:Always On 高可用性详解 在企业级应用中,数据的可用性和业务连续性至关重要。SQL Server的Always On功能提供了一个高可用性解决方案,确保数据库服务的持续运行和快速故障恢复。本文将详细解释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 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?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文件夹,并新增内容 3.创建package文件夹...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
