This article describes a workaround to address the issue of Zookeeper failing to come up and logging the "Unable to load database on disk" error.
Users may observe that Zookeeper fails to come up and logs the "Unable to load database on disk" error. In zookeeper.log , an error sequence similar to the following may be seen:
zookeeper.log
2019-09-10 02:00:47,452 - ERROR [main:FileTxnSnapLog@210] - Parent /isr_change_notification missing for /isr_change_notification/isr_change_0000002662 2019-09-10 02:00:47,453 - ERROR [main:QuorumPeer@453]- Unable to load database on disk java.io.IOException: Failed to process transaction type: 1 error: KeeperErrorCode = NoNode for /isr_change_notification at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:153) at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:223) at org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:417) at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:409) at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:151) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /isr_change_notification at org.apache.zookeeper.server.persistence.FileTxnSnapLog.processTransaction(FileTxnSnapLog.java:211) at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:151) ... 6 more 2019-09-10 02:00:47,455 - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally java.lang.RuntimeException: Unable to run quorum server at org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:454) at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:409) at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:151) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: java.io.IOException: Failed to process transaction type: 1 error: KeeperErrorCode = NoNode for /isr_change_notification at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:153) at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:223) at org.apache.zookeeper.server.quorum.QuorumPeer.loadDataBase(QuorumPeer.java:417) ... 4 more Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /isr_change_notification at org.apache.zookeeper.server.persistence.FileTxnSnapLog.processTransaction(FileTxnSnapLog.java:211) at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:151) ... 6 more
This error is due to Zookeeper's internal snapshot being wiped out or snapshot corruption.
On the Contrail node where Zookeeper fails to come up or keeps bouncing and the aforementioned error is observed in zookeeper.log , we can take the following actions to bring up the Zookeeper service:
Make sure that the Zookeeper service is indeed shut down by service zookeeper stop .
service zookeeper stop
Take a backup of the contents in /var/lib/zookeeper/version-2 to a temp location, and then remove the contents in /var/lib/zookeeper/version-2 by using rm -rf /var/lib/zookeeper/version-2/* .
/var/lib/zookeeper/version-2
temp
rm -rf /var/lib/zookeeper/version-2/*
Restart the Zookeeper service by using service zookeeper start .
service zookeeper start
Run service zookeeper status and monitor zookeeper.log to ensure that the service starts up correctly.
service zookeeper status