데이터베이스 운영함에 있어 실제 서비스에서 고가용성(Hign Ability)은 가장 중요시됩니다. 이번 포스트에서는 PosgreSQL의 이중화(HA) 구현에 대해 설명하려고 합니다.
1. 이중화의 의미
- HA (High Ability)
: DB 이중화라고 말하며 복수의 DB Server를 준비한 상태에서 Active-Active 또는 Active-Standby로 동작시키면서 이중 일부의 Server에 문제가 발생하더라도 전체 서비스가 멈추는 사고를 방지하기 위함입니다.
- 클라우드 기반으로 인프라 시스템들이 옮겨가면서 OS 입장에서 고가용성은 하이퍼바이저가 처리하고 있습니다.
- 데이터베이스 관리자 입장에서는 데이터베이스 서버 장애 발생 시에도 DBMS가 잘 돌아간다면 마음이 놓일 것입니다.
- 하지만, 그래도 아직까지는 DB 클러스터링은 클라우드 환경이 아닌 곳에서 중요한 사항입니다.
- Active-Active 방식은 2대 이상의 서버가 모두 서비스에 이용되는 것을 말하며, Active-Standby는 1대의 서버가 서비스를 하고 이 서버가 장애 시 Standby 서버가 서비스를 합니다.
2. PostgreSQL의 HA
- PostgreSQL의 HA는 오라클의 RAC처럼 Active-Active 형태로 구성이 가능하지만 주로 Active-HotStandby 형태를 사용합니다.
- 오라클은 두 개의 서버를 사용하면서 디스크 영역이 shared 구조(RAC)이지만, Postgresql은 각각 개별 디스크이며 복제의 개념에 가깝습니다.
- A서버(Postgresql) B서버(Postgresql)를 각기 설치하고 트랜잭션 프로그램을 설치하여 제어합니다.
- DB서버의 Replication 기능을 사용하며 DB의 원본(Primary DB Server)에서 발생하는 변경사항을 기록한 WAL(Write Ahead Log) 파일들을 다른 DB Server에 순서에 맞춰 적용시키면 동일한 DB가 된다는 개념입니다.
- Postgresql에서 Replication 하는 방법은 Log-Shipping 방식과 Streaming 방식(PostgreSQL 9부터 지원), Logical Replication(PostgreSQL 10부터 지원) 방식이 있습니다.
: WAL(Write-Ahead Log Shipping)
> Log-Shipping 방식은 디렉터리 안의 WAL 파일 자체를 전달하는 방식(File-based Log Shipping)
> Streaming 방식은 로그 내용을 전달하는 방식(Records-based Log Shipping)
: Logical Replication 방식은 복제 식별자 (보통 Primary Key)를 기반으로 데이터 오브젝트와 변경 사항을 복제하는 방식
Oracle RAC와 PostgreSQL의 이중화 비교
3. PostgreSQL 이중화 구성 방식
1) Active(Master) / Active(Master)
- A, B 서버의 Postgresql Database 모두를 Master로 구성
- 데이터 읽기(select) 이외의 트랜잭션(insert, update, delete) 발생 시 양쪽 서버 모두에 같은 SQL Query를 수행
- 장단 : 장애 발생 시 한쪽 db가 shutdown 되어도 세션만 재접속하면 서비스가 가능
- 단점 : write를 할 경우 양쪽 서버 모두에 데이터를 적재하다 보니 write overhead 가 발생
2) Active(Master) / Standby(Slave)
- A서버의 Postgresql DB는 Master, B서버의 Postgresql DB는 Slave로 여기고 Data에 대한 Sync를 수행
- 가용성을 위하여 Active(Read+write) / Hot_standby(Read only) 형태로 구성하여 2대 DB에서 모두 Select를 처리하도록 하는 게 일반적
- 장단 : 구성이 간단하며 Write overhed가 줄어듦
- 단점 : Master DB가 shutdown이 되면 Slave DB로 failover를 시키며 failover 시간 동안 서비스가 중단됨
※ 참고 및 출처
https://www.postgresql.org/
https://www.postgresql.kr/docs/13/different-replication-solutions.html
https://www.postgresql.org/docs/current/sql-cluster.html
https://www.postgresql.org/docs/current/creating-cluster.html