본문 바로가기

빅데이터/PostgreSQL

PostgreSQL 이중화 방법

 

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이 동일 해야함.
- WAL 에 대한 충분한 공간이 필요함.

- DDL Replication 미 지원 (별도의 스크립트로 수행.)
- Table Column에 대해 key 값 필요
- 별도의 소프트웨어를 통해 구성.
- 수행시간이 긴 쿼리에 대해서 리스크를 안고 가야 함.

비 고

PostgreSQL 9.X 부터 사용 가능.
Streaming 방식으로 실시간 동기화.

PostgreSQL 8.X 버전 까지 사용했던 방식. 

 

Transaction Log Shipping 방식 이중화 구성의 상세 설명

jinisbonusbook.tistory.com/70

 

PostgreSQL 이중화(HA) 구성 방법 #1 - 개념 및 초기 복제 구성

PostgreSQL 의 이중화 구성 방법 중 Active-Standby 로 구성하는 방법을 포스팅합니다. 먼저 이중화 구성 방법을 개념도로 설명하여 이해를 돕겠습니다. 1. 정상 동작 중일 경우 정상 동작 시 구성 형태

jinisbonusbook.tistory.com

Transaction Log shipping 구성 방법

medium.com/qodot/postgresql-replication-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0-dfd481c4fb04

 

PostgreSQL Replication 구축하기

실제 서비스를 운용할 때, 아키텍쳐 안의 거의 대부분의 컴포넌트를 이중화 하는 것은 필수에 가까우며, 데이터베이스 역시 예외는 아니다. 이번 포스팅에서는 PostgreSQL의 내장 기능을 이용해서

medium.com

PGPool을 통한 HA 구성

skysoo1111.tistory.com/66

 

# PostgreSQL HA 구성 - PGPoolⅡ

PostgreSQL Pgpool-Ⅱ 는 무엇인가? Pgpool-II는 PostgreSQL 서버와 PostgreSQL 데이터베이스 클라이언트 사이에 있는 Proxy 소프트웨어이다. 즉, Pgpool-II가 DB Cluster 역할을 하게 해주는 것이다. 왜 필요한..

skysoo1111.tistory.com