PosgreSQL에서는 이중화를 위한 몇 가지 기능(논리적 복제, 스트리밍 복제)을 제공한다.
그러나, 기본 기능만으로는 자동 장애 조치 (Failover) 및 모니터링 기능이 제한적이므로, 보다 강력한 고가용성 관리를 위해 추가적인 솔루션이 필요하다.
이 페이지에서는 HA에 필요한 사항을 기술하고, PostgreSQL의 고가용성을 보장하기 위한 네 가지 주요 솔루션을 비교하고자 한다.
PostgreSQL HA
클라우드 아키텍처 센터
구글 클라우드에서는 가장 기본적인 수준에서 데이터 계층 HA는 다음으로 구성된다고 말한다.
- 기본 노드의 장애 발생 여부를 식별하는 메커니즘
- 복제본 노드가 기본 노드로 승격되는 경우 장애 조치를 수행하는 프로세스
- 애플리케이션 요청이 새 기본 노드에 도달할 수 있도록 쿼리 라우팅을 변경하는 프로세스
- 장애 조치 전 원래 용량의 기본 노드와 복제본 노드를 사용하여 원래 아키텍처로 대체할 수 있는 방법(선택사항)
PostgreSQL HA solution
위에서 말한 네 가지 사항을 준수하는 PostgreSQL HA 솔루션에 대해 기술한다. 각 솔루션 별 HA 아키텍처를 설명하고 장 단점을 기술하고자 한다.
- pg_auto_failover
- patroni + etcd
- repmgr
- pg_poolII
1. Pg_auto_failover
pg_auto_failover docs
pg_auto_failover는 적극적으로 개발 중인 오픈소스(PostgreSQL 라이선스) PostgreSQL 확장 프로그램(extension)이다. 올바른 HA 구성을 위해서는 최소 3개의 노드가 필요하며, 각각 모니터 노드, 기본 노드, 보조 노드 역할을 수행한다.
구성 요소
- Monitor(관리 노드): 클러스터의 상태를 모니터링하고 자동 장애 조치를 수행하는 중앙 관리 노드
- Primary(주 노드): 애플리케이션이 읽기 및 쓰기 작업을 수행하는 기본 데이터베이스 노드
- Sencondary(스탠바이 노드): Primary 노드를 실시간으로 복제하여 장애 발생 시 즉시 승격 가능
PAF 아키텍처(single)
PAF 아키텍처(multi)
장점
- 비교적 구성이 간단함
- auto FO 가능
- 수동 전환 가능
- 국내,외 reference가 많음 (N사 Cloud DB for PostgreSQL, VMware PostgreSQL 등)
- split-brain 상황을 회피할 수 있음(Monitor 노드로 인해)
- PostgreSQL 이외의 다른 외부 구성 요소에 의존하지 않음
단점
2. repmgr
repmgr Docs
repmgr 는 PostgreSQL 서버 클러스터에서 복제 및 장애 조치를 관리하기 위한 오픈 소스 도구 모음이다. PostgreSQL의 기본 제공(hot-standby) 기능을 향상시켜 스탠바이 서버를 설정하고, 복제를 모니터링하고, 장애 조치나 수동 스위치오버 작업과 같은 관리 작업을 수행할 수 있는 도구를 제공한다.
구성요소
- Witness(증인 서버):(필수는 아님)여러 개의 대기 서버가 있는 장애 조치 상황에서 새로운 기본 서버를 결정하는 데 도움
- Primary(주 서버): 애플리케이션이 읽기 및 쓰기 작업을 수행하는 기본 데이터베이스 노드
- Sencondary(스탠바이 서버): Primary 노드를 실시간으로 복제하여 장애 발생 시 즉시 승격 가능
장점
- open source
- Auto FO 가능
- 수동 전환 가능
- witness server를 활용하여, 일시적인 통신 장애로 인한 FO 상황을 회피하거나 split-brain 상황을 회피할 수 있음
단점
- 장애 이후, 수동 조치 필요
- split-brain 상황이 쉽게 발생할 여지가 있음
- FO 로직이 다른 솔루션에 비해 단순
3. Patroni
Patroni Docs
Patroni는 PostgreSQL 데이터베이스에서 고가용성을 구현하기 위한 Python 기반 소프트웨어 템플릿이다.
템플릿 이기에, 다양한 환경에서 유연한 설정이 가능하며 복잡한 HA 시나리오를 지원한다.
완전한 HA 클러스터 구현을 위해서는 etcd,Consul,Zookeeper와 함께 사용이 필요하다.
구성요소
- patroni: HA cluster template
- DCS(Distributed Configuration Store): 클러스터의 상태를 저장하고 장애 감지 기능을 수행할 수 있는 분산 저장소(ex. etcd)
- load balancer:App에서 단일 엔드포인트를 통해 DB connection을 유지하도록 도와줌(ex. HAProxy)
- Postgres:Patroni를 사용하여 관리되는 PosgreSQL 인스턴스
Patroni 아키텍처
High-availability (HA) PostgreSQL Cluster with Patroni
장점
- REST API 제공
- 다양한 기능을 갖추고 있으며, 유연하게 적용 가능하다
- 다양한 고가용성 테스트 시나리오에서 매우 잘 수행된다
단점
- 비교적 구성 난이도가 높다
- 별도 솔루션과 함께 써야, HA 구성이 완벽해진다
- 별도 솔루션에 대한 대처 능력이 필요하다