DB & SQL

[PostgreSQL] Replication

akasha.park 2025. 5. 19. 14:22

PostgreSQL Logical Replication does not support Cascaded Replication

Streaming Replication에서는 중간 단계의 복제 노드가 다시 다른 복제 노드로 데이터를 복제하는 Cascaded Replication지원합니다

Streaming Replication에서는  복제 체계를 계층적으로 확장 할 수 있습니다.

 

Logical Replication :  데이터를 테이블 단위로 논리적인 형태로 복제

Logical Replication데이터의 논리적 변화를 전송하기 때문에 복제 체인의 중간 노드가 다시 데이터를 복제할 없습니다.

중간 노드가 복제를 담당하면 데이터의 일관성을 보장하기 어려워지기 때문

Cascaded 구조에서는 중간 노드가 성능 병목이 있습니다.

 

 

Streaming Replication설정할 기본 서버(Primary)복제본 서버(Standby) 간의 복제를 시작하고 유지하는 필요한 설정 파일

[Primary Server 설정 (postgresql.conf, pg_hba.conf)]

wal_level : replica 또는 logical로 설정하여 복제 로그를 활성화
max_wal_senders : 복제할 수 있는 동시 연결 수
archive_mode : on으로 설정하여 WAL 아카이빙 활성화 (필요시)
archive_command : WAL 파일 아카이빙 방법
listen_addresses : 복제 노드가 연결할 수 있도록 IP 설정
max_replication_slots : 논리 복제를 위한 슬롯 수 (필요시)

 

pg_hba.conf  : 복제 클라이언트(Standby)에서 접근할 수 있도록 설정
host replication replicator 192.168.1.0/24 md5

 

Standby Server 설정
standby.signal 
파일이 복제본 서버의 data 디렉터리에 존재하면 해당 인스턴스는 Standby 모드로 시작됩니다.

 

postgresql.conf on Standby

primary_conninfo : 복제본이 기본 서버에 연결하는 데 필요한 정보
primary_slot_name : 복제 슬롯 이름 (논리 복제 시)
restore_command :  복구 시 WAL 파일을 복원하는 명령

 

Logical Replication허용하려면 pg_hba.conf 파일에 replication 또는 all 항목을 추가해야 합니다.

Logical Replication일반적인 SQL 데이터베이스 연결이 아닌 복제 전용 연결을 사용합니다.

설정 파일을 수정한 반드시 서버를 재시작하거나 pg_ctl reload 명령어를 사용하여 설정을 다시 로드해야 합니다.

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    replication     replicator      192.168.1.0/24         md5
host    replication     all             0.0.0.0/0              scram-sha-256

 

 

WAL 로그는 세그먼트 집합으로 저장됩니다.
PostgreSQL에서 WAL 세그먼트의 기본 크기는 16MB입니다.

$PGDATA/pg_wal 디렉터리에 각 WAL 파일은 16MB 크기의 바이너리 파일로 구성
PostgreSQL의 소스 코드를 컴파일할 때 XLOG_SEG_SIZE 매크로를 수정하여 크기를 변경할 수 있습니다.
데이터베이스 초기화 시 결정되므로 나중에 변경할 수 없습니다.
세그먼트가 작으면 더 자주 로그 파일을 교체해야 하므로 오버헤드가 증가할 수 있습니다.
세그먼트가 크면 복구 시간이 길어질 수 있습니다.

 

 

[Streaming Replication 및 WAL (Write-Ahead Logging)의 상태를 모니터링하기 위한 시스템 함수]
pg_last_wal_replay_lsn() :  복제본 서버에서 마지막으로 재생된 WAL의 위치를 반환
Logical Replication이나 Physical Replication에서 모두 사용 가능
pg_lsn 형식으로 반환
복제 지연 (Replication Lag) 측정
복제 상태 점검

pg_last_wal_receive_lsn() : 복제본 서버가 마지막으로 수신한 WAL의 위치를 반환
pg_lsn 형식으로 반환
네트워크 지연 평가
수신된 데이터가 실제로 재생되고 있는지 확인

pg_last_xact_replay_timestamp() : 복제본 서버가 마지막으로 재생한 트랜잭션의 타임스탬프를 반환
복제 지연 시간 (Replication Lag) 계산
복제본 서버의 최신 데이터 동기화 상태 확인
실시간 데이터 복제 성능 평가

 

 
PostgreSQL에서 Hot Standby는 Streaming Replication을 통해 복제된 복제본 서버가 읽기 전용 모드로 동작하면서 클라이언트의 쿼리를 처리
High Availability (HA) 와 Load Balancing을 위한 핵심 구성 요소
기본 서버(Primary)에서 발생한 모든 트랜잭션 변경 사항을 복제본 서버(Standby)로 전송하여 데이터 일관성을 유지합니다.
데이터 수정이 아닌 SELECT 쿼리만 허용됩니다.
복제본 서버는 기본적으로 복구 모드로 시작하여 WAL (Write-Ahead Logging) 파일을 적용
INSERT, UPDATE, DELETE, CREATE TABLE 등 쓰기 작업은 불가능
Temporary Table 생성은 기본적으로 제한됨
WAL 스위칭이 불가능합니다.
통계 수집 프로세스는 기본적으로 복제본 서버에서 실행되지 않습니다.

Primary 서버 설정 (postgresql.conf) 와 Standby 서버 설정 (postgresql.conf)  :  hot_standby = on

 

 

pg_catalog.pg_stat_replication :  현재 활성화된 WAL Sender 프로세스의 상태를 보여줍니다.
현재 복제 상태 확인
복제 슬롯 정보
전송 및 재생 지연 (lag) 정보