주키퍼 서버 실행 중 No snapshot found, but there are log entries. Something is broken! 오류가 발생하였습니다. 개발 환경은 다음과 같습니다.
- Windows 10 Pro OS에서 Hyper-V를 사용한 가상화
- 가상화 서버는 CentOS 7버전을 사용
- 오류가 발생하기 직전, 주키퍼 서버가 실행 상태에서 VM을 종료
- VM을 재실행 후 주키퍼 서버 실행 간 오류 발생
VM이 종료될 때 주키퍼 서버가 실행 상태인 것이 명확한 원인이라고 보기는 힘들지만, 오류가 발생하기까지의 프로세스 상 가장 의심가는 부분이기도 합니다.
서버 로그 확인
주키퍼 서버의 서버 로그는 다음 경로에서 확인 할 수 있습니다.
[주키퍼 설치 경로]/logs/zookeeper--server-localhost.localdomain.out
이슈가 발생한 직후 서버 로그는 다음과 같습니다.
(... 중략 ...)
2022-03-29 09:15:18,079 [myid:] - ERROR [main:ZooKeeperServerMain@90] - Unexpected exception, exiting abnormally
java.io.IOException: No snapshot found, but there are log entries. Something is broken!
at org.apache.zookeeper.server.persistence.FileTxnSnapLog.restore(FileTxnSnapLog.java:281)
at org.apache.zookeeper.server.ZKDatabase.loadDataBase(ZKDatabase.java:285)
at org.apache.zookeeper.server.ZooKeeperServer.loadData(ZooKeeperServer.java:484)
at org.apache.zookeeper.server.ZooKeeperServer.startdata(ZooKeeperServer.java:655)
at org.apache.zookeeper.server.NIOServerCnxnFactory.startup(NIOServerCnxnFactory.java:758)
at org.apache.zookeeper.server.ServerCnxnFactory.startup(ServerCnxnFactory.java:130)
at org.apache.zookeeper.server.ZooKeeperServerMain.runFromConfig(ZooKeeperServerMain.java:159)
at org.apache.zookeeper.server.ZooKeeperServerMain.initializeAndRun(ZooKeeperServerMain.java:112)
at org.apache.zookeeper.server.ZooKeeperServerMain.main(ZooKeeperServerMain.java:67)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:140)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:90)
2022-03-29 09:15:18,082 [myid:] - INFO [main:ZKAuditProvider@42] - ZooKeeper audit is disabled.
2022-03-29 09:15:18,089 [myid:] - ERROR [main:ServiceUtils@42] - Exiting JVM with code 1
오류 해결
주키퍼 데이터 디렉토리(디폴트 경로:/tmp/zookeeper)에 일부 파일이 손상된 것으로 의심됩니다. 구축 환경에 따라 데이터 디렉토리 경로는 zookeeper.properties 파일에서 재정의하고 있을 수 있습니다. 데이터 디렉토리를 삭제하고 주키퍼 서버를 재실행합니다.
$ rm -fr /tmp/zookeepr
$ [주키퍼 설치 경로]/bin/zkServer.sh start [주키퍼 설정 파일 경로]
주키퍼 서버가 실행되면서 데이터 디렉토리가 존재하지 않으면 자동으로 재생성합니다.