Patroni-Etcd 클러스터 아키텍처의 핵심 원리
Patroni는 Python 기반의 PostgreSQL 고가용성 템플릿으로, Etcd를 분산 설정 저장소(DCS)로 활용하여 클러스터 상태를 중앙에서 관리합니다. Etcd는 리더-팔로워 모델을 기반으로 Raft 합의 알고리즘을 통해 모든 노드의 데이터 일관성을 보장하며, Patroni의 모든 노드가 Etcd에 접근하여 리더 선출 및 복제 상태를 조정합니다.
리더 선출 메커니즘과 동적 설정
Patroni 노드들은 Etcd의 리더 키(leader key)를 두고 경합하며, 주 데이터베이스는 정기적으로 이 키를 갱신하여 리더십을 유지합니다. TTL(Time-To-Live) 설정에 따라 주 노드가 응답하지 않으면 자동으로 장애조치가 실행되며, 스탠바이 노드 중 가장 최신 데이터를 보유한 노드가 승격됩니다. 동적 설정은 Etcd에 저장되어 patronictl 또는 REST API를 통해 클러스터 전체에 비동기적으로 배포됩니다.
실무 주의점: 구성 및 복제 모드
최소 3개 노드의 Etcd 클러스터 구성이 권장되며, Etcd와 PostgreSQL 노드를 분리하면 한쪽 노드 재시작 시 전체 복원력이 저하되지 않습니다. 비동기 복제의 maximum_lag_on_failover 설정으로 장애조치 전 복제 지연을 제한할 수 있으며, 동기 복제 모드는 데이터 내구성을 높이되 쓰기 지연이 발생합니다. 따라서 비즈니스 요구사항에 맞춰 복제 모드와 타임아웃 값(loop_wait, ttl, retry_timeout)을 신중히 조정해야 합니다.