주키퍼 오래된 스냅샷 및 트랜잭션 로그 삭제하기 zookeeper delete old snapshot and transactional log

Ongoing Data Directory Cleanup

Zookeeper data directory에는 znode들의 복사데이터드이 특정한 형식으로 쌓여 있습니다. 이것들은 스냅샷(snapshot) 과 트랜잭션로그(transactional log) 라고 부르는데 znode들에 변화가 생길 때 마다 Zookeeper는 이 변화된 내용을 스냅샷과 트랜잭션 로그에 추가(append) 합니다.
스냅샷과 트랜잭션 로그의 크기가 점점 커지면 현재 상태의 znode값으로 새로운 스냅샷과 트랜잭션 로그 파일이 생성 됩니다.
스냅샷이 생성되는 동안 들어오는 값의 변화에 대해서는 이전 로그 파일에 그대로 추가 합니다. 이러한 이유로 어떤 트랜잭션은 새로생긴 스냅샷보다 더 오래된 예전 스냅샷에 최신 정보가 있을 수 도 있습니다.

특별한 설정을 하지 않았으면 Zookeeper를 사용한다고 있다면 오래된 스냅샷과 트랜잭션 로그 파일들을 삭제 하지 않습니다.
ZooKeeper document를 읽어 보면 오래된 파일을 삭제하는것을 운영자의 책임이라고 명시하고 있습니다.
PurgeTxnLog 라는 클래스를 제공해 주고 있고, 운영자는 어느 시점에는 반드시 이 클래스를 이용해서 오래된 스냅샷과 트랜잭션 로그 파일을 지워야 할 때가 옵니다. (snapRetainCount와 autopurge 를 별도로 설정하지 않은 경우)

zookeeper 공식 도큐먼트에 나와있는 방식은 아래와 같고,
각각의 환경에 맞게 zookeeper, slf4j, slf4j-log4jl2, log4j 라이브러리 버전 및 패스를 맞춰주면 무리 없이 돌아 갑니다.

1
java -cp zookeeper.jar:lib/slf4j-api-1.7.5.jar:lib/slf4j-log4j12-1.7.5.jar:lib/log4j-1.2.17.jar:conf org.apache.zookeeper.server.PurgeTxnLog <dataDir> <snapDir> -n <count>

저는 제 환경(zookeeper-3.4.6)에서 3개만 남겨놓고 모두 삭제해 봤습니다.

1
java -cp /nakjunizm/platform/zookeeper/zookeeper-3.4.6.jar:/nakjunizm/platform/zookeeper/lib/slf4j-api-1.6.1.jar:/nakjunizm/platform/zookeeper/lib/slf4j-log4j12-1.6.1.jar:/nakjunizm/platform/zookeeper/lib/log4j-1.2.16.jar:/nakjunizm/platform/zookeeper/conf org.apache.zookeeper.server.PurgeTxnLog /data/zookeeper /data/zookeeper -n 3

** ZooKeeper 클러스터 중 한개 노드에서 실행 하면 모든 노드가 다 적용 될 것 처럼 생각 될 수 있는데 않습니다. 직접 실행 해 보니 명령어를 실행 한 노드에만 유효 합니다. **

자동으로 삭제할순 없을까?

3.4.0 이상에서는 이 과정을 자동으로 할 수 있게 autupurge.snapRetainCount 와 autopurge.purgeInterval 이라는 옵션을 제공해 줍니다.

  • autopurge.snapRetainCount : (No Java system property) 가지고 있을 스냅샷과 트랜잭션로그의 갯수. 디폴트3, 최소3
  • autopurge.purgeInterval : (No Java system property) purge 할 시간. 디폴트0. 1 이상의 양의정수로 설정 할 경우 해당 숫자의 시간 단위로 실행.

제 zoo.cfg 파일에 24시간 마다 purge하고 마지막 세개의 스냅샷만 남기도록 해당 설정을 넣어 봤습니다.

1
2
autopurge.snapRetainCount=3
autopurge.purgeInterval=24

** 재기동을 하지 않으면 해당 설정은 적용되지 않습니다. **

Reference

https://zookeeper.apache.org/doc/r3.6.0/zookeeperAdmin.html

Share