@ZooKeeper 详细介绍&部署与使用详细指南

发布于:2025-09-05 ⋅ 阅读:(19) ⋅ 点赞:(0)

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

网站公告

今日签到

点亮在社区的每一天
去签到