一键安装单节点 Zookeeper 3.8.5(附完整 Bash 脚本)

适用环境 :CentOS / Ubuntu / 其他 Linux 发行版
用途:开发测试、学习 Zookeeper 基础使用


✅ 前提条件

  1. 以 root 用户运行(或具有 sudo 权限)
  2. 已安装完整 JDK (非 JRE),并正确配置 JAVA_HOME 环境变量
    • 需包含 javajps 命令(通常 JDK 才有 jps

你可以通过以下命令验证:

bash 复制代码
echo $JAVA_HOME
$JAVA_HOME/bin/java -version
$JAVA_HOME/bin/jps -V

📥 自动安装脚本(支持断点续装)

将以下脚本保存为 install_zookeeper.sh,然后执行:

bash 复制代码
#!/bin/bash
# 自动安装单节点 Zookeeper
set -e

ZOOKEEPER_VERSION="3.8.5"
ZOOKEEPER_INSTALL_DIR="/opt/zookeeper"

echo "=== Zookeeper $ZOOKEEPER_VERSION 自动安装脚本 ==="

# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
  echo "❌ 请以 root 用户运行此脚本。"
  exit 1
fi

# 检查 JAVA_HOME 是否设置
if [ -z "$JAVA_HOME" ]; then
    echo "❌ JAVA_HOME 未设置,请先设置完整 JDK 的 JAVA_HOME"
    exit 1
fi

# 检查 bin 目录下是否有 java 和 jps
if [ ! -x "$JAVA_HOME/bin/java" ] || [ ! -x "$JAVA_HOME/bin/jps" ]; then
    echo "❌ JAVA_HOME 指向的目录不完整,缺少 java 或 jps,请使用完整 JDK"
    exit 1
fi

# 安装依赖(如 wget 未安装)
which wget >/dev/null || { echo "正在安装 wget..."; apt-get update && apt-get install -y wget || yum install -y wget; }

# 下载 Zookeeper 包(如不存在)
if [ ! -f "/tmp/apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz" ]; then
  echo ">>> 下载 Zookeeper $ZOOKEEPER_VERSION..."
  wget -q https://downloads.apache.org/zookeeper/zookeeper-$ZOOKEEPER_VERSION/apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz -P /tmp
else
  echo ">>> 已存在 /tmp/apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz,跳过下载。"
fi

# 检查是否已安装 Zookeeper
if [ -d "$ZOOKEEPER_INSTALL_DIR" ] || [ -d "/opt/apache-zookeeper-$ZOOKEEPER_VERSION-bin" ]; then
  echo ">>> 检测到 Zookeeper 目录已存在,跳过解压步骤。"
else
  echo ">>> 解压 Zookeeper..."
  tar -zxf /tmp/apache-zookeeper-$ZOOKEEPER_VERSION-bin.tar.gz -C /opt/
  mv -f /opt/apache-zookeeper-$ZOOKEEPER_VERSION-bin $ZOOKEEPER_INSTALL_DIR
fi

# 创建数据目录
mkdir -p $ZOOKEEPER_INSTALL_DIR/data

# 创建默认单节点配置
cat > $ZOOKEEPER_INSTALL_DIR/conf/zoo.cfg <<EOF
tickTime=2000
dataDir=$ZOOKEEPER_INSTALL_DIR/data
clientPort=2181
initLimit=5
syncLimit=2
admin.serverPort=8081
server.1=node1:2888:3888
EOF

# 设置 myid(单节点必须)
echo "1" > $ZOOKEEPER_INSTALL_DIR/data/myid

# 设置环境变量(可选但推荐)
if ! grep -q "ZOOKEEPER_HOME" /etc/profile; then
  echo ">>> 写入 /etc/profile 环境变量..."
  cat >> /etc/profile <<EOF

# Zookeeper 环境变量
export ZOOKEEPER_HOME=$ZOOKEEPER_INSTALL_DIR
export PATH=\$PATH:\$ZOOKEEPER_HOME/bin
EOF
fi

# 加载环境变量
source /etc/profile

# 测试 Zookeeper 可用性
echo ">>> 验证 Zookeeper 安装..."
if [ -x "$ZOOKEEPER_INSTALL_DIR/bin/zkServer.sh" ]; then
  echo "✅ Zookeeper 安装成功!"
  echo "💡 启动命令:zkServer.sh start"
  echo "💡 查看状态:zkServer.sh status"
  echo "💡 停止命令:zkServer.sh stop"
  $ZOOKEEPER_INSTALL_DIR/bin/zkServer.sh status || true
else
  echo "⚠️ Zookeeper 安装完成,但未找到启动脚本,请检查目录 $ZOOKEEPER_INSTALL_DIR/bin"
fi

echo "=== Zookeeper $ZOOKEEPER_VERSION 安装完成 ==="

▶️ 使用方法

bash 复制代码
chmod +x install_zookeeper.sh
./install_zookeeper.sh

💡 脚本特点:

  • 自动跳过已下载的安装包
  • 若已安装则跳过解压
  • 自动创建 myid 文件(单节点必须!)
  • 自动配置 zoo.cfg
  • 自动写入全局环境变量

🔧 启动与验证

安装完成后,你可以直接使用以下命令:

bash 复制代码
# 启动
zkServer.sh start

# 查看状态
zkServer.sh status

# 停止
zkServer.sh stop

预期输出(首次启动后):

复制代码
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone

Mode: standalone 表示单节点模式运行成功!


📌 注意事项

  • 单节点仅用于开发测试,生产环境请部署集群(至少 3 节点)。
  • 如果防火墙开启,请放行端口:2181(客户端)、2888/3888(集群通信,单节点可忽略)、8081(Admin Server)。
  • 若需关闭 Admin Server(减少端口暴露),取消注释配置中的 #admin.enableServer=false

📚 参考资料


👍 觉得有用?欢迎点赞、收藏、关注!

如有疑问,欢迎在评论区留言交流~

相关推荐
MarkHD2 小时前
RPA工程化实践:重构电商抓取项目——从混乱脚本到模块化、可配置化系统
重构·bash·rpa
allway22 小时前
Debian Regular Expressions
运维·debian·scala
java1234_小锋7 小时前
Java高频面试题:RocketMQ有哪些使用场景?
java·zookeeper·java-zookeeper
brucelee1868 小时前
Debian 安装 Ollama 教程
debian·ollama·open claw
拦路雨g8 小时前
Duboo配置zookeeper账号密码认证链接
分布式·zookeeper·云原生
晨曦蜗牛9 小时前
Windows 上 Claude Code 报错 “requires git-bash“ 的完整解决方案
windows·git·bash
AiGuoHou121 小时前
Debian/Ubuntu 各个版本一键更换国内镜像源
linux·ubuntu·国内源·debian·镜像源·换源
淮北4941 天前
bash下好用的快捷键以及linux常用指令
linux·开发语言·ubuntu·bash
人间打气筒(Ada)1 天前
go实战案例:如何基于 Conul 给微服务添加服务注册与发现?
开发语言·微服务·zookeeper·golang·kubernetes·etcd·consul
JobDocLS3 天前
Bash调试方法
开发语言·bash