TIL

DB disk 터질뻔한 후기

하얀잔디 2025. 9. 27. 19:28

PostgreSQL을 운영하다 보면 WAL(Write Ahead Log) 아카이빙을 꼭 신경 써야 함!!

 

특히 DB  2원화 할때요!


저도 최근에 WAL 아카이빙 설정을 하다가 디스크가 꽉 차버리는 아찔한 상황을 겪었습니다.

 

 

왜 이런 문제가 생겼나?

PostgreSQL에서 WAL 아카이빙을 설정할 때, 아카이브 경로를 잘못 잡으면 로그 파일들이 계속 누적되는데요,
저는 아카이빙 디렉토리를 따로 파티션에 두지 않고 / 루트 근처 경로에 설정해놨는데, 이게 문제였어요
WAL 파일이 순식간에 쌓이면서 루트 파티션 용량이 꽉 차는 상황이 발생했고, 자칫하면 DB가 뻗을 수도 있었죠.

 

 

해결 방법

다행히 DB 자체는 정상 동작 중이었고, 바로 아카이빙 경로를 전용 파티션으로 옮겼습니다.
명령어는 아래처럼 단순합니다:

 
# 아카이브 디렉토리 생성
sudo -iu postgres mkdir -p /var/lib/postgresql/wal_archive
sudo chown postgres:postgres /var/lib/postgresql/wal_archive
sudo chmod 700 /var/lib/postgresql/wal_archive​
 

이후 PostgreSQL 설정을 변경합니다

 
ALTER SYSTEM SET archive_mode = on;
ALTER SYSTEM SET archive_command = 'test ! -f /var/lib/postgresql/wal_archive/%f && cp %p /var/lib/postgresql/wal_archive/%f';
SELECT pg_reload_conf();

이렇게 하면 WAL 파일이 /var/lib/postgresql/wal_archive 경로로 안전하게 쌓이고, 기존 파티션에는 부담을 주지 않습니다.

 

 

느낀 점

  • DB 로그는 반드시 전용 파티션에: WAL 파일은 생각보다 빠르게 쌓어요.
  • 메인 파티션에 두면 시스템 전체가 멈출 수 있습니다.
  • 설정 테스트는 꼼꼼히: archive_command 경로나 권한을 잘못 잡으면 그대로 장애로 이어질 수 있습니다.
  • 장애 전조를 빨리 캐치: 다행히 디스크 모니터링을 하던 중에 빨리 발견했기 때문에 큰 사고는 피했습니다.

 

 

저처럼 디스크 터질 뻔한 경험을 하지 않으시려면, WAL 아카이빙은 꼭 전용 디렉토리(전용 파티션)에 구성하시길 추천드립니다