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 构建强大且可扩展的分布式应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38431.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Geeker-Admin:现代化的开源后台管理框架

Geeker-Admin:优雅管理,高效开发,尽在Geeker-Admin- 精选真开源,释放新价值。 概览 Geeker-Admin是一个基于Vue 3.4、TypeScript、Vite 5、Pinia和Element-Plus构建的开源后台管理框架。它为开发者提供了一套现代化、响应式的管理…

vue3的配置和使用

vue的使用需要配置node且node版本需要在15以上。管理员方式打开cmd,输入node -v,可以查看node版本。 创建vue有以下两种方式 npm init vuelatestnpm create vuelatest创建后输入项目名,其它的输入否即可,新手可以先不用 按照要求…

【信息系统项目管理师知识点速记】组织通用治理:转型升级

22.3转型升级 当组织面临社会经济发展环境不断变化、社会竞争日趋激烈、客户和服务对象需求日益个性化、发展空间和发展动能被不断挤压等挑战时,积极主动开展深层次的转型升级是组织可持续发展的关键,适时地进行组织优化调整升级是组织谋求健康发展的迫切要求和必然路径。 …

WebKit 简介及工作流程深度解析

WebKit 是一个开源的浏览器引擎,最初由苹果公司为 Safari 浏览器开发,后来被多个浏览器和应用采纳,如早期的 Chrome 和众多移动平台上的浏览器。WebKit 不仅仅是一个渲染引擎,它集成了 HTML、CSS、JavaScript 的解析与渲染能力&am…

代理ip的种类及区别

HTTP 代理ip HTTP 代理ip是最常见的代理ip类型,它们使用与大多数网站非常兼容的 HTTP 协议。HTTP 代理ip在很大程度上已被淘汰,因为 HTTP 发送的数据未加密。这使得黑客或怀有恶意的用户很容易窃取您的所有数据。 即使有很大的缺点,您仍然可…

安全与加密常识(4)证书签名请求(CSR)

文章目录 什么是CSRCSR的作用如何生成CSR什么是CSR 证书签名请求(Certificate Signing Request,简称CSR)是一个由申请证书的实体(如公司或个人)生成的文件,其中包含申请者的公钥和身份信息(如组织名称、通用名、地点等)。CSR主要用于在数字证书认证过程中向证书颁发机…

解决git无法管理idea后端项目文件

看看后端项目中有没有.iml后缀的文件,把它删掉,然后重新加载maven

【01最短路 BFS】1368. 使网格图至少有一条有效路径的最小代价

如果有不明白的,请加文末QQ群。 本文涉及知识点 01最短路 CBFS算法 图论知识汇总 LeetCode 1368. 使网格图至少有一条有效路径的最小代价 给你一个 m x n 的网格图 grid 。 grid 中每个格子都有一个数字,对应着从该格子出发下一步走的方向。 grid[i]…

【redis】redis分片集群基础知识

1、基本概念 1.1定义 分片:数据按照某种规则(比如哈希)被分割成多个片段(或分片),每个片段被称为一个槽(slot)。槽是Redis分片集群中数据的基本单元。节点:Redis分片集…

DRAM vs. SRAM:了解动静态随机存取存储器的区别

在计算机领域,DRAM(动态随机存取存储器)和SRAM(静态随机存取存储器)是两种重要的存储器类型。它们在结构、工作原理、性能和应用上都有显著的不同。本文将详细介绍这两种存储器,帮助基础小白理解它们的区别…

LLama-Factory使用教程

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

利用谷歌云serverless代码托管服务Cloud Functions构建Gemini Pro API

谷歌在2024年4月发布了全新一代的多模态模型Gemini 1.5 Pro,Gemini 1.5 Pro不仅能够生成创意文本和代码,还能理解、总结上传的图片、视频和音频内容,并且支持高达100万tokens的上下文。在多个基准测试中表现优异,性能超越了ChatGP…

LeetCode 每日一题 2024/6/24-2024/6/30

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 6/24 503. 下一个更大元素 II6/25 2732. 找到矩阵中的好子集6/26 2741. 特别的排列6/27 2734. 执行子串操作后的字典序最小字符串6/28 2742. 给墙壁刷油漆6/29 2710. 移除字…

【机器学习】Python sorted 函数

目录: 什么是sorted()函数列表降序排序应用到字符串自定义排序规则实际应用 Python中的内置函数——sorted()。 1. 什么是sorted()函数 在Python中,sorted()是一个内置函数,用于对任何可迭代对象(如列表、元组、字符串等&…

macos scroll direction

If there is no Trackpad option, we can change it in the Mouse option. How to Change the Scroll Direction on a Mac: 2 Ways

AliyunOS安装Node.js

方法1:dnf软件包安装工具自动安装 最方便的安装方式是通过系统的dnf工具,我测试使用的AliyunOS的版本是Alibaba Cloud Linux 3.2104,具体流程如下: dnf module list nodejs #列出服务器中可以使用的所有nodejs版本确定下来希望安…

【折腾手机】一加6T刷机postmarketOS经历和体验

写在前面 到目前为止,我已经花了非常多的时间去学习和了解x86架构和RISC-V架构,对它们的指令集编程、指令格式的设计、编译套件的使用都亲自去体会和实践过,学到了很多的东西。但是对于离我们最近的arm架构却了解甚少。为什么说离我们最近呢…

2095.删除链表的中间节点

给你一个链表的头节点 head 。删除链表的中间节点 ,并返回修改后的链表的头节点 head。 长度为 n 链表的中间节点是从头数起第 ⌊n / 2⌋ 个节点(下标从 0 开始),其中 ⌊x⌋ 表示小于或等于 x 的最大整数。 对于 n 1、2、3、4 和…

网络==>总论v4

既然是写ICT方面的文章,就要不断更新版本,不是文学,可以一劳永逸,如果不更新,看十年前或者二十年前的书意义不大,这就是为啥看到很多编程书都更新到第十几版了,因为要与时俱进。 在去一个地方旅…

51单片机第21步_将TIM0用作两个8位定时器同时将TIM1用作波特率发生器

本章重点讲解将TIM0用作两个8位定时器,同时将TIM1用作波特率发生器。 当定时器T0在方式3时,T1不能产生中断,但可以正常工作在方式0、1、2下,大多数情况下,T1将用作串口的波特率发生器。 1、定时器0工作在模式3框图&a…