Feature |
Shared Disk Failover |
File System Replication |
Transaction Log Shipping |
Trigger-Based Master-Standby Replication |
Statement-Based Replication Middleware |
Most Common Implementation |
NAS |
DRBD / Pacemaker |
Streaming Repl. |
Slony |
pgpool-II |
Communication Method |
shared disk |
disk blocks |
WAL |
table rows |
SQL |
No special hardware required |
|
• |
• |
• |
• |
Allows multiple master servers |
|
|
|
|
• |
No master server overhead |
• |
|
• |
|
• |
No waiting for multiple servers |
• |
|
with sync off |
• |
|
Master failure will never lose data |
• |
• |
with sync on |
|
• |
Standby accept read-only queries |
|
|
with hot |
• |
• |
Per-table granularity |
|
|
|
• |
|
No conflict resolution necessary |
• |
• |
• |
• |
|
ㅁ Shared Disk Failover
- Disk를 Share하여 Multiple Server로 사용한다. (NAS)
- 구성이 쉽지만, NAS가 장애날 경우 Primary/Standby 서버 모두 사용할 수 없다.
- Standby 서버는 평상 시 Idle 상태로 유지됨
- SAN을 쓸 경우 별도의 상용 HA 솔루션(VCS 등)이 필요함.
ㅁ File System Replication
- DRBD(Distributed Replicated Block Device)는, TCP/IP 네트워크 통해서, 복수의 서버 간 HDD(파티션)를 미러링(복제)하는 S/W
- DRBD는 HA-Cluster 시스템의 Heartbeat를 통해 제어되는 것이 일반적, 8.0.x대 버전으로 넘어오면서 OFCS, GFS등 HA-Cluster에서의 확장된 기능이 추가됨.
- DRBD는 Linux OS 상에서 동작하는 소프트웨어 입니다. Linux의 커널 모듈이 필요하기 때문에, 같은 유닉스계 OS인 Open Solaris와 FreeBSD에서는 동작 할 수 없다.
- DRBD의 최대 특징은, HDD(파티션)의 복제를 TCP/IP 네트워크를 이용해서 실행하는것으로 네트워크를 이용하기 때문에 특별한 하드웨어를 필요로 하지 않는다.
- DRBD와 Pacemaker를 결합하면, 고가용성 환경(HA Cluster 환경)을 구축하는 것이 가능하다.
- Pacemaker같은 경우 Linux 기반의 HA 솔루션으로 라이선스 비용이 별도로 청구됨.
ㅁ Transaction Log Shipping
- 운영 서버에서 만드는 트랜잭션 로그 조각을 정기적으로 대기 서버로 옮기고, 그것을 적용시켜, 운영 서버가 장애로 멈추게 되면, 대기 서버를 운영해서, 가용성을 향상 시킬 수 있는 이 기능을 warm standby, 또는 log shipping 기능이라고 한다.
- 운영 서버에서 다 쓴 WAL 파일을 다른 서버로 운송(shipping) 하는 것으로 PostgreSQL에서는 그 로그 옮기는 작업은 한번에 하나의 로그 파일을 옮길 수 있도록 구현되어 있다.
WAL 파일(16MB)을 옮기는 작업은 데이터베이스 서버 밖에서 관리자가 정의한 방식으로 진행 되기 때문에, 같은 사이트 내로 옮겨도 되고, 전혀 다른 시스템 쪽으로 보내도 되고, 여러 시스템으로 한꺼번에 보내도 된다.
단지 고려해야 할 사항은 파일이 전송 될 때의 전송량 때문에 운영 서버에 영향을 줄 수도 있어 전송 속도를 제한 할 수 있는 방법도 고려하거나, 레코드 기반 로그 전달 방식(스트리밍 복제)을 고려 할 수도 있다.
- 로그 전달 방식은 비동기식이며, 전송하는 WAL 내용은 이미 Commit된 데이터이다. WAL이 생성되기 전에 운영 서버가 멈춰버리면, Commit 되기 이전의 데이터는 손실된다. 이는 Streaming 복제 방식을 통해 데이터 손실을 최소화 할 수 있다.
- Streaming 전송 방식은 PostgreSQL 9.0 이상에서 사용 가능하다.
- Standby가 read-only DB로 활용 가능하다.
ㅁ Trigger-Based Master-Standby Repication
- 가장 오래된 PostgreSQL 리플리케이션
- 테이블 단위 복제가 가능하며, 여러 대의 대기 서버를 함께 운영할 수 있다.
- 대표적인 솔루션인 Slony (Londiste와 Bucardo와 같은 유사한 시스템)는 다른 버전의 PostgreSQL 노드를 Standby로 사용할 수 있다.
- Trigger 방식으로, Master의 변경 사항을 Standby가 받아서 동기화 하는 방식이다.
- Standby가 read-only DB로 활용 가능하다.
- Trigger 방식으로 DDL replication은 지원하지 않고, 별도의 스크립트를 통해 수동으로 Standby에 적용시켜 줘야 함
ㅁ Statement-Based Replication Middleware
- 대표적인 솔루션은 pgpool-II
- 모든 query 액션을 중간 middleware에서 DB 서버로 전달하는 방식
- write 시에는 모든 서버에 쓰기를 하며, read 시에는 한 서버에만 읽어 오는 방식
- write overhead가 발생 (보통 30%)
- random(), CURRENT_TIMESTAMP, sequences를 사용할 때 서버에 따라서 다른 값이 될 수 있어, 이런 기능을 사용할 때 특정한 서버만 지정하여 사용하는 식의 방법이 필요
[PostgreSQL HA 권고 방안]
구분 |
Transaction Log Shipping |
Trigger-Based Master-Standby Replication |
Software |
Streaming Replication |
Slony |
Feature |
WAL / Streaming |
table rows |
제약 사항 |
- Active-Standby 의 Version이 동일 해야함. |
- DDL Replication 미 지원 (별도의 스크립트로 수행.) |
비 고 |
PostgreSQL 9.X 부터 사용 가능. |
PostgreSQL 8.X 버전 까지 사용했던 방식. |
Transaction Log Shipping 방식 이중화 구성의 상세 설명
Transaction Log shipping 구성 방법
medium.com/qodot/postgresql-replication-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-dfd481c4fb04
PGPool을 통한 HA 구성