在 Linux 环境下迁移 ZooKeeper 通常涉及 数据迁移 和 集群节点替换/迁移,下面按常见场景给你一个清晰、可操作的指南。
zkServer.sh version
建议:源和目标版本尽量一致,至少大版本一致(如 3.4.x → 3.4.x)
cp -r /data/zookeeper /data/zookeeper_bak
默认数据目录一般在:
dataDir=/var/lib/zookeeper
dataLogDir=/var/lib/zookeeper/log
zkServer.sh stop
scp -r /var/lib/zookeeper user@newhost:/var/lib/zookeeper
在新机器安装相同版本 ZooKeeper
修改配置 zoo.cfg
dataDir=/var/lib/zookeeper
clientPort=2181
zkServer.sh start
适用于 不中断服务 的迁移(生产环境)
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
server.4=zk4:2888:3888
server.5=zk5:2888:3888
server.6=zk6:2888:3888
dataDir=/var/lib/zookeeper
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
server.4=zk4:2888:3888
server.5=zk5:2888:3888
server.6=zk6:2888:3888
zkServer.sh start
echo stat | nc zk4 2181
zoo.cfg 删除 server.1~3zkServer.sh stop
rsync -avz /var/lib/zookeeper/ newhost:/var/lib/zookeeper/
zkServer.sh start
⚠️ 注意:
myid 文件必须正确每个节点必须有:
/var/lib/zookeeper/myid
内容例如:
1
对应 server.1
# 查看节点
zkCli.sh -server localhost:2181 ls /
# 查看状态
echo ruok | nc localhost 2181
# 返回 imok 表示正常
❌ 版本不一致导致无法加入集群
❌ myid 冲突或缺失
❌ dataDir 权限不对(zookeeper 用户无法写)
❌ 只迁移数据目录,忘记 log 目录
| 场景 | 推荐方式 |
|---|---|
| 测试环境 | 直接拷贝数据 |
| 生产环境 | 滚动扩容 + 缩容 |
| 跨机房 | 新集群 + 数据同步 |
如果你能告诉我:
我可以给你 更精确到命令级别的迁移方案。