@ZooKeeper 详细介绍部署与使用详细指南
文章目录
- **ZooKeeper 详细介绍、部署与使用**
-
- 1. 概述 & 核心介绍
-
- 1.1 什么是 ZooKeeper?
- 1.2 核心特性
- 1.3 核心概念
- 1.4 典型应用场景
- 2. 部署 (以 3 节点集群为例)
-
- 2.1 环境准备
- 2.2 安装步骤 (在所有节点执行)
- 2.3 启动与停止集群
- 2.4 防火墙配置 (如果开启)
- 3. 基本使用与客户端操作
-
- 3.1 使用 CLI 客户端连接
- 3.2 常用命令
- 4. 常见问题与故障排查 (FAQ)
- 5. 官方参考文献
ZooKeeper 详细介绍、部署与使用
1. 概述 & 核心介绍
1.1 什么是 ZooKeeper?
Apache ZooKeeper 是一个开源的分布式协调服务,由 Apache 软件基金会托管。它旨在为分布式应用提供一个高性能、高可用且具有严格顺序访问控制能力的分布式配置管理、同步和命名注册服务。
1.2 核心特性
- 顺序一致性 (Sequential Consistency): 来自客户端的更新将按照其发送的顺序被应用。
- 原子性 (Atomicity): 更新要么成功,要么失败,没有中间状态。
- 单一系统映像 (Single System Image): 无论客户端连接到哪个服务器,它都将看到相同的服务视图。
- 可靠性 (Reliability): 一旦一个更新被应用,它将从那时起一直保持,直到被下一个更新覆盖。
- 及时性 (Timeliness): 确保客户端的视图在特定时间范围内是最新的。
1.3 核心概念
- 集群模式 (Cluster Mode): ZooKeeper 通常以复制模式 (Replicated Mode) 部署,即一个由多个节点(奇数个,如 3, 5, 7…)组成的集群,称为一个 Ensemble。这是生产环境的标准部署方式,提供高可用性。
- 领导者选举 (Leader Election): 集群启动时,所有节点会通过投票选举出一个 Leader,其余节点成为 Follower。所有写请求都必须由 Leader 处理,读请求可以由任何节点处理。
- ZNode: ZooKeeper 数据模型中的数据节点,类似于文件系统中的文件和目录。它构成了一个层次化的命名空间(树状结构)。
- 持久节点 (PERSISTENT): 创建后即使客户端断开连接也会一直存在。
- 临时节点 (EPHEMERAL): 客户端会话有效时存在,会话结束则节点自动删除。常用于实现服务发现和领导者选举。
- 顺序节点 (SEQUENTIAL): 节点名后会附加一个单调递增的计数器。可用于实现分布式锁和队列。
- (节点类型可组合,如
PERSISTENT_SEQUENTIAL
)
- 会话 (Session): 客户端与服务器端建立一个 TCP 长连接,并通过此连接进行心跳检测。会话有超时时间 (
sessionTimeout
)。 - Watcher (监听器): 客户端可以在 ZNode 上设置监听。当该 ZNode 发生变化(数据变更、子节点增减等)时,ZooKeeper 会向客户端发送一个一次性通知。这是 ZooKeeper 实现分布式协调的核心机制。
1.4 典型应用场景
- 配置管理: 将公共配置(如数据库URL、特性开关)存储在 ZNode 中,所有应用监听其变化,实现配置的集中管理和动态更新。
- 分布式锁: 利用临时顺序节点和 Watcher 机制实现排他锁和共享锁。
- 服务发现: 服务提供者启动时在特定路径下创建临时节点,服务消费者监听该路径,从而动态感知服务的上线和下线。
- 领导者选举: 多个候选者尝试创建同一个临时节点,成功者即为 Leader,其他候选者监听该节点,一旦 Leader 宕机(会话失效),节点删除,其他候选者重新竞争。
- 命名服务 (Naming Service): 通过树形结构全局唯一地命名资源。
- 集群管理: 监控节点的存活状态。
2. 部署 (以 3 节点集群为例)
2.1 环境准备
- 服务器: 3台 Linux 主机 (CentOS 7/8, Ubuntu 18.04+)
zk-node1
(IP: 192.168.1.101)zk-node2
(IP: 192.168.1.102)zk-node3
(IP: 192.168.1.103)
- 软件依赖: Java 8 或 Java 11 (推荐 LTS 版本)
- 用户: 建议创建一个专用用户,如
zookeeper
。
2.2 安装步骤 (在所有节点执行)
1. 创建用户和组
sudo groupadd zookeeper
sudo useradd -g zookeeper zookeeper
sudo passwd zookeeper # 设置密码,用于运维登录(可选,也可用密钥)
2. 安装 Java
# CentOS
sudo yum install -y java-11-openjdk-devel# Ubuntu
sudo apt update && sudo apt install -y openjdk-11-jdk# 验证安装
java -version