PostgreSQL logical replication 설정 예제
logical replication을 이해하기 쉽도록 주요 개념과 설정 절차, 복제 슬롯 관리 및 점검 방법을 예제로 정리한 기술 문서
목차
소개
logical replication은 테이블 단위로 데이터 변경을 전송하는 PostgreSQL 복제 방식이다. 물리 복제와 달리 특정 테이블만 복제하거나 다른 버전의 서버로 데이터 전송이 가능하다. 이 글은 logical replication postgres 예제와 postgres logical replication 설정, replication slot logical postgres 관련 내용을 단계별로 설명한다.
핵심 개념
publication과 subscription
publication은 변경을 발행하는 쪽이며, subscription은 발행된 변경을 구독하여 적용하는 쪽이다. publication에는 테이블 단위로 포함 여부를 지정한다.
replication slot
logical replication에서는 복제 슬롯이 생성되어 WAL의 필요한 부분을 유지한다. 복제 슬롯을 통해 데이터를 안정적으로 전송하고, 슬롯을 적절히 관리해야 WAL이 쌓이는 문제를 방지할 수 있다.
사전 준비
- PostgreSQL 버전 10 이상 권장
- primary와 subscriber 간 네트워크 연결 확인
- 복제 전용 계정 생성 및 적절한 권한 부여
- postgresql.conf 및 pg_hba.conf 설정 점검
설정 예제: 기본 흐름
다음 예제는 primary(발행자)와 subscriber(구독자)를 동일한 네트워크에서 설정하는 절차를 보여준다. 각 명령은 psql에서 실행하는 SQL 예제이다.
1) primary 설정
-- wal_level 설정: logical 필요
ALTER SYSTEM SET wal_level = 'logical';
-- 필요한 추가 설정(예: max_replication_slots 등)
ALTER SYSTEM SET max_replication_slots = '10';
ALTER SYSTEM SET max_wal_senders = '10';
-- 서버 재시작 필요
-- 복제 계정 생성
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'secure_password';
-- pg_hba.conf에 복제 접속 허용 항목 추가 예시
# host replication replicator 192.168.1.0/24 md5
-- publication 생성: 모든 테이블 또는 특정 테이블
CREATE PUBLICATION pub_all FOR ALL TABLES;
-- 또는 특정 테이블만
CREATE PUBLICATION pub_sales FOR TABLE sales, customers;
2) subscriber 설정
-- 구독자 측에서 subscription 생성
CREATE SUBSCRIPTION sub_to_primary
CONNECTION 'host=primary_host port=5432 user=replicator password=secure_password dbname=yourdb'
PUBLICATION pub_sales;
subscription 생성 시 초기 데이터 동기화가 필요하면 CREATE SUBSCRIPTION에서 기본적으로 데이터를 복사한다. 필요에 따라 WITH (copy_data = false)로 초기 복사를 생략할 수 있다.
3) 복제 슬롯 관리
-- 현재 슬롯 확인
SELECT slot_name, plugin, slot_type, active
FROM pg_replication_slots;
-- 사용하지 않는 슬롯 삭제
SELECT pg_drop_replication_slot('slot_name');
replication slot logical postgres 관리가 중요하며, 슬롯이 남아있으면 WAL이 계속 보존되어 디스크 사용량이 증가한다. 따라서 구독 중지 후 슬롯 정리 절차가 필요하다.
모니터링과 문제 해결
- pg_stat_replication 조회로 전송 지연 확인
- pg_stat_subscription으로 subscription 상태 확인
- 초기 동기화 실패: 권한, 네트워크, 테이블 존재 여부 점검
- WAL이 쌓이는 문제: 복제 슬롯 존재 여부와 구독자 상태 확인
-- 전송 상태 확인 예시
SELECT pid, application_name, client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn
FROM pg_stat_replication;
-- subscription 상태
SELECT * FROM pg_stat_subscription;
주의사항 및 권장 사항
- 데이터형이나 스키마 변경 시 양측 동기화 상태를 고려한다.
- 논리적 복제는 트리거나 일부 DDL을 자동으로 복제하지 않으므로 주의한다.
- 대량 초기 로딩 시 네트워크와 디스크 I/O 영향 고려.
- 복제 슬롯은 주기적으로 점검하고 불필요한 슬롯은 제거.
요약
이 문서에서는 postgres logical replication 설정 과정과 replication slot logical postgres 관리 방법을 예제로 정리했다. publication과 subscription의 역할, 기본 설정 항목, 관리 및 모니터링 명령을 통해 logical replication postgres 예제 이해에 도움을 제공한다. 실무에서는 권한 관리와 WAL 보존 정책을 함께 고려하는 것이 바람직하다.