在做环境迁移的时候经常会遇到中间件的数据迁移,今天我们说一下zookeeper的数据如何迁移与恢复。

比如说我们使用prd环境数据迁移到st环境为例来叙述一下具体的步骤。

第一步:从prd环境zookeeper服务器的数据目录下复制最新的日志和快照文件。

先去zookeeper的安装目录下找到zookeeper的conf文件,例如:

$> cd /usr/local/zookeeper/conf
$> cat zoo.cfg

打开zoo.cfg文件找到具体配置的zookeeper的data目录,例如:

# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/var/zookeeper

进入到dataDir下的version-2文件夹,version-2文件夹下存放的是zookeeper的日志和镜像文件,我们找到最新的日志和镜像文件,例如:

$> cd /var/zookeeper/version-2
$> ls -ah
-rw-r--r-- 1 zookeeper zookeeper 67108880 Sep 27 17:20 log.909e2d252
-rw-r--r-- 1 zookeeper zookeeper 10408329 Sep 27 17:01 snapshot.909e2d250

找到最新的日志和快照文件,例如上面的:log.909e2d252和snapshot.909e2d250

日志文件存放zookeeper全部数据记录 ,快照文件则是内存增量文件。

ps.这里要注意找最新的日志和快照文件

zookeeper的日志和镜像文件的清理可以看这篇文章:Zookeeper事务日志和snapshot清理方式

第二步:传输日志和快照文件

如果st和prd网络是通的话可以通过scp的方式复制过去,如果网络不通通过中转站来过渡。

第三步:停掉需要恢复数据的zk服务,删除数据目录下的文件,复制刚才的两个文件到数据目录下

假设需要恢复数据的服务器上zookeeper数据目录也是在/var/zookeeper下

$> rm -fr /var/zookeeper/*
$> cp log.909e2d252 snapshot.909e2d250 /var/zookeeper
$> cd /usr/local/zookeeper/bin
$> ./zkServer.sh start

如果是三台需要全部服务停掉,恢复其中的一台,然后等数据恢复完成后,再启动其余的两台服务让zk自己同步数据过去

第四步:验证数据是否真的恢复了

$> cd /usr/local/zookeeper/bin
$> ./zkCli.sh
$> ls /

ls查看zk中的数据.

Zookeeper日志与镜像文件的分析可以参考这篇文章:ZooKeeper日志与快照文件简单分析