본문 바로가기

DevOps & Infra/Zookeeper, kafka

[Infrastructure/Zookeeper, kafka] 주키퍼 서버 실행 중 "No snapshot found, but there are log entries. Something is broken!" 오류

주키퍼 서버 실행 중 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 [주키퍼 설정 파일 경로]

주키퍼 서버가 실행되면서 데이터 디렉토리가 존재하지 않으면 자동으로 재생성합니다.