들어가기 앞서
데이터베이스에서 복제(replication)는 데이터베이스의 복사본을 생성하는 것을 의미합니다. 복제를 사용하면 장애가 발생하더라도 시스템이 계속 작동할 수 있는 고가용성 시스템을 구축할 수 있습니다. 또한, 복제된 데이터베이스를 읽기 전용 SQL 처리에 활용하면 전체 시스템에서 더 많은 프로세스를 실행할 수 있습니다. 그뿐만 아니라, 원격 위치에 복제된 데이터베이스는 재해 복구에도 사용할 수 있습니다.
PostgreSQL에서는 두 가지 종류의 복제 기능이 있습니다. 데이터베이스 클러스터를 집합적으로 복제하는 물리적 복제와 테이블 및 데이터베이스 단위로 복제하는 논리적 복제입니다.
log-shipping 복제란 무엇인가?

- file-based 복제로 master의 WAL file이 생성되면 이 파일을 scp를 통해 standby서버로 전달하여 반영함
- wal file이 생길 때 까지 replication gap 이 발생할 수 있음
스트리밍 복제란 무엇인가?

스트리밍 복제는 PostgreSQL의 표준 기능으로, 기본 서버의 업데이트된 정보를 실시간으로 대기 서버로 전송하여 기본 서버와 대기 서버의 데이터베이스가 동기화된 상태를 유지할 수 있도록 합니다. 스트리밍 복제 기능은 다음과 같은 큰 이점을 제공합니다.
- 장애 조치(Failover): 기본 서버에 장애가 발생하면 대기 서버가 운영을 인수할 수 있습니다.
- 읽기 전용 부하 분산(Read-only load balancing): 읽기 전용 SQL 처리를 여러 서버 간에 분산할 수 있습니다. 읽기 전용 SQL을 대기 서버에서 처리하여 읽기 전용 부하를 분산할 수 있습니다.
스트리밍 복제 메커니즘
스트리밍 복제가 어떻게 작동하는지 이해하기 위해, 무엇을 전송하고 어떻게 전송하는지 자세히 살펴보겠습니다.
전송되는 내용
PostgreSQL은 기본 서버의 업데이트된 정보를 트랜잭션 로그인 쓰기 전 로그(WAL, Write-Ahead Log)로 저장하여 장애 복구나 롤백을 대비합니다. 스트리밍 복제는 이 WAL을 실시간으로 대기 서버에 전송하고, 대기 서버에서 이를 적용하여 동기화합니다.
WAL이 어떻게 전송되고 적용되는가
기본 서버와 대기 서버 간의 WAL 전송은 기본 서버의 WAL 송신 프로세스와 대기 서버의 WAL 수신 프로세스에 의해 수행됩니다. 이 프로세스들은 postgresql.conf와 pg_hba.conf 파라미터 설정에 의해 시작됩니다.
- Master는 standyby 에게 transaction log entires 를 전달하고 standby 는 WAL file을 기다리지 않고 record 단위로 복제 수행
- 일반적으로 가장 많이 사용되는 복제 방식

동기식 복제와 비동기식 복제의 특징
동기식 복제와 비동기식 복제의 차이는 기본 서버에서 처리가 완료되기 전에 대기 서버로부터 응답을 기다리는지 여부입니다. 이는 SQL 처리의 응답 시간과 고가용성에 영향을 미치므로 운영에 맞는 구성을 선택해야 합니다.
비동기식 복제(기본 설정)
기본 서버는 대기 서버의 응답을 기다리지 않고 처리 작업을 완료합니다. 따라서 스트리밍 복제를 사용하지 않을 때와 비슷한 응답 시간이 소요됩니다. WAL 전송과 대기 서버에서의 적용(데이터 업데이트)은 비동기적으로 이루어지므로, 기본 서버에서의 업데이트된 결과가 대기 서버에 즉시 반영되지 않을 수 있습니다. 장애 조치 시점에 따라 데이터가 손실될 수 있습니다. 원격 지역으로 복제하여 재해 복구를 위한 사용에 적합합니다.
'Database > postgreSQL' 카테고리의 다른 글
| AWS PostgreSQL 05 - 쿼리 충돌 처리하기 (1) | 2025.01.14 |
|---|---|
| AWS PostgreSQL 03 - Read Replica 구성의 모범 사례 (0) | 2025.01.13 |
| AWS PostgreSQL 02 - VACUUM (0) | 2025.01.13 |
| AWS PostgreSQL 01 - MVCC (4) | 2025.01.13 |