zookeeper迁移
[TOC]
方案1:[推荐] 利用开源项目 zkcopy 在线迁移
- 任意机器:安装 zkcopy,可直接向目标机server:port上拷贝数据(验证有效)
cd /opt/
# git config --global http.lowSpeedLimit 0
# git config --global http.lowSpeedTime 999999
git clone https://github.com/ksprojects/zkcopy.git
cd /opt/zkcopy/
mvn clean install
java -jar target/zkcopy.jar --source 192.168.100.101:2181/xxx --target 192.168.100.102:2181/xxx
注:若 git clone 失败,可尝试如下地址下载
cd /opt/ wget -c http://iso.sqlfans.cn/linux/zkcopy.zip unzip zkcopy.zip
- 目标实例:确认数据
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
ls /
quit
方案2:[常规] 利用快照迁移 zk 从host1到host2
- host1找到dataDir下version-2目录中最新的zk快照文件(内存增量文件)
find / -name zoo.cfg
cat /var/app/zookeeper-3.4.14/conf/zoo.cfg | grep dataDir
ls -alh /tmp/zookeeper/version-2/
- host1找到dataLogDir(若未配则同dataDir)下version-2目录中最新的zk日志文件(存放zk全部数据记录)
find / -name zoo.cfg
cat /var/app/zookeeper-3.4.14/conf/zoo.cfg | grep dataLogDir
ls -alh /tmp/zookeeper/version-2/
- host1复制最新的zk日志和快照文件到host2
scp log.2100000001 snapshot.1f0006b6eb root@host2:/tmp
- host2找到zk数据目录
find / -name zoo.cfg
cat /usr/local/zookeeper/conf/zoo.cfg | grep dataDir
- host2停掉zk服务,清空host2的zk数据目录,载入最新日志和快照文件并启动zk服务
如果是三台需要全部服务停掉,恢复其中的一台,然后等数据恢复完成后,再启动其余的两台服务让zk自己同步数据过去
/usr/local/zookeeper/bin/zkServer.sh stop
rm -rf /data/zookeeper/*
cp /tmp/log.2100000001 /data/zookeeper/data/
cp /tmp/snapshot.1f0006b6eb /data/zookeeper/data/
/usr/local/zookeeper/bin/zkServer.sh start
- 验证host2的zk数据
/usr/local/zookeeper/bin/zkCli.sh -server 127.0.0.1:2181
ls /
quit