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

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


✅ 前提条件

  1. 以 root 用户运行(或具有 sudo 权限)
  2. 已安装完整 JDK (非 JRE),并正确配置 JAVA_HOME 环境变量
    • 需包含 java 和 jps 命令(通常 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。

📚 参考资料


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

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

相关推荐
SEO_juper17 小时前
Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了
开发语言·python·node.js·json·bash
无足鸟ICT1 天前
【RHCA+】type命令(判断命令类型)
linux·ssh·bash
螺蛳粉 螺蛳粉2 天前
CDH第七篇:CDH 集成 Kafka 实战:CSD + Parcel 组合拳,先装 ZooKeeper 是铁律
物联网·zookeeper·kafka·消息队列·parcel·cdh集成·csd
SEO_juper3 天前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
木子欢儿3 天前
Debian 13 + vsftpd 搭建FTP服务
linux·服务器·前端·网络·debian
云计算练习生4 天前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
qetfw6 天前
Bash 函数与流程控制:read、if、for、case 验证
linux·前端·javascript·bash
qetfw7 天前
Bash 基础:脚本执行、引号与命令替换验证
linux·开发语言·chrome·bash
qetfw7 天前
Bash 变量:export、位置参数与默认值展开验证
linux·开发语言·chrome·bash
ZYH_06017 天前
rhcsa课程复习题
服务器·bash