Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL

단계별 가이드: CentOS 8에서 PostgreSQL 12 스트리밍 복제 설정하기

PostgreSQL 스트리밍 복제(Streaming Replication)는 마스터(Primary) 노드에서 생성되는 WAL(Write-Ahead Log) 데이터를 슬레이브(Standby) 노드에 실시간으로 전송하는 기술입니다. 이를 통해 거의 실시간에 가까운 데이터베이스 복제본을 유지할 수 있으며, 장애 발생 시 빠른 복구와 고가용성(HA), 무중단 서비스 운영이 가능해집니다.

기본 아키텍처는 다음과 같습니다.

  • Master 노드: 읽기/쓰기(Read/Write) 처리, WAL 생성 및 전송
  • Slave 1, Slave 2 노드: 읽기 전용(Read-only)으로 동작하며 WAL을 수신해 데이터 동기화

1. 마스터 노드 설정

1-1. WAL 아카이빙 활성화

마스터 노드의 postgresql.conf 파일을 열어 다음 설정을 추가하거나 수정합니다.

archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/12/archive/%f'
wal_level = replica
max_wal_senders = 3
  • wal_level = replica: 복제에 필요한 최소한의 WAL 정보를 기록합니다.
  • max_wal_senders = 3: 동시에 접속할 수 있는 복제 슬레이브의 최대 수를 지정합니다.

1-2. 복제 연결 허용

pg_hba.conf 파일에 슬레이브 노드가 복제 계정으로 접속할 수 있도록 규칙을 추가합니다.

# TYPE      DATABASE    USER       ADDRESS              METHOD
host        replication repluser   192.168.1.20/32      md5

1-3. 복제 전용 사용자 생성

psql 또는 SQL 클라이언트에서 복제 전용 역할(Role)을 생성합니다.

CREATE ROLE repluser WITH REPLICATION LOGIN PASSWORD 'securepass';

위 설정을 모두 마쳤다면 변경 사항을 적용하기 위해 마스터 노드에서 PostgreSQL 서비스를 재시작합니다.

sudo systemctl restart postgresql-12

2. 슬레이브 노드 설정

2-1. 마스터로부터 베이스 백업 수행

슬레이브 노드에서 pg_basebackup 유틸리티를 사용해 마스터의 데이터 디렉터리를 복제합니다.

sudo -u postgres pg_basebackup -h master_ip -D /var/lib/pgsql/12/data -U repluser -P -R
  • -P: 백업 진행 상황을 표시합니다.
  • -R: 복제 관련 설정 파일을 자동으로 생성합니다.

2-2. 스탠바이 모드 설정

PostgreSQL 11 이전 버전에서는 /var/lib/pgsql/12/data/recovery.conf 파일을 직접 작성했지만, PostgreSQL 12부터는 recovery.conf가 폐지되고 대신 standby.signal 파일과 postgresql.conf 설정을 사용합니다. 참고로 위의 pg_basebackup -R 옵션을 사용하면 이 과정이 자동으로 처리됩니다.

수동으로 설정할 경우의 예시는 다음과 같습니다.

# standby.signal 파일 생성
touch /var/lib/pgsql/12/data/standby.signal

# postgresql.conf에 추가
primary_conninfo = 'host=master_ip port=5432 user=repluser password=securepass'
restore_command = 'cp /var/lib/pgsql/12/archive/%f "%p"'

2-3. 슬레이브 노드 시작

설정이 완료되면 슬레이브 노드에서 PostgreSQL을 시작하고 부팅 시 자동 실행되도록 등록합니다.

sudo systemctl start postgresql-12
sudo systemctl enable postgresql-12

3. 복제 상태 확인

마스터 노드에서 다음 쿼리를 실행하면 현재 접속 중인 복제 슬레이브 목록을 확인할 수 있습니다.

SELECT client_addr, state, sync_state
FROM pg_stat_replication;

정상적으로 복제가 설정되었다면 다음과 같은 결과가 출력됩니다.

 client_addr   |  state    | sync_state
---------------+-----------+------------
 192.168.1.20  | streaming | async

state 값이 streaming이면 WAL이 실시간으로 전송되고 있는 것입니다.

4. 수동 페일오버(Failover)

마스터 노드에 장애가 발생한 경우 다음 순서로 슬레이브를 새 마스터로 승격(Promote)할 수 있습니다.

  1. 장애가 발생한 기존 마스터와의 복제 연결을 해제합니다.
  2. 승격할 슬레이브에서 recovery_target_timeline = 'latest' 설정을 확인합니다(PostgreSQL 12에서는 postgresql.conf에 설정).
  3. 해당 슬레이브에서 PostgreSQL을 재시작하여 새 마스터로 승격시킵니다.
  4. 나머지 슬레이브들이 pg_stat_replication을 통해 새 마스터에 정상 접속하는지 확인합니다.

결론

CentOS 8 환경에서 PostgreSQL 12 스트리밍 복제를 구축하는 핵심 절차는 다음과 같습니다. 먼저 마스터 노드에서 WAL 아카이빙과 복제 접근 권한을 설정하고, 슬레이브 노드에서는 베이스 백업과 스탠바이 모드 설정을 진행합니다. 이후 pg_stat_replication 뷰로 복제 상태를 검증하고, 필요 시 수동 페일오버를 통해 슬레이브를 새 마스터로 승격하면 됩니다. 이러한 구성은 데이터 손실을 최소화하면서 서비스 가용성을 크게 향상시키는 안정적인 고가용성 아키텍처의 기반이 됩니다.