pgbackrest는 더 이상 유지보수 되지 않음
2 weeks ago
23
- PostgreSQL용 백업·복구 도구로서 대규모 환경까지 확장되도록 설계됐지만, 이제 유지보수를 종료 함
- bug fix, PR review, 이슈 대응, 신규 기능 개발이 모두 중단됐고, 불규칙하게 끌고 가기보다 명확히 멈추는 쪽을 택함
- 전체·differential·incremental 백업과 block-level backup, 중단된 작업 재개, delta restore를 지원해 변경된 부분만 저장·복구할 수 있음
- 로컬·원격 환경을 아우르는 protocol layer와 multiple repositories를 갖추고, TLS·SSH 연결과 S3·Azure·GCS 호환 object store를 통해 운영 범위를 넓힘
- checksum, WAL segment 대기, fsync, page checksum 검증 같은 무결성 보장 장치를 폭넓게 갖춘 도구였지만, 앞으로는 fork가 나오더라도 별도 신뢰를 새로 쌓아야 함
유지보수 종료와 프로젝트 상태
- pgBackRest는 PostgreSQL용 백업·복구 도구이지만, 현재는 더 이상 유지보수되지 않음
- 프로젝트 작업을 중단했고, 앞으로는 bug fix, PR review, 이슈 대응, 신규 기능 개발에 시간을 쓰지 않겠다고 밝힘
- 기존 후원과 고용 형태가 끊긴 뒤에도 유지보수를 이어가려 했지만, 프로젝트를 계속 유지할 만큼의 직무 기회와 스폰서십을 확보하지 못함
- 유지보수를 불규칙하거나 불완전하게 이어가기보다, 명확하게 종료하는 편이 더 낫다고 봄
- 향후 누군가가 fork할 수는 있지만, 그 경우에는 새 프로젝트로 간주되며 새로운 유지보수자가 별도로 신뢰를 쌓아야 함
프로젝트의 핵심 기능
- 대규모 PostgreSQL 환경까지 확장 가능한 백업·복구를 목표로 하며, 현재 안정 버전은 v2.58.0임
- 병렬 처리와 lz4, zstd 같은 압축 방식을 활용해 백업 시 병목이 되기 쉬운 압축 비용을 줄이도록 설계됨
- 전체, differential, incremental 백업을 지원하고, 파일 단위뿐 아니라 block-level backup으로 변경된 부분만 복사해 저장 공간을 절약함
- 중단된 백업을 재개할 수 있고, manifest의 체크섬과 비교해 이미 복사한 파일의 무결성을 다시 확인함
- delta restore에서는 백업에 없는 파일을 먼저 제거하고 남은 파일의 체크섬을 대조해, 일치하는 파일은 그대로 두고 필요한 파일만 복구함
원격 운용과 저장소 설계
- 자체 protocol layer를 통해 로컬과 원격 환경 모두에서 백업, 복구, 아카이브 작업을 수행할 수 있으며, 원격 연결에는 TLS/SSH를 사용함
- 같은 protocol layer로 PostgreSQL 질의 인터페이스도 제공해, PostgreSQL에 직접 원격 접속하지 않고도 작업할 수 있어 보안성을 높임
- multiple repositories를 지원해, 빠른 복구용 로컬 저장소와 장기 보관·중복성 확보용 원격 저장소를 함께 둘 수 있음
- 저장소는 S3, Azure, GCS 호환 object store에도 둘 수 있어 용량과 보존 기간을 크게 늘릴 수 있음
- 저장소 자체를 암호화할 수 있어 백업 데이터가 어디에 저장되든 보호 가능함
무결성과 일관성 보장 방식
- 백업의 모든 파일에 대해 checksum을 계산하고, restore나 verify 때 다시 검사함
- 파일 복사가 끝난 뒤에는 백업을 일관된 상태로 만들기 위해 필요한 모든 WAL segment가 저장소에 도착할 때까지 대기함
- 모든 작업에서 파일과 디렉터리 수준의 fsync를 사용해 내구성을 확보함
- PostgreSQL에서 page checksum이 켜져 있으면, 전체 백업에서는 모든 파일의 페이지 체크섬을 검증하고 differential·incremental 백업에서는 변경된 파일만 검증함
- 페이지 체크섬 검증에 실패해도 백업은 중단되지 않지만, 어떤 페이지가 실패했는지 경고를 남겨 유효한 백업이 만료되기 전에 page-level corruption을 조기에 찾을 수 있게 함
WAL 처리와 복구 성능 최적화
- WAL push/get 전용 명령을 제공하며, 둘 다 병렬 처리와 비동기 실행을 지원해 PostgreSQL 응답 시간을 최대한 빠르게 맞추도록 설계됨
- WAL push는 동일한 WAL segment가 여러 번 들어오면 자동으로 중복을 제거하고, 내용이 다르면 오류를 발생시킴
- 비동기 WAL push는 다른 프로세스가 전송을 맡아 WAL segment를 병렬 압축하므로, 쓰기량이 매우 높은 데이터베이스에서 특히 중요함
- 비동기 WAL get은 압축 해제된 WAL queue를 로컬에 유지해 replay 전에 바로 공급할 수 있게 하며, 지연 시간이 큰 연결이나 S3 같은 저장소에서 특히 이점이 커짐
- WAL push와 get 모두 PostgreSQL 버전과 system identifier를 비교해 데이터베이스와 저장소가 맞는지 확인하므로, WAL archive 위치를 잘못 구성할 가능성을 크게 줄임
운영 유연성과 호환성
- backup retention과 archive expiration 정책을 full, differential, WAL 단위로 나눠 설정할 수 있어 원하는 기간 범위를 커버할 수 있음
- 백업을 PostgreSQL cluster 형식 그대로 저장할 수 있고, 압축을 끄고 hard link를 켜면 저장소 snapshot 위에서 PostgreSQL cluster를 직접 기동할 수도 있음
- 이런 방식은 전통적인 restore에 시간이 오래 걸리는 terabyte-scale database에서 유리함
- tablespace를 완전히 지원하며, restore 시 각 tablespace를 다른 위치로 옮기거나 한 위치로 일괄 remap할 수 있음
- 파일과 디렉터리 링크도 지원해, restore 때 원래 위치 유지, 일부 또는 전체 remap, 일반 파일·디렉터리로 변환 복구까지 가능함
- PostgreSQL 10개 버전을 지원하며, 현재 지원 중인 5개 버전과 EOL된 최근 5개 버전을 포함해 업그레이드 시간을 넉넉하게 확보하도록 구성됨
참고 리소스와 후원 상태
-
Homepage
-
Tech blog
- pgbackrest는 더 이상 유지보수 되지 않음