Apache ZooKeeper - ZK的基本特性与节点&应用场景一览

本文详细介绍了Zookeeper的背景、安装、配置、核心概念(文件系统数据结构与监听通知机制),并重点展示了其在分布式应用中的关键应用场景,如配置中心、注册中心和分布式锁等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


概述

说点正确的废话

zookeeper是一个分布式协调框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。

在这里插入图片描述

ZK由JAVA编写,支持JAVA 和C两种语言的客户端。


ZK产生的背景

通常情况下,单个物理节点很容易达到性能,计算或者容量的瓶颈,所以这个时候就需要多个物理节点来共同完成某项任务,一个分布式系统的本质是分布在不同网络或计算机上的程序组件,彼此通过信息传递来协同工作的系统,而Zookeeper正是一个分布式应用协调框架,在分布式系统架构中有广泛的应用场景。

项目从单体到分布式转变之后,将会产生多个节点之间协同的问题

  1. 每天的定时任务由谁哪个节点来执行
  2. RPC调用时的服务发现
  3. 如何保证并发请求的幂等

这些问题可以统一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能上也不可取。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。


安装

JDK依赖

Java编写,依赖JDK, JDK Version >=8


下载

官网下载: https://zookeeper.apache.org/releases.html#download

当然了,国内也有镜像可以下载,比如

3.5.8 版本

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.5.8/apache-zookeeper-3.5.8-bin.tar.gz

3.6.2 版本

[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz

这里我们选用3.5.8的版本


解压

[root@localhost ~]# tar -xvzf apache-zookeeper-3.5.8-bin.tar.gz 


修改配置文件

cd  {zookeeper_home}/conf   # 按实际路径调整
cp zoo_sample.cfg zoo.cfg  


启动 / 停止

 {zookeeper_home}/bin/zkServer.sh  # 按实际路径调整,查看启动支持哪些参数


[root@localhost bin]# ./zkServer.sh 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Usage: ./zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|restart|status|print-cmd}
[root@localhost bin]# 

启动,采用默认的配置文件

[root@localhost bin]# ./zkServer.sh start 
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# 

停止

[root@localhost bin]# ./zkServer.sh stop
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /root/apache-zookeeper-3.5.8-bin/bin/../conf/zoo.cfg
Stopping zookeeper ... 

STOPPED
[root@localhost bin]# 

也可以指定配置文件,不指定的话默认使用 conf/zoo.cfg

[root@localhost bin]# ./zkServer.sh  start ../conf/zoo.cfg 


连接服务器

bin/zkCli.sh ‐server ip:port

例子

[root@localhost bin]# ./zkCli.sh -server 192.168.126.129:2181
/usr/bin/java
Connecting to 192.168.126.129:2181
2020-11-15 23:43:05,472 [myid:] - INFO  [main:Environment@109] - Client environment:zookeeper.version=3.5.8-f439ca583e70862c3068a1f2a7d4d068eec33315, built on 05/04/2020 15:07 GMT
........
........
........
Welcome to ZooKeeper!

........
........
........

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.126.129:2181(CONNECTED) 0] 


配置文件说明

# zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000
# 允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10
# 允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5
#zookeper 数据存储目录
dataDir=/tmp/zookeeper
#对客户端提供的端口号
clientPort=2181
#单个客户端与zookeeper最大并发连接数
maxClientCnxns=60
# 保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3
#自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1


ZK 核心概念 (文件系统数据结构+监听通知机制)

可以先把Zookeeper 理解为 是一个用于存储少量数据的基于内存的数据库,主要有如下两个核心的概念:文件系统数据结构+监听通知机制


文件系统数据结构

Zookeeper维护一个类似文件系统的数据结构

在这里插入图片描述

每个子目录项都被称作为 znode(目录节点),和文件系统类似,可以自由的增加、删除znode,在一个znode下增加、删除子znode。


6种Node类型

  • PERSISTENT-持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只要不手动删除该节点,永远存在


  • PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号 ,非常适合用于分布式锁、分布式选举等场景


  • EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除 适用于心跳,服务发现等场景。


  • EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号


  • Container 节点

3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s 检查一次


  • TTL 节点 (Time To Life)

默认禁用,只能通过系统配置 zookeeper.extendedTypesEnabled=true 开启,不稳定


在这里插入图片描述


监听通知机制

客户端注册监听它关心的任意节点,或者目录节点及递归子目录节点

  1. 如果注册的是对某个节点的监听,则当这个节点被删除,或者被修改时,对应的客户端将被通知

  2. 如果注册的是对某个目录的监听,则当这个目录有子节点被创建,或者有子节点被删除,对应的客户端将被通知

  3. 如果注册的是对某个目录的递归子节点进行监听,则当这个目录下面的任意子节点有目录结构的变化(有子节点被创建,或被删除)或者根节点有数据变化时,对应的客户端将被通知。

注意:

  1. 所有的通知都是一次性的,及无论是对节点还是对目录进行的监听,一旦触发,对应的监听即被移除。
  2. 递归子节点,监听是对所有子节点的,所以,每个子节点下面的事件同样只会被触发一次。

ZK的应用场景

  1. 分布式配置中心
  2. 分布式注册中心
  3. 分布式锁
  4. 分布式队列
  5. 集群选举
  6. 分布式屏障
  7. 发布/订阅
&lt;think&gt;我们被要求下载特定版本的Apache ZooKeeper二进制包,版本号为3.8.4。 根据引用[1]的描述,我们可以从镜像站点下载二进制包,文件名为apache-zookeeper-3.8.4-bin.tar.gz。 通常,Apache项目的下载可以通过其官方镜像站点进行。 步骤: 1. 访问Apache ZooKeeper的官方网站或镜像站点。 2. 找到所需版本的二进制包(注意:要下载的是二进制包,而不是源码包)。 3. 下载文件名为apache-zookeeper-3.8.4-bin.tar.gz的文件。 实际操作: - 官方下载页面:https://zookeeper.apache.org/releases.html - 或者直接访问镜像列表:https://www.apache.org/dyn/closer.lua/zookeeper/ 在镜像站点中,通常会选择离你地理位置较近的镜像。例如,我们可以进入一个镜像站点,然后选择: zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz 注意:3.8.4版本可能存在于不同的路径下,因为官方会为每个版本提供单独的目录。 另外,也可以直接使用wget命令下载(以某个镜像URL为例,但实际需替换为可用的镜像URL): 例如: ```bash wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz ``` 注意:由于镜像站点的变化,archive.apache.org通常保存了历史版本,所以如果当前镜像没有,可以使用这个地址。 因此,我们可以这样操作: 1. 打开浏览器,访问Apache ZooKeeper的下载页面:https://zookeeper.apache.org/releases.html#download 2. 在页面中找到&ldquo;3.8.4&rdquo;版本的链接,然后选择&ldquo;binary&rdquo;版本的tar.gz包(即apache-zookeeper-3.8.4-bin.tar.gz)进行下载。 3. 或者,直接使用wget命令(在Linux服务器上)下载: ```bash wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz ``` 注意:下载完成后,按照引用[1]中的步骤,将文件上传到目标服务器(如hadoop01)的指定目录(例如/export/softwares),然后进行解压安装。 如果下载过程中遇到问题,可以尝试不同的镜像站点。 相关问题: 1. 如何验证下载的ZooKeeper二进制包的完整性? 2. ZooKeeper安装完成后,如何进行基本配置? 3. ZooKeeper集群部署的步骤是什么?&lt;/think&gt;### 下载 Apache ZooKeeper 3.8.4 二进制包指南 #### 1. 访问官方下载源 打开 Apache ZooKeeper 官方下载页面: [**https://zookeeper.apache.org/releases.html**](https://zookeeper.apache.org/releases.html) 在 &quot;Download&quot; 区域找到 **3.8.4** 版本,点击链接进入镜像选择页(或直接访问存档站): [**https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/**](https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/) #### 2. 下载二进制包 在文件列表中定位二进制包(文件名带 `-bin` 后缀): 🔗 **`apache-zookeeper-3.8.4-bin.tar.gz`** 点击文件名或使用 wget 命令下载: ```bash wget https://archive.apache.org/dist/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz ``` #### 3. 验证文件完整性(推荐) 下载同目录下的校验文件验证: - `apache-zookeeper-3.8.4-bin.tar.gz.sha512` - `apache-zookeeper-3.8.4-bin.tar.gz.asc` 使用命令校验: ```bash # SHA512校验 sha512sum -c apache-zookeeper-3.8.4-bin.tar.gz.sha512 # GPG签名验证(需导入Apache公钥) gpg --import KEYS gpg --verify apache-zookeeper-3.8.4-bin.tar.gz.asc ``` #### 4. 部署准备(参考引用[^1]) 1. 上传到目标服务器(如 Hadoop 集群): ```bash scp apache-zookeeper-3.8.4-bin.tar.gz user@hadoop01:/export/softwares/ ``` 2. 在服务器操作: ```bash # 创建安装目录 mkdir -p /export/server # 解压安装包 tar -zxvf /export/softwares/apache-zookeeper-3.8.4-bin.tar.gz -C /export/server/ # 创建软链接(可选) ln -s /export/server/apache-zookeeper-3.8.4-bin /export/server/zookeeper ``` #### 5. 配置说明(参考引用[^2]) 修改 `conf/zoo.cfg` 配置集群模式时需设置: ```properties # 启用分布式模式 hbase.cluster.distributed=true # 配置ZooKeeper集群节点 hbase.zookeeper.quorum=hadoop01,hadoop02,hadoop03 ``` &gt; **注意**:单机模式运行时,ZooKeeper 会嵌入在 HBase 的 JVM 进程中[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小工匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值