Debian系统下Zookeeper集群搭建指南
node1:192.168.1.1、node2:192.168.1.2、node3:192.168.1.3),确保节点间网络互通。root用户或具有sudo权限的用户操作。Zookeeper依赖Java运行时环境(JRE),推荐安装OpenJDK 11(兼容性最佳):
sudo apt update
sudo apt install -y openjdk-11-jdk
# 验证安装
java -version # 应输出Java 11版本信息
选择稳定版本(如3.7.0),下载后解压至/opt目录:
wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
tar -xzvf apache-zookeeper-3.7.0-bin.tar.gz -C /opt
# 创建软链接(方便后续操作)
sudo ln -s /opt/apache-zookeeper-3.7.0-bin /opt/zookeeper
为每个节点创建专属数据目录(用于存储集群状态和快照):
sudo mkdir -p /var/lib/zookeeper/{data,logs}
sudo chown -R $(whoami):$(whoami) /var/lib/zookeeper # 授权当前用户
复制示例配置文件zoo_sample.cfg为zoo.cfg,编辑集群参数:
cd /opt/zookeeper/conf
sudo cp zoo_sample.cfg zoo.cfg
sudo nano zoo.cfg
修改以下关键参数(以3节点为例):
tickTime=2000 # 基础时间单位(毫秒,用于心跳)
dataDir=/var/lib/zookeeper/data # 数据目录路径
clientPort=2181 # 客户端连接端口
initLimit=5 # 初始化同步超时(tick数)
syncLimit=2 # 同步超时(tick数)
server.1=192.168.1.1:2888:3888 # 节点1的ID、Leader选举端口、数据同步端口
server.2=192.168.1.2:2888:3888 # 节点2配置
server.3=192.168.1.3:2888:3888 # 节点3配置
在每个节点的dataDir目录下创建myid文件,写入对应节点ID(与server.X中的X一致):
# 在node1上执行
echo "1" | sudo tee /var/lib/zookeeper/data/myid
# 在node2上执行
echo "2" | sudo tee /var/lib/zookeeper/data/myid
# 在node3上执行
echo "3" | sudo tee /var/lib/zookeeper/data/myid
进入Zookeeper的bin目录,依次启动每个节点的服务:
cd /opt/zookeeper/bin
# 在node1上启动
./zkServer.sh start
# 在node2上启动
./zkServer.sh start
# 在node3上启动
./zkServer.sh start
通过status命令查看每个节点的角色(Leader/Follower):
# 在node1上执行
./zkServer.sh status
# 在node2上执行
./zkServer.sh status
# 在node3上执行
./zkServer.sh status
正常结果应显示其中一个节点为Mode: leader,其余为Mode: follower。
使用zkCli.sh命令行工具连接集群,执行基础操作:
# 连接任意节点(如node1)
/opt/zookeeper/bin/zkCli.sh -server 192.168.1.1:2181
在命令行中执行以下命令:
# 创建节点
create /test "Hello ZooKeeper"
# 查看节点列表
ls /
# 获取节点数据
get /test
# 删除节点
delete /test
# 退出
quit
允许Zookeeper使用的端口(2181为客户端端口,2888为Leader选举端口,3888为数据同步端口):
sudo ufw allow 2181/tcp
sudo ufw allow 2888/tcp
sudo ufw allow 3888/tcp
sudo ufw reload
通过systemd创建服务文件,实现开机自动启动:
sudo nano /etc/systemd/system/zookeeper.service
写入以下内容(根据实际路径调整):
[Unit]
Description=Apache Zookeeper Server
After=network.target
[Service]
Type=forking
User=$(whoami)
Group=$(whoami)
ExecStart=/opt/zookeeper/bin/zkServer.sh start
ExecStop=/opt/zookeeper/bin/zkServer.sh stop
Restart=always
[Install]
WantedBy=multi-user.target
保存后启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable zookeeper
sudo systemctl start zookeeper
zoo.cfg中server.X列表必须完全一致。dataDir目录所属用户为运行Zookeeper的用户(如当前用户)。