Open Source

Patroni PostgreSQL HA

Patroni·etcd·PgBouncer·HAProxy 기반 PostgreSQL 고가용성(HA) 클러스터를 Ansible Playbook 실행 한 번으로 구축하는 오픈소스 프로젝트입니다.

Apache License 2.0 · 오픈소스GitHub 저장소

특징 및 강점

01

자동 페일오버

리더 노드 장애를 감지하면 수 초 내에 스탠바이가 자동 승격되어 서비스 중단을 최소화합니다.

02

Split-brain 방지

etcd 정족수(과반수) 합의 기반으로 리더를 선출해 리더가 둘 존재하는 상황을 원천 차단합니다.

03

고정 접속 주소(VIP)

Keepalived가 관리하는 VIP로 접속하므로 페일오버가 일어나도 애플리케이션 설정을 바꿀 필요가 없습니다.

04

무중단 설정 변경

Patroni를 통해 PostgreSQL 설정을 런타임에 반영하고 클러스터 전체에 일관되게 배포합니다.

구성 컴포넌트

검증된 표준 오픈소스 스택을 조합해 각 계층의 역할을 명확히 분리합니다.

PostgreSQL

데이터베이스 본체. 스트리밍 복제로 리더-스탠바이를 구성합니다(14~17 지원, 기본 16).

Patroni

클러스터의 지휘자. 리더 선출·복제 구성·페일오버를 자동으로 관리합니다.

etcd

클러스터 상태 저장소. 정족수 합의로 리더 정보를 안전하게 보관합니다.

PgBouncer

경량 커넥션 풀러. 대량 접속을 효율적으로 중개해 DB 부하를 줄입니다.

HAProxy

요청 길안내. 현재 리더를 판별해 읽기·쓰기 트래픽을 올바른 노드로 보냅니다.

Keepalived

VIP 관리자. 장애 시에도 하나의 고정 접속 주소를 유지합니다.

아키텍처

애플리케이션 → VIP → HAProxy → PgBouncer → PostgreSQL로 이어지는 접속 경로를 etcd 합의가 뒷받침합니다.

애플리케이션
리더가 바뀌어도 항상 같은 VIP로만 접속
VIP:5000 · 쓰기
VIP:5001 · 읽기
고정 주소 VIP
Keepalived가 살아있는 HAProxy 노드에 부여
HAProxy
헬스체크(/primary·/replica)로 현재 리더에게 라우팅
/primary
/replica
리더 노드
쓰기 가능
PgBouncer · 커넥션 풀링
PostgreSQL 리더
복제본 노드
읽기 전용
PgBouncer · 커넥션 풀링
PostgreSQL 복제본
스트리밍 복제
Patroni
각 DB 노드에 상주 — 리더 선출과 승격/강등 제어
리더 키 기록 · 갱신 · 감시
etcd 클러스터
공동 장부 · 정족수 3 — 리더 키를 기록·감시
etcd-1
etcd-2
etcd-3
접속 계층
Keepalived · HAProxy
고정 VIP 제공
리더/리플리카 라우팅
헬스체크 기반 전환
읽기 부하 분산
풀링 계층
PgBouncer
커넥션 풀링
대량 접속 중개
트랜잭션 풀 모드
DB 부하 절감
데이터 계층
PostgreSQL · Patroni
스트리밍 복제
자동 리더 선출
자동 페일오버
무중단 설정 반영
합의 계층
etcd 클러스터
클러스터 상태 저장
정족수(과반수) 합의
Split-brain 방지
3노드 구성 권장
권장 스택
PostgreSQL 14–17Patroni 3.xetcd 3.5.xPgBouncer 1.21+HAProxy 2.x+Ansible 2.15+

배포 방식

Ansible Playbook으로 전 과정을 자동화하며, 인프라 규모에 맞춰 두 가지 토폴로지를 지원합니다.

분리형 구성

etcd 전용 3대 + DB 2대 이상으로 역할을 분리해 대규모·미션 크리티컬 환경에 적합합니다.

통합형 구성

서버 3대에 모든 컴포넌트를 함께 배치해 최소 자원으로 HA를 구성합니다.

Ansible 자동화

Debian/Ubuntu·RHEL/Rocky를 지원하는 멱등(idempotent) Playbook으로 반복 실행해도 안전합니다.

GitHub에서 바로 시작하세요

Playbook 전체와 설치 가이드가 저장소에 오픈소스로 공개되어 있습니다.