host1为源zookeeper主机 host2为目的zookeeper主机 现在将host1的zookeeper数据迁移到host2

从host1中找到最新的zookeeper日志和快照文件

#登录到host1,切换到zookeeper数据目录,如下
#(可从zoo.cfg配置文件中得到数据目录位置)
$> cd /var/lib/zookeeper/version-2
$> ls -alh
-rw-r--r-- 1 root root 65M Jun 20 13:20 log.1f00059ce3
-rw-r--r-- 1 root root 65M Jul 5 15:33 log.1f0006b6ed
-rw-r--r-- 1 root root 65M Jul 26 16:07 log.2100000001
-rw-r--r-- 1 root root 415K May 17 09:37 snapshot.1f000157ec
-rw-r--r-- 1 root root 414K May 20 14:10 snapshot.1f000275b9
-rw-r--r-- 1 root root 416K May 23 07:02 snapshot.1f0003617e
-rw-r--r-- 1 root root 467K May 26 10:04 snapshot.1f00048346
-rw-r--r-- 1 root root 544K May 29 14:22 snapshot.1f00059ce1
-rw-r--r-- 1 root root 556K Jun 20 13:20 snapshot.1f0006b6eb

找到最新的日志文件和快照文件,如上表就是log.2100000001和snapshot.1f0006b6eb

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

从host1复制最新的zookeeper日志和快照文件到host2

$> scp log.2100000001 snapshot.1f0006b6eb root@host2:/tmp

host2载入最新日志和快照文件并启动zookeeper服务

#(可从zoo.cfg配置文件中得到数据目录位置)
$> rm -fr /var/lib/zookeeper/* #清空host2的zookeeper数据目录内容
$> cd /tmp
$> cp log.2100000001 snapshot.1f0006b6eb /var/lib/zookeeper
$> systemctl start zk OR zkServer.sh start #启动zookeeper服务

验证host2的zookeeper数据

#客户端登录到host2,进行验证
$> zkCli.sh -server host2:2181 #可从zoo.cfg配置文件中得到服务端口
$> ls / # 列出所有节点

关于zookeeper的数据恢复

5.1 上述方法也用于zookeeper的数据恢复
5.2 如host1误删了zookeeper数据,可以先将数据目录(如/var/lib/zookeeper)备份
5.3 确认好恢复到那一天的数据(不能恢复到当天的数据,会发生错乱)
5.3 停止zookeeper服务
5.4 进入到zookeeper数据目录,把其他的日志文件和快照删掉,只保留恢复当天的日志文件和快照文件
5.5 重启zookeeper服务
5.6 客户端验证zookeeper数据

zkui配置过连接信息后,再切换到到其他,报如下错误

KeeperErrorCode = ConnectionLoss for /
修改 ./config.cfg zkSessionTimeout=60 zkServer ./target/config.cfg
zkSessionTimeout=60 zkServer