PostgreSQL 데이터베이스 시스템에서 고가용성(High Availability)과 데이터 복구를 위해 스트리밍 복제본은 필수적인 구성 요소입니다. 하지만 때로는 슬레이브(Replica) PostgreSQL 인스턴스가 손상되거나 동기화가 깨져 복구가 필요한 상황이 발생할 수 있습니다. 이럴 때 pg_basebackup 유틸리티를 활용하면 가장 간단하고 확실하게 슬레이브를 복구할 수 있습니다. 이 글에서는 망가진 PostgreSQL 슬레이브를 복구하는 과정을 개발자 주니어 및 개발 입문자의 눈높이에 맞춰 쉽고 자세히 알아보겠습니다.
목차
- PostgreSQL 스트리밍 복제본과 슬레이브의 중요성
- 슬레이브 복구의 핵심: pg_basebackup
- 단계별 슬레이브 복구 과정 상세 설명
-
- 기존 슬레이브 데이터 디렉토리 정리
- 임시 Docker 컨테이너를 이용한 pg_basebackup 실행
- pg_basebackup의 주요 옵션: -R
- Docker Swarm으로 슬레이브 서비스 재시작
-
- 왜 이 방법이 가장 간단하고 확실할까요?
- 슬레이브 복구, 이것만 기억하세요!
PostgreSQL 스트리밍 복제본과 슬레이브의 중요성
PostgreSQL 스트리밍 복제는 마스터(Primary) 데이터베이스의 모든 변경 사항을 슬레이브 데이터베이스로 실시간으로 전송하여 동일한 데이터를 유지하는 기술입니다. 이를 통해 마스터에 장애가 발생했을 때 빠르게 슬레이브로 역할을 전환하여 서비스 중단을 최소화하고, 데이터 분석 또는 백업용으로 슬레이브를 활용하여 마스터의 부하를 줄일 수 있습니다. 슬레이브 인스턴스는 이러한 고가용성 및 로드 밸런싱 전략의 핵심입니다.
슬레이브 복구의 핵심: pg_basebackup
pg_basebackup은 실행 중인 PostgreSQL 클러스터의 베이스 백업을 만드는 데 사용되는 유틸리티입니다. 이 도구는 마스터 PostgreSQL 서버의 전체 데이터 디렉토리를 복사하여 새로운 슬레이브 인스턴스를 시작하는 데 필요한 모든 파일을 생성해줍니다. 복제 설정 파일까지 자동으로 생성해주는 강력한 기능을 제공하여 슬레이브 복구 작업을 크게 단순화합니다.
단계별 슬레이브 복구 과정 상세 설명
손상된 PostgreSQL 슬레이브를 복구하는 가장 간단하고 확실하며 오류 발생 가능성이 낮은 방식은 다음과 같습니다. 먼저 Slave 컨테이너를 종료합니다.
1. 기존 슬레이브 데이터 디렉토리 정리
슬레이브 머신에서 기존 디렉토리(ex: /data/postgres/slave)를 완전히 비우고 권한을 설정해야 합니다. 이는 이전 시도의 "잔여물"을 제거하는 과정입니다. 이 과정은 불필요한 파일이나 손상된 데이터를 제거하여 깨끗한 상태에서 새로운 복제본을 생성하기 위함입니다.
2. 임시 Docker 컨테이너를 이용한 pg_basebackup 실행
슬레이브 머신에서 임시 Docker 컨테이너를 띄워서 pg_basebackup 명령을 실행합니다. 이 임시 컨테이너는 마스터 PostgreSQL에 직접 연결하여 pg_basebackup을 실행하게 됩니다. 데이터는 슬레이브 호스트의 경로(볼륨 마운트된 곳)에 직접 저장됩니다.
예시 명령어는 docker run --rm -v ... --network host my-local-psql:11 pg_basebackup ... 와 유사할 수 있습니다. --rm 옵션은 컨테이너 종료 시 자동으로 삭제되도록 하며, -v 옵션으로 슬레이브의 데이터 경로를 마운트하고, --network host를 통해 마스터에 직접 연결합니다
docker run --rm \
-v /path/to/backup/directory:/backup \
--network host \
postgresql:14.18 \
pg_basebackup -h <PostgreSQL_Host_IP> -p <PostgreSQL_Port> -U <PostgreSQL_User> -D /backup -F p -Xs -P -v
3. pg_basebackup의 주요 옵션: -R
pg_basebackup을 실행할 때 -R 옵션을 사용하는 것이 중요합니다. 이 옵션은 standby.signal 파일과 postgresql.auto.conf 파일을 자동으로 올바르게 생성하게 합니다. 이 파일들은 슬레이브가 마스터로부터 복제를 시작하는 데 필수적인 설정 정보를 담고 있습니다.
4. Docker 슬레이브 서비스 재시작
pg_basebackup이 성공적으로 완료되면, 슬레이브 컨테이너를 시작합니다. 이 과정은 새로운 베이스 백업 데이터로 초기화된 슬레이브 인스턴스를 정상적으로 시작시키는 단계입니다. 이로써 슬레이브는 마스터로부터 스트리밍 복제를 다시 시작하게 됩니다.
왜 이 방법이 가장 간단하고 확실할까요?
이 방법은 기존의 복잡한 수동 설정이나 파일 복사 오류 가능성을 최소화합니다. 임시 컨테이너를 활용하여 pg_basebackup을 실행함으로써 환경의 격리성을 유지하고, -R 옵션을 통해 복제에 필요한 핵심 설정 파일들을 자동으로 생성하기 때문에 사용자 개입을 줄이고 휴먼 에러를 방지합니다. 따라서 Docker Swarm과 같은 컨테이너 환경에서 PostgreSQL 스트리밍 복제본을 설정하는 데 가장 효율적이고 문제 발생 소지가 적은 접근 방식입니다.
슬레이브 복구, 이것만 기억하세요!
PostgreSQL 슬레이브 복구는 pg_basebackup을 활용하는 것이 가장 효과적입니다. 기존 데이터 디렉토리를 정리하고, 임시 컨테이너로 pg_basebackup -R을 실행하여 마스터로부터 베이스 백업을 받은 후, 슬레이브 서비스를 재시작하는 단계는 복제본을 안정적으로 재구축하는 핵심 과정입니다. 이 방법을 통해 여러분의 PostgreSQL 복제 환경을 더욱 견고하게 관리할 수 있습니다.
'개발' 카테고리의 다른 글
인메모리 분석의 강자: 덕디비(DuckDB) 소개 (0) | 2025.07.25 |
---|---|
데이터 변환의 새로운 기준: dbt(data build tool) 완벽 이해하기 (0) | 2025.07.25 |
PostgreSQL 보안의 핵심: pg_hba.conf 파일 완벽 이해하기! (2) | 2025.07.24 |
Airflow 마스터하기: CeleryExecutor와 Redis로 분산 작업 실행! (0) | 2025.07.24 |
Docker 이미지 캐싱: Google Cloud Build에서 빌드 속도 높이기! (0) | 2025.07.24 |