Skip to content

安装 ZooKeeper ​

Dubbo 使用 ZooKeeper 作为注册中心,所以运行 Dubbo 示例前需要先安装并启动 ZooKeeper。下面以 3.7.2 为例,分别给出 Linux 和 Windows 的安装步骤。

下载 ZooKeeper ​

可以从 ZooKeeper 官方网站 下载最新版本。

3.7.2 的下载地址是 https://downloads.apache.org/zookeeper/zookeeper-3.7.2/,该目录下提供源码包 apache-zookeeper-3.7.2.tar.gz 和编译好的 apache-zookeeper-3.7.2-bin.tar.gz。安装时使用 -bin 包,里面是编译好的 jar 和启动脚本。

Apache 对 3.7.2 只提供 tar.gz 包,没有单独的 zip。Windows 10 及以上自带 tar 命令,可以直接解压。

Linux 安装 ​

下载与解压 ​

sh
mkdir -p /opt/package/zookeeper && cd /opt/package/zookeeper
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.2/apache-zookeeper-3.7.2-bin.tar.gz
tar -zxf apache-zookeeper-3.7.2-bin.tar.gz -C /opt/
cd /opt/apache-zookeeper-3.7.2-bin

配置 ZooKeeper ​

在 conf 目录下复制 zoo_sample.cfg 并重命名为 zoo.cfg。

sh
cp conf/zoo_sample.cfg conf/zoo.cfg

编辑 zoo.cfg 配置文件:

sh
vi conf/zoo.cfg

根据需要修改以下配置项:

properties
tickTime = 2000
dataDir = /var/lib/zookeeper
clientPort = 2181

启动 ZooKeeper ​

sh
bin/zkServer.sh start

检查状态:

sh
bin/zkServer.sh status

如果 ZooKeeper 正常运行,会看到类似如下输出:

plaintext
Mode: standalone

关闭 ZooKeeper:

sh
bin/zkServer.sh stop

开机自启 ​

zkServer.sh 支持的命令:

plaintext
Usage: ./bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}

新建 systemd 服务文件:

sh
vi /lib/systemd/system/zookeeper.service
ini
[Unit]
Description=zookeeper
After=network.target

[Service]
Type=simple
Restart=on-failure
RestartSec=5s
WorkingDirectory=/opt/apache-zookeeper-3.7.2-bin
Environment="JAVA_HOME=/usr/java/jdk1.8.0_211"
ExecStart=/opt/apache-zookeeper-3.7.2-bin/bin/zkServer.sh start-foreground

[Install]
WantedBy=multi-user.target

注意把上面的 JAVA_HOME 改成机器上实际的 JDK 路径。

sh
systemctl start zookeeper
systemctl enable zookeeper
systemctl status zookeeper

Windows 安装 ​

下载与解压 ​

从 https://downloads.apache.org/zookeeper/zookeeper-3.7.2/ 下载 apache-zookeeper-3.7.2-bin.tar.gz,放到准备安装的目录,例如 D:\dev_program。

在压缩包所在目录里用系统自带的 tar 命令解压:

bat
cd /d D:\dev_program
tar -zxf apache-zookeeper-3.7.2-bin.tar.gz

解压后得到 D:\dev_program\apache-zookeeper-3.7.2-bin。也可以用 7-Zip 等工具解压,效果相同。

配置 ZooKeeper ​

把 zoo_sample.cfg 复制一份并命名为 zoo.cfg:

bat
cd /d D:\dev_program\apache-zookeeper-3.7.2-bin
copy conf\zoo_sample.cfg conf\zoo.cfg

编辑 conf\zoo.cfg,至少确认下面三项:

properties
tickTime = 2000
dataDir = D:/dev_program/apache-zookeeper-3.7.2-bin/data
clientPort = 2181

zoo.cfg 是 Java properties 文件,反斜杠是转义符,所以 dataDir 要写成正斜杠,或者把反斜杠写成 \\

properties
dataDir = D:\\dev_program\\apache-zookeeper-3.7.2-bin\\data

创建 dataDir 指向的目录:

bat
mkdir D:\dev_program\apache-zookeeper-3.7.2-bin\data

启动 ZooKeeper ​

bin\zkServer.cmd 依赖 JAVA_HOME,先在命令行里设置好:

bat
set JAVA_HOME=D:\java\jdk-21.0.6
D:\dev_program\apache-zookeeper-3.7.2-bin\bin\zkServer.cmd

日志里出现下面两行,说明已经启动成功:

plaintext
binding to port 0.0.0.0/0.0.0.0:2181
PrepRequestProcessor (sid:0) started, reconfigEnabled=false

Windows 版脚本在前台运行,关闭窗口或按 Ctrl+C 即停止。

注意不要在命令后面加 start。zkServer.cmd 没有 start 子命令,多出来的参数会被追加到配置文件路径后面,成为 QuorumPeerMain 的第二个参数,导致启动失败:

plaintext
java.lang.NumberFormatException: For input string: "D:\dev_program\apache-zookeeper-3.7.2-bin\conf\zoo.cfg"

zkEnv.cmd 里把 ZOOCFG 固定成了 conf\zoo.cfg,所以直接把配置写在这个文件里即可;配置路径不需要也不能作为参数传入。

验证安装 ​

新开一个命令行窗口,用自带的客户端连接:

bat
D:\dev_program\apache-zookeeper-3.7.2-bin\bin\zkCli.cmd -server 127.0.0.1:2181

连接成功会看到:

plaintext
Welcome to ZooKeeper!
[zk: 127.0.0.1:2181(CONNECTED) 0]

输入 quit 退出客户端。

也可以直接检查端口和日志:

bat
netstat -ano | findstr 2181

启动日志写在 logs\zookeeper-<用户名>-server-<计算机名>.log。

端口说明 ​

  • 2181:客户端连接端口。Dubbo 的注册中心地址 zookeeper://127.0.0.1:2181 用的就是它。
  • 8080:ZooKeeper 3.5 起内置的 AdminServer,通过 HTTP 提供运行状态。如果 8080 已经被其他程序占用,可以在 zoo.cfg 里用 admin.serverPort 改成其他端口。

MIT Licensed