WAL LogStore 백엔드 개요

WAL LogStore 백엔드 개요

이 문서에서는 WAL(write-ahead log, 쓰기 전 로그) LogStore 백엔드에 대한 개요를 설명해 드려요. WAL LogStore는 이전 버전의 Consul에서 사용되던 BoltDB 백엔드를 대체합니다.

출처: 문서

본문

WAL 대 BoltDB

WAL은 회전하는 추가 전용(append-only) 로그 파일을 가진 전통적인 로그를 구현해요. WAL은 BoltDB 백엔드가 제공하는 기존 LogStore의 많은 문제를 해결합니다. BoltDB LogStore는 copy-on-write BTree로, 추가 전용이고 쓰기가 많은 워크로드에 최적화되어 있지 않아요.

BoltDB 저장 확장성 문제

기존 BoltDB 로그 저장소는 전체 키-값 데이터베이스로 설계되었기 때문에 추가 전용 로그를 디스크에 비효율적으로 저장해요. 단일 파일이며 계속 커지기만 합니다. Consul이 상태의 새 스냅샷을 만들 때 정기적으로 수행하는 가장 오래된 로그 삭제는 파일에 빈 공간을 남겨요. BoltDB가 향후 쓰기에 이 공간을 재사용할 수 있도록 빈 공간은 freelist에서 추적해야 합니다. 반면, 단순한 세그먼트 로그는 디스크에서 가장 오래된 로그 파일을 삭제할 수 있어요.

정상 볼륨의 2배 또는 3배 수준의 쓰기 폭발이 발생하면 로그 파일이 갑자기 정상 상태 크기의 몇 배로 커질 수 있어요. Consul이 다음 스냅샷을 찍고 가장 오래된 로그를 잘라낸 후에는, 결과 파일이 대부분 빈 공간이 됩니다.

빈 공간을 추적하기 위해 Consul은 매번 쓰기마다 추가 메타데이터를 디스크에 기록해야 해요. 메타데이터는 빈 페이지 수에 비례하므로, 큰 쓰기 폭발 후에는 쓰기 지연 시간이 증가하는 경향이 있습니다. 어떤 경우에는 그 지연이 클러스터의 심각한 성능 저하를 일으킵니다.

갑작스러운 로그 데이터 폭발과 관련된 위험을 완화하기 위해 Consul은 LogStore에 많은 로그가 축적되지 않도록 제한하려 해요. 상당히 큰 BoltDB 파일은 트리가 더 깊고 freelist가 더 커서 추가 쓰기가 더 느립니다. 이러한 이유로 Consul은 디스크 IO를 최적으로 사용하는 것보다는 BoltDB를 작게 유지하도록 스냅샷, 로그 잘라내기, 로그 기록 유지와 관련된 기본 옵션을 적극적으로 설정했습니다.

하지만 파일이 클수록 큰 freelist를 가지거나 쓰기 폭발 후 갑자기 freelist가 형성될 가능성이 높아요. 이러한 이유로 Consul은 스냅샷, 로그 잘라내기, 로그 기록 유지와 관련된 많은 기본 옵션이 디스크 IO를 더 효율적으로 사용하지 않고 BoltDB를 작게 유지합니다.

Raft 복제 용량 문제 같은 다른 신뢰성 문제는 BoltDB에 더 많은 로그를 저장함으로써 생기는 성능 문제 없이 훨씬 더 간단하게 해결할 수 있어요.

WAL은 저장 문제를 다르게 접근한다

직접 측정하면 WAL은 더 간단한 저장 문제를 해결하기 때문에 BoltDB보다 더 뛰어난 성능을 보여줘요. 그럼에도 불구하고 일부 사용자는 동일한 구성과 워크로드에서 업그레이드로 인한 뚜렷한 성능 개선을 느끼지 못할 수도 있어요. 이 경우 WAL의 이점은 더 많은 로그를 보존해도 쓰기 성능에 영향을 주지 않는다는 것입니다. 결과적으로 느린 스냅샷으로 디스크 IO를 줄이거나, 느린 팔로워가 클러스터 상태를 따라잡을 수 있도록 로그를 유지하는 전략이 모두 가능해져 배포의 신뢰성이 높아집니다.

WAL 품질 보증

WAL 백엔드는 개발 과정에서 철저하게 테스트되었어요.

  • WAL의 모든 구성 요소(메타데이터 관리, 로그 파일 인코딩, 실제 파일 시스템 상호작용)가 추상화되어 있어, 단위 테스트로 재현하기 어려운 디스크 장애를 시뮬레이션할 수 있습니다.
  • 애플리케이션 수준 지능형 크래시 탐색기(ALICE)를 사용해 수천 가지 가능한 크래시 장애 시나리오를 철저히 시뮬레이션했어요. WAL은 모든 시나리오에서 올바르게 복구되었습니다.
  • 체크섬 검증을 활성화한 성능 테스트 클러스터에서 수백 개의 테스트를 실행했으며 데이터 손실이나 손상이 발견되지 않았어요. WAL을 기본 백엔드로 만들기 전에 계속 테스트할 것입니다.
  • 디스크 지속성이 데이터에 얼마나 복잡하고 중요한 일인지 잘 알고 있어요. 1.15 이상으로 업그레이드한 후 다양한 규모의 많은 사용자가 자체 환경에서 WAL을 시도하고 성공 또는 실패를 보고하여, 향후 릴리스에서 새 클러스터의 기본값으로 BoltDB를 자신 있게 대체할 수 있기를 바랍니다.

더 알아보기 (Learn more)