一键安装单节点 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

📚 参考资料


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

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

相关推荐
yumgpkpm4 小时前
Cloudera CDP/CDH/Hadoop 信创大模型AI时代何去何从?
人工智能·hive·hadoop·elasticsearch·zookeeper·kafka·cloudera
胖好白4 小时前
【RK3588开发】Debian系统的驱动开发配置
驱动开发·debian
不做码农好多年,该何去何从。2 天前
zookeeper是什么可以做什么?
分布式·zookeeper·云原生
一点事3 天前
windows:zookeeper下载安装教程
windows·分布式·zookeeper
鸠摩智首席音效师3 天前
如何创建带参数的 Bash 别名 ?
linux·bash
网硕互联的小客服3 天前
Debian系统提示“Media change...”如何处理?
运维·debian
gjxDaniel4 天前
Bash编程语言入门与常见问题
开发语言·bash
shhpeng4 天前
Debian packages 的签名与验证
运维·debian
shhpeng4 天前
Debian 包的制作与安装完整指南
运维·debian