安装 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 安装
下载与解压
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。
cp conf/zoo_sample.cfg conf/zoo.cfg编辑 zoo.cfg 配置文件:
vi conf/zoo.cfg根据需要修改以下配置项:
tickTime = 2000
dataDir = /var/lib/zookeeper
clientPort = 2181启动 ZooKeeper
bin/zkServer.sh start检查状态:
bin/zkServer.sh status如果 ZooKeeper 正常运行,会看到类似如下输出:
Mode: standalone关闭 ZooKeeper:
bin/zkServer.sh stop开机自启
zkServer.sh 支持的命令:
Usage: ./bin/zkServer.sh [--config <conf-dir>] {start|start-foreground|stop|version|restart|status|print-cmd}新建 systemd 服务文件:
vi /lib/systemd/system/zookeeper.service[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 路径。
systemctl start zookeeper
systemctl enable zookeeper
systemctl status zookeeperWindows 安装
下载与解压
从 https://downloads.apache.org/zookeeper/zookeeper-3.7.2/ 下载 apache-zookeeper-3.7.2-bin.tar.gz,放到准备安装的目录,例如 D:\dev_program。
在压缩包所在目录里用系统自带的 tar 命令解压:
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:
cd /d D:\dev_program\apache-zookeeper-3.7.2-bin
copy conf\zoo_sample.cfg conf\zoo.cfg编辑 conf\zoo.cfg,至少确认下面三项:
tickTime = 2000
dataDir = D:/dev_program/apache-zookeeper-3.7.2-bin/data
clientPort = 2181zoo.cfg 是 Java properties 文件,反斜杠是转义符,所以 dataDir 要写成正斜杠,或者把反斜杠写成 \\
dataDir = D:\\dev_program\\apache-zookeeper-3.7.2-bin\\data创建 dataDir 指向的目录:
mkdir D:\dev_program\apache-zookeeper-3.7.2-bin\data启动 ZooKeeper
bin\zkServer.cmd 依赖 JAVA_HOME,先在命令行里设置好:
set JAVA_HOME=D:\java\jdk-21.0.6
D:\dev_program\apache-zookeeper-3.7.2-bin\bin\zkServer.cmd日志里出现下面两行,说明已经启动成功:
binding to port 0.0.0.0/0.0.0.0:2181
PrepRequestProcessor (sid:0) started, reconfigEnabled=falseWindows 版脚本在前台运行,关闭窗口或按 Ctrl+C 即停止。
注意不要在命令后面加 start。zkServer.cmd 没有 start 子命令,多出来的参数会被追加到配置文件路径后面,成为 QuorumPeerMain 的第二个参数,导致启动失败:
java.lang.NumberFormatException: For input string: "D:\dev_program\apache-zookeeper-3.7.2-bin\conf\zoo.cfg"zkEnv.cmd 里把 ZOOCFG 固定成了 conf\zoo.cfg,所以直接把配置写在这个文件里即可;配置路径不需要也不能作为参数传入。
验证安装
新开一个命令行窗口,用自带的客户端连接:
D:\dev_program\apache-zookeeper-3.7.2-bin\bin\zkCli.cmd -server 127.0.0.1:2181连接成功会看到:
Welcome to ZooKeeper!
[zk: 127.0.0.1:2181(CONNECTED) 0]输入 quit 退出客户端。
也可以直接检查端口和日志:
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改成其他端口。
