zookeeper无法启动,报“Unable to load database on disk”

启动异常

./zkServer.sh start执行后,查看状态是Error contacting service. It is probably not running.,服务未正常启动,观察zookeeper.out日志查找原因。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2021-03-10 16:42:09,926 [myid:1] - ERROR [main:Util@214] - Last transaction was partial.
2021-03-10 16:42:09,929 [myid:1] - ERROR [main:QuorumPeer@693] - Unable to load database on disk
java.io.IOException: The accepted epoch, a is less than the current epoch, b
at org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:690)
at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:636)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:170)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:114)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)
2021-03-10 16:42:09,931 [myid:1] - ERROR [main:QuorumPeerMain@92] - Unexpected exception, exiting abnormally
java.lang.RuntimeException: Unable to run quorum server
at org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:694)
at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:636)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:170)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:114)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)
Caused by: java.io.IOException: The accepted epoch, a is less than the current epoch, b
at org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:690)
... 4 more

看到是启动无法在磁盘上加载数据库的错误信息

解决办法

进入zookeeper的data目录下

1
2
3
4
-rw-r--r-- 1 root root         2 Aug 31  2020 myid
drwxr-xr-x 2 root root 4096 Mar 10 17:04 version-2/
-rw-r--r-- 1 root root 589144064 Nov 5 01:36 zookeeper.out
-rw-r--r-- 1 root root 5 Mar 10 17:04 zookeeper_server.pid

删除version-2目录或者剪切version-2目录并重新创建该目录,再次启动zookeeper服务就启动正常了。