11.2.1 环境与依赖准备

在部署 ZooKeeper 前需完成基础环境与依赖准备,确保集群节点一致性与可维护性。下列步骤包含原理草图、安装与检查示例、常见排错与练习。

文章图片

1. 系统与硬件要求(验证示例)
- 64 位 Linux,生产建议内存≥4GB
- 数据盘与系统盘分离,避免 I/O 竞争
- 关闭休眠策略,保证服务稳定

# 验证系统与内核版本
uname -a
cat /etc/os-release

# 查看内存与磁盘
free -m
lsblk
df -h

# 关闭休眠(示例:systemd 环境)
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

2. Java 运行环境(安装与校验)
ZooKeeper 依赖 JDK,建议 OpenJDK 8 或 11,集群统一版本。

# CentOS/RHEL
sudo yum install -y java-1.8.0-openjdk

# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y openjdk-11-jdk

# 校验
java -version
echo $JAVA_HOME

# 统一 JAVA_HOME(示例)
echo "export JAVA_HOME=/usr/lib/jvm/java-11-openjdk" | sudo tee -a /etc/profile
source /etc/profile

3. 时间同步与主机解析(配置示例)
时间一致保证选举与会话超时准确;固定主机名便于配置 myid。

# 安装并启用 chrony
sudo yum install -y chrony
sudo systemctl enable --now chronyd

# 检查时间同步
chronyc tracking

# 设置主机名
sudo hostnamectl set-hostname zk-1

# /etc/hosts 示例(每台一致)
cat <<'EOF' | sudo tee /etc/hosts
192.168.10.11 zk-1
192.168.10.12 zk-2
192.168.10.13 zk-3
EOF

4. 用户与权限(创建与授权)
建议专用用户运行服务,避免 root 权限误操作。

# 创建用户与用户组
sudo groupadd zookeeper
sudo useradd -g zookeeper -m -s /bin/bash zookeeper

# 创建目录并授权
sudo mkdir -p /data/zk/data /data/zk/log
sudo chown -R zookeeper:zookeeper /data/zk
sudo chmod -R 750 /data/zk

5. 目录规划与文件系统(建议与示例)
分离 dataDir(快照/事务)与 dataLogDir(事务日志)提升性能。

# 查看文件系统类型
df -T /data

# 推荐目录结构
# /data/zk/data     快照与事务
# /data/zk/log      事务日志

6. 端口与网络(连通性检查)
ZooKeeper 默认端口:2181(客户端),2888(集群通信),3888(选举)。

# 放行端口(firewalld 示例)
sudo firewall-cmd --add-port=2181/tcp --permanent
sudo firewall-cmd --add-port=2888/tcp --permanent
sudo firewall-cmd --add-port=3888/tcp --permanent
sudo firewall-cmd --reload

# 连通性测试(在任意节点)
nc -vz 192.168.10.12 2888
nc -vz 192.168.10.13 3888

7. 依赖工具准备(安装与用途)
常用工具便于下载、解压、端口检测与日志排查。

# 安装常用工具
sudo yum install -y wget curl tar net-tools lsof vim

# 示例:检查端口占用
sudo lsof -i:2181

常见排错清单(快速定位)
- java -version 不一致:统一 JDK 版本与 JAVA_HOME
- chronyc tracking 显示不同步:检查 NTP 源与防火墙
- 端口不通:确认防火墙放行与路由可达
- 目录权限不足:确保 zookeeper 对数据目录可写

# 排错示例:检查端口占用与权限
sudo ss -lntp | grep -E '2181|2888|3888'
sudo -u zookeeper test -w /data/zk/data && echo "dataDir writable"

练习
1. 在三台节点上完成 JDK 安装与版本一致性验证,并记录 java -version 输出。
2. 配置 /etc/hosts,使用 ping zk-2 验证解析成功。
3. 使用 nc -vz 验证 2888 与 3888 端口互通,并写下失败时的排查步骤。
4. 模拟权限问题:将 /data/zk/data 权限改为只读,验证服务启动前的检查结果并修复。