第二章:Zookeeper 安装与配置


文档摘要

第二章:Zookeeper 安装与配置 第二章:Zookeeper 安装与配置 2.1 概述 Zookeeper 作为分布式协调服务,在构建可靠的分布式系统中扮演着至关重要的角色。无论是服务发现、配置管理、分布式锁,还是集群管理,Zookeeper 都能提供稳定高效的基础设施。因此,掌握 Zookeeper 的安装与配置是深入学习和应用 Zookeeper 的首要步骤。 本章将详细介绍 Zookeeper 的安装过程,包括单机模式和集群模式的配置方法,并深入解析关键配置参数。通过本章的学习,您将能够: 理解 Zookeeper 的安装部署方式。 掌握单机模式和集群模式的配置方法。 熟悉 Zookeeper 配置文件 的关键参数。 学会启动、停止和验证 Zookeeper 服务。

第二章:Zookeeper 安装与配置

第二章:Zookeeper 安装与配置

2.1 概述

Zookeeper 作为分布式协调服务,在构建可靠的分布式系统中扮演着至关重要的角色。无论是服务发现、配置管理、分布式锁,还是集群管理,Zookeeper 都能提供稳定高效的基础设施。因此,掌握 Zookeeper 的安装与配置是深入学习和应用 Zookeeper 的首要步骤。

本章将详细介绍 Zookeeper 的安装过程,包括单机模式和集群模式的配置方法,并深入解析关键配置参数。通过本章的学习,您将能够:

  • 理解 Zookeeper 的安装部署方式。

  • 掌握单机模式和集群模式的配置方法。

  • 熟悉 Zookeeper 配置文件 zoo.cfg 的关键参数。

  • 学会启动、停止和验证 Zookeeper 服务。

  • 了解 Zookeeper 安装配置的最佳实践。

2.2 环境准备

在开始安装 Zookeeper 之前,需要确保您的环境满足以下基本要求:

  • 操作系统: 推荐使用 Linux 或 macOS 系统。Windows 系统也可以安装,但通常用于开发测试环境。

  • Java 环境: Zookeeper 是用 Java 编写的,因此需要安装 JDK (Java Development Kit)。建议使用 JDK 8 或更高版本。

  • 网络环境: 如果要搭建集群模式,需要确保服务器之间网络互通。

2.2.1 检查 Java 环境

在终端或命令提示符中输入以下命令,检查 Java 是否已安装并配置正确:

java -version javac -version

如果命令能够正确输出 Java 版本信息,则说明 Java 环境已配置好。如果未安装或配置错误,请根据您的操作系统下载并安装 JDK,并配置 JAVA_HOME 环境变量和 PATH 环境变量,确保 javajavac 命令可用。

2.2.2 下载 Zookeeper

访问 Apache Zookeeper 官方网站 https://zookeeper.apache.org/releases.html 下载最新稳定版本的 Zookeeper。通常选择下载带有 bin.tar.gz 后缀的二进制发布包。

例如,下载 apache-zookeeper-3.8.0-bin.tar.gz

2.3 单机模式安装与配置

单机模式是最简单的 Zookeeper 安装方式,适用于开发、测试环境或对高可用性要求不高的场景。

2.3.1 解压安装包

将下载的 apache-zookeeper-x.x.x-bin.tar.gz 安装包解压到您希望安装 Zookeeper 的目录。例如,解压到 /opt/zookeeper 目录:

tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/ cd /opt/zookeeper-3.8.0-bin

为了方便后续操作,可以将解压后的目录重命名为 zookeeper

mv zookeeper-3.8.0-bin zookeeper cd zookeeper

2.3.2 配置 Zookeeper

进入 Zookeeper 的 conf 目录:

cd conf

该目录下有一个默认的配置文件模板 zoo_sample.cfg。复制一份并重命名为 zoo.cfg,Zookeeper 服务启动时会默认加载 zoo.cfg 文件:

cp zoo_sample.cfg zoo.cfg

使用文本编辑器(如 vinano)打开 zoo.cfg 文件,进行配置修改。

vi zoo.cfg

zoo.cfg 配置文件详解 (单机模式)

以下是 zoo.cfg 文件中常用的配置参数,以及单机模式下的配置示例:

tickTime=2000 dataDir=/tmp/zookeeper clientPort=2181 #server.X=hostname:port:port
  • tickTime: Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,单位是毫秒。这里设置为 2000 毫秒 (2 秒)。

  • dataDir: Zookeeper 服务器存储快照数据 (snapshot) 的目录。默认情况下,事务日志 (transaction log) 也存储在该目录下。建议将其修改为持久化存储的目录,例如 /var/lib/zookeeper。 在单机模式的示例中,为了简化,使用了临时目录 /tmp/zookeeper生产环境中务必修改为持久化目录。

  • clientPort: Zookeeper 服务器监听客户端连接的端口。默认端口是 2181。

  • #server.X=hostname:port:port: 在单机模式下,此配置项被注释掉。它用于配置集群模式下的服务器列表。

修改示例:

假设我们希望将 dataDir 修改为 /var/lib/zookeeper,保持其他配置不变,则 zoo.cfg 文件内容如下:

tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 #server.X=hostname:port:port

确保 /var/lib/zookeeper 目录存在且 Zookeeper 进程有读写权限。 如果目录不存在,需要手动创建:

sudo mkdir -p /var/lib/zookeeper sudo chown -R $(whoami):$(whoami) /var/lib/zookeeper

2.3.3 启动 Zookeeper 服务

进入 Zookeeper 的 bin 目录:

cd ../bin

执行 zkServer.sh 脚本启动 Zookeeper 服务:

./zkServer.sh start

启动成功后,终端会输出类似以下信息:

ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED

2.3.4 验证 Zookeeper 服务

可以使用 jps 命令检查 Zookeeper 进程是否正在运行:

jps

如果输出结果中包含 QuorumPeerMain 进程,则说明 Zookeeper 服务已成功启动。

xxxx QuorumPeerMain yyyy Jps

其中 xxxx 是进程 ID,QuorumPeerMain 是 Zookeeper 服务器进程。

也可以通过客户端连接 Zookeeper 服务器进行验证。使用 zkCli.sh 客户端工具连接到本地 Zookeeper 服务器:

./zkCli.sh -server 127.0.0.1:2181

连接成功后,会进入 Zookeeper 客户端命令行界面。可以尝试执行一些基本命令,例如 ls / 查看根节点下的子节点:

[zk: 127.0.0.1:2181(CONNECTED) 0] ls / [zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 1]

如果能够正常连接并执行命令,则说明 Zookeeper 服务运行正常。

2.3.5 停止 Zookeeper 服务

bin 目录下,执行 zkServer.sh 脚本停止 Zookeeper 服务:

./zkServer.sh stop

停止成功后,终端会输出类似以下信息:

ZooKeeper JMX enabled by default Using config: /opt/zookeeper/bin/../conf/zoo.cfg Stopping zookeeper ... STOPPED

2.4 集群模式安装与配置

集群模式是 Zookeeper 在生产环境中常用的部署方式,可以提供高可用性和容错能力。一个 Zookeeper 集群通常由 3 台或更多台服务器组成。

2.4.1 集群规划

假设我们要搭建一个由 3 台服务器组成的 Zookeeper 集群。服务器信息如下:

服务器 ID 主机名/IP 地址 端口 (clientPort)
1 server1 2181
2 server2 2181
3 server3 2181

注意:

  • 服务器数量: Zookeeper 集群通常建议使用奇数台服务器 (3 台、5 台、7 台等)。奇数台服务器可以更容易地选出 Leader,提高集群的稳定性。

  • 网络连通性: 确保集群中所有服务器之间网络互通,防火墙需要允许 Zookeeper 使用的端口通信。

  • 时间同步: 集群中所有服务器的时间需要保持同步,可以使用 NTP 服务进行时间同步。

2.4.2 安装 Zookeeper (集群模式)

在集群中的每台服务器上,都执行与单机模式相同的 Zookeeper 安装步骤 (2.3.1 解压安装包)。 假设在每台服务器上,Zookeeper 都安装在 /opt/zookeeper 目录。

2.4.3 配置 Zookeeper (集群模式)

在集群中的每台服务器上,都需要修改 zoo.cfg 配置文件。

zoo.cfg 配置文件详解 (集群模式)

tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=10 syncLimit=5 server.1=server1:2888:3888 server.2=server2:2888:3888 server.3=server3:2888:3888
  • tickTime, dataDir, clientPort: 与单机模式相同。

  • initLimit: Leader 和 Follower 之间初始化连接时,允许的最大心跳次数 (tickTime 的倍数)。如果 Follower 在 initLimit * tickTime 时间内无法完成初始化连接,则会被认为连接失败。这里设置为 10,即 20 秒。

  • syncLimit: Leader 和 Follower 之间同步数据时,允许的最大心跳次数。如果 Follower 在 syncLimit * tickTime 时间内无法完成数据同步,则会被认为同步失败。这里设置为 5,即 10 秒。

  • server.X=hostname:port1:port2: 配置集群中的服务器列表。

    • X: 服务器 ID,需要唯一,且与每台服务器 dataDir 目录下 myid 文件中的 ID 一致。

    • hostname: 服务器的主机名或 IP 地址。

    • port1: 服务器之间进行 Leader 选举和数据同步的端口。通常设置为 2888。

    • port2: 服务器之间进行 Leader 选举的端口。通常设置为 3888。

配置示例 (每台服务器的 zoo.cfg 文件):

server1 (ID=1):

tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=10 syncLimit=5 server.1=server1:2888:3888 server.2=server2:2888:3888 server.3=server3:2888:3888

server2 (ID=2):

tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=10 syncLimit=5 server.1=server1:2888:3888 server.2=server2:2888:3888 server.3=server3:2888:3888

server3 (ID=3):

tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181 initLimit=10 syncLimit=5 server.1=server1:2888:3888 server.2=server2:2888:3888 server.3=server3:2888:3888

注意:

  • dataDir: 集群模式下,每台服务器的 dataDir 必须配置为不同的目录,避免数据冲突。 例如,可以分别为 server1, server2, server3 配置为 /var/lib/zookeeper/server1, /var/lib/zookeeper/server2, /var/lib/zookeeper/server3本示例为了简化,仍然使用了 /var/lib/zookeeper,实际生产环境请根据实际情况修改。

  • server.X: server.X 配置项在每台服务器上的 zoo.cfg 文件中都是相同的,需要配置集群中所有服务器的信息。

2.4.4 配置服务器 ID (myid)

在集群中的每台服务器上,都需要在 dataDir 目录下创建一个名为 myid 的文件,并在文件中写入该服务器对应的 ID (与 zoo.cfgserver.XX 值一致)。

server1 (ID=1):

echo 1 > /var/lib/zookeeper/myid

server2 (ID=2):

echo 2 > /var/lib/zookeeper/myid

server3 (ID=3):

echo 3 > /var/lib/zookeeper/myid

确保 myid 文件中只包含服务器 ID,且没有空格或换行符。

2.4.5 启动 Zookeeper 集群

在集群中的每台服务器上,都执行以下命令启动 Zookeeper 服务:

cd /opt/zookeeper/bin ./zkServer.sh start

启动顺序没有严格要求,但建议先启动 ID 较小的服务器。

2.4.6 验证 Zookeeper 集群

在集群中的任意一台服务器上,可以使用 zkCli.sh 客户端工具连接到 Zookeeper 集群进行验证。 连接时,需要指定集群中所有服务器的地址,用逗号分隔:

./zkCli.sh -server server1:2181,server2:2181,server3:2181

连接成功后,进入 Zookeeper 客户端命令行界面。可以执行 ls / 命令查看根节点,并执行 get /zookeeper/config 命令查看集群配置信息。

[zk: server1:2181,server2:2181,server3:2181(CONNECTED) 0] ls / [zookeeper] [zk: server1:2181,server2:2181,server3:2181(CONNECTED) 1] get /zookeeper/config ... (输出集群配置信息) ...

还可以使用 stat 命令查看当前连接的服务器状态,例如:

[zk: server1:2181,server2:2181,server3:2181(CONNECTED) 2] stat ... Mode: follower // 或 leader, observer ...

如果能够正常连接并执行命令,且集群中至少有一台服务器处于 leader 模式,其他服务器处于 followerobserver 模式,则说明 Zookeeper 集群运行正常。

2.4.7 停止 Zookeeper 集群

在集群中的每台服务器上,都执行以下命令停止 Zookeeper 服务:

cd /opt/zookeeper/bin ./zkServer.sh stop

2.5 客户端连接与验证

Zookeeper 提供了多种客户端 API,例如 Java、C、Python 等。本节主要介绍使用自带的 zkCli.sh 客户端工具进行连接和验证。

2.5.1 使用 zkCli.sh 连接

在 Zookeeper 的 bin 目录下,执行 zkCli.sh 脚本启动客户端。

  • 连接单机模式:

    ./zkCli.sh -server <zookeeper_server_ip>:<clientPort>

    例如:

    ./zkCli.sh -server 127.0.0.1:2181
  • 连接集群模式:

    ./zkCli.sh -server <server1_ip>:<clientPort>,<server2_ip>:<clientPort>,<server3_ip>:<clientPort>

    例如:

    ./zkCli.sh -server server1:2181,server2:2181,server3:2181

2.5.2 常用客户端命令

连接成功后,进入 Zookeeper 客户端命令行界面。以下是一些常用的客户端命令:

  • ls <path>: 列出指定路径下的子节点。例如 ls / 列出根节点下的子节点。

  • create <path> <data>: 创建一个节点,并设置节点数据。例如 create /my_node my_data 创建一个名为 my_node 的节点,数据为 my_data

  • get <path>: 获取指定节点的数据。例如 get /my_node 获取 /my_node 节点的数据。

  • set <path> <data>: 设置指定节点的数据。例如 set /my_node new_data/my_node 节点的数据修改为 new_data

  • delete <path>: 删除指定节点。例如 delete /my_node 删除 /my_node 节点。

  • stat <path>: 获取指定节点的状态信息。例如 stat /my_node 获取 /my_node 节点的创建时间、修改时间、版本号等信息。

  • quit: 退出客户端命令行界面。

2.6 常见配置参数详解

除了前面介绍的 tickTime, dataDir, clientPort, initLimit, syncLimit, server.X 等参数外,zoo.cfg 文件中还有一些其他常用的配置参数:

  • dataLogDir: Zookeeper 事务日志 (transaction log) 存储目录。默认情况下,事务日志与快照数据存储在 dataDir 目录下。为了提高性能,建议将事务日志和快照数据分开存储,将 dataLogDir 配置为独立的磁盘目录,例如:

    dataLogDir=/var/log/zookeeper
  • autopurge.snapRetainCount: 保留快照文件的数量。默认值为 3。当快照文件数量超过该值时,Zookeeper 会自动删除旧的快照文件。

    autopurge.snapRetainCount=5
  • autopurge.purgeInterval: 快照清理的间隔时间,单位是小时。设置为非零值时,Zookeeper 会定期检查并清理旧的快照文件和事务日志文件。

    autopurge.purgeInterval=24 # 每天清理一次
  • maxClientCnxns: 单个客户端 IP 地址允许的最大并发连接数。默认值为 60。可以根据实际情况调整,防止恶意客户端或程序错误导致连接数过多,影响 Zookeeper 服务。

    maxClientCnxns=100
  • admin.enableServer: 是否启用管理服务器。默认值为 true。启用后,可以通过 HTTP 接口访问 Zookeeper 的管理信息,例如服务器状态、配置信息等。 管理端口默认为 8080,可以通过 admin.serverPort 参数修改。

    admin.enableServer=true admin.serverPort=8081
  • metricsProvider.className: 配置指标监控提供者。Zookeeper 支持多种指标监控方式,例如 Prometheus、JMX 等。可以通过该参数配置指标监控提供者。

    metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7000 metricsProvider.exportJvmInfo=true

2.7 Zookeeper 集群架构 (Mermaid 图)

以下使用 Mermaid 的 graph TD 图展示 Zookeeper 集群的架构:

图例解释:

  • Client: 客户端应用程序,通过 Zookeeper 客户端 API 连接到 Zookeeper 集群。

  • Zookeeper Server: Zookeeper 服务器节点,组成 Zookeeper 集群。

  • Leader: 集群中的领导者节点,负责处理写请求和协调数据同步。

  • Follower: 集群中的跟随者节点,负责处理读请求和同步 Leader 的数据。

  • 连接线: 表示客户端与服务器、服务器与服务器之间的网络连接。

集群工作流程简述:

  1. 客户端连接到集群中的任意一台 Zookeeper 服务器。

  2. 如果客户端连接到 Follower 节点,读请求直接由 Follower 处理,写请求会被转发给 Leader 节点。

  3. Leader 节点处理写请求,并将数据同步到所有 Follower 节点。

  4. 集群通过 Zab 协议保证数据的一致性和可靠性。

2.8 最佳实践与建议

  • 生产环境务必使用集群模式: 单机模式只适用于开发测试环境,生产环境应使用集群模式,提高 Zookeeper 的可用性和容错能力。

  • 选择合适的服务器数量: 集群服务器数量建议选择奇数,例如 3 台、5 台、7 台。

  • 合理配置 dataDirdataLogDir: dataDir 必须配置为持久化存储目录,dataLogDir 建议配置为独立的磁盘目录,提高性能。

  • 配置防火墙和网络安全: 限制 Zookeeper 服务器的访问权限,只允许必要的客户端 IP 地址连接。

  • 监控 Zookeeper 集群: 使用监控工具 (例如 Prometheus + Grafana, Zabbix) 监控 Zookeeper 集群的运行状态,及时发现和解决问题。

  • 定期备份 Zookeeper 数据: 定期备份 Zookeeper 的快照数据和事务日志,以便在数据丢失或损坏时进行恢复。

  • 了解更多高级配置: 本章只介绍了常用的配置参数,Zookeeper 还有很多高级配置参数,例如 ACL 权限控制、Observer 节点、动态配置等,可以根据实际需求深入学习和配置。

2.9 总结

本章详细介绍了 Zookeeper 的安装与配置过程,包括单机模式和集群模式的配置方法,并深入解析了 zoo.cfg 文件的关键参数。通过本章的学习,您应该已经掌握了 Zookeeper 的基本安装和配置方法,并为后续深入学习和应用 Zookeeper 打下了坚实的基础。

在下一章节中,我们将深入探讨 Zookeeper 的核心概念和数据模型,帮助您更好地理解 Zookeeper 的工作原理和应用场景。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U