今天有几个同学的ZooKeeper环境在启动时虽然显示Started,但是在查看status时却提示not running,经过查看logs日志发现,启动时发生了异常如下:
java.io.IOException: No snapshot found, but there are log entries. Something is broken! at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:240) at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:240) at org.apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.java:305) at org.apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.java:465) at org.apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.java:764) at org.apache.zookeeper.server.ServerCnxnFactory.startup(ServerCnxnFactory.java:98) at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:145) at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:107) at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:65) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:128) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
网上看了不少解决方案,其中一种是要修改zoo.cfg
配置文件中的dataDir
对应的路径,换成别的目录,试了下,启动还是报错,后来重新看了下报错信息,重点在于No snapshot found, but there are log entries. Something is broken!
这句提示,翻译下大概意思就是:找不到快照,但有日志记录,有文件损坏了!
解决办法:
方法1:如果你的数据文件不重要,可以直接将dataDir
配置指定的目录和dataLogDir
配置指定的日志目录直接强制递归删除,然后重新启动就可以!
方法2:直接重新安装部署ZK
目前还没有找到了产生此问题的具体原因,猜测可能是因为系统突然宕机,导致ZK服务器关闭不当导致文件损坏的,也没有找到能够保留元数据情况下解决此问题的办法,如果有这样的方法,还请评论留言告知哦!