PostgreSQL 스트리밍 복제와 페일오버 전략
이 글은 streaming replication postgres 설정부터 async와 sync 복제 비교, postgres 페일오버 전략 및 운영 체크리스트를 정리한 기술문서
목차
소개
데이터 가용성과 무중단 운영을 위해 PostgreSQL 스트리밍 복제는 기본 수단이다. 초보자도 이해하기 쉽게 복제의 원리, 설정 흐름, 그리고 페일오버 전략을 정리한다. 핵심은 데이터 일관성과 복구 시간 단축이다.
스트리밍 복제 개요
스트리밍 복제란
스트리밍 복제는 primary에서 생성된 WAL(Write-Ahead Log)을 standby가 실시간으로 받아 적용하는 방식이다. 네트워크 지연을 제외하면 standby가 거의 실시간으로 데이터 변경을 반영한다. 운영에서는 복제 지연과 데이터 손실 가능성을 고려해야 한다.
async vs sync replication 비교
비동기(async) 복제는 쓰기 작업이 primary에서 완료된 후 WAL이 전송된다. 응답성이 빠르지만 장애 시 일부 데이터 손실이 발생할 수 있다. 동기(sync) 복제는 트랜잭션 커밋 시 지정된 standby가 WAL을 수신하고 확인해야 완료된다. 데이터 안전성은 높아지지만 쓰기 지연이 커질 수 있다.
요약:
- async: 빠른 응답성, 복구 시 일부 손실 가능
- sync: 높은 내구성, 잠재적 쓰기 지연
설정 개요
설정은 primary와 standby를 준비하고 네트워크, 인증, 복제 슬롯 등을 구성하는 순서로 진행한다. 아래 예시는 기본 흐름을 보여준다. 실제 운영 환경에서는 보안, 모니터링, 백업 정책을 함께 고려한다.
Primary 설정
postgresql.conf와 pg_hba.conf에서 복제 관련 옵션을 활성화한다.
# postgresql.conf
wal_level = replica
max_wal_senders = 5
wal_keep_size = '512MB'
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'
# 동기 복제를 사용할 경우
synchronous_commit = remote_apply
synchronous_standby_names = 'standby1, standby2'
# pg_hba.conf
host replication repl_user 192.168.0.0/24 md5
Standby 설정
standby는 base backup으로 primary 데이터를 가져오고 recovery 구성으로 연결한다.
# primary에서 실행
pg_basebackup -h primary_host -D /var/lib/postgresql/14/main -U repl_user -P -R
# 생성된 recovery.conf (PostgreSQL 12 이하) 또는 standby.signal + primary_conninfo 사용
# 예시 primary_conninfo 설정은 postgresql.auto.conf 또는 postgresql.conf에 추가
primary_conninfo = 'host=primary_host port=5432 user=repl_user password=secret'
페일오버 전략
페일오버는 장애 감지와 역할 전환 방식에 따라 수동 또는 자동으로 나뉜다. 전략 선정은 RTO(복구 시간 목표)와 데이터 손실 허용치(RPO)에 기반한다.
수동 페일오버
운영자가 상태를 확인하고 수동으로 standby를 승격한다. 결정 과정이 명확하고 예측 가능하다. 그러나 사람 개입으로 지연이 발생할 수 있다.
- 장점: 통제 가능성, 예측 가능한 전환
- 단점: 장애 대응 속도 느림
자동 페일오버
모니터링 도구가 장애를 감지하면 자동으로 승격을 수행한다. 툴 예로 Patroni, repmgr, pg_auto_failover가 있다. 자동화는 빠른 복구를 보장하지만 잘못된 탐지로 인한 분리(brain split) 위험을 줄이기 위한 설계가 필요하다.
# repmgr 패턴(예시)
# repmgr.conf: primary/standby 역할 정의 및 모니터링 설정
node_id=1
node_name='primary'
conninfo='host=primary user=repmgr dbname=repmgr'
failover=automatic
운영에서 고려할 점
모니터링과 테스트
정기적인 페일오버 테스트와 복제 지연 모니터링이 필수다. WAL 전송률, replay 지연, replication slot 사용량을 지속 관찰한다.
복구 시나리오
- primary 장애 발생: 가장 최근의 안정된 standby를 승격
- 분리된 primary 재합류: 재동기화 전 초기화 또는 재복제 수행
- 데이터 손상 발생: 백업에서 point-in-time 복구(PITR) 수행
실무 체크리스트
- replication user와 최소 권한 설정
- 네트워크 대역폭과 지연 테스트
- 복제 슬롯 사용으로 WAL 삭제 방지 정책 설정
- 정기적인 pg_basebackup 및 아카이브 검증
- 자동화 도구와 수동 절차 문서화
결론
streaming replication postgres 설정은 비교적 단순하지만, 복제 모드 선택과 페일오버 설계가 핵심이다. async sync replication postgres의 특성을 이해하고, 운영환경에 맞는 페일오버 전략을 마련하면 가용성과 데이터 안전성을 균형 있게 확보할 수 있다. 마지막으로 자동화된 모니터링과 정기적인 장애 복구 연습이 운영 성공의 핵심이다.