PostgreSQL 클러스터 자동 복구: Patroni + Etcd 구성
Patroni와 Etcd를 이용해 PostgreSQL 고가용성 클러스터를 구성하고 자동 복구와 페일오버 동작을 단계별로 이해하기 쉬운 구성 설명
목차
소개
PostgreSQL을 운영할 때 단일 장애점은 큰 리스크다. Patroni와 Etcd 조합은 자동 복구와 신속한 페일오버를 제공한다. 이 글은 patroni etcd postgres 구성과 자동 복구 postgres patroni 개념을 처음 접하는 사람도 이해할 수 있게 설명한다.
핵심 개념
Patroni란?
Patroni는 PostgreSQL 클러스터의 리더 선출과 설정 관리를 자동화하는 오픈소스 도구다. 내부적으로 로컬 PostgreSQL을 제어하고 분산 키-값 저장소에 상태를 기록한다.
Etcd의 역할
Etcd는 분산 키-값 저장소로, 클러스터 멤버의 상태와 리더 정보 저장을 담당한다. 신뢰성 높은 합의(raft)를 통해 일관된 리더 정보를 제공한다.
전체 아키텍처
- 각 노드: PostgreSQL + Patroni 데몬
- 공유 구성: Etcd 클러스터(3개 이상 권장)
- 복제: asynchronous 또는 synchronous 복제 설정 가능
- 모니터링: Patroni 상태와 PostgreSQL 로그 확인
사전 준비
- PostgreSQL 설치(버전 10 이상 권장)
- Patroni 설치(Python 환경에서 pip로 설치 가능)
- Etcd 클러스터 구성(3노드 권장)
- 서버 간 시간 동기화(NTP/chrony)
Patroni 설정 예제
아래는 가장 기본적인 patroni.yml 예제다. 호스트명과 포트, 데이터 디렉터리, replication 사용자 정보를 환경에 맞게 수정한다.
scope: postgres-cluster
namespace: /service/
name: node1
restapi:
listen: 0.0.0.0:8008
connect_address: 10.0.0.1:8008
etcd:
host: 10.0.0.10:2379
postgresql:
listen: 0.0.0.0:5432
connect_address: 10.0.0.1:5432
data_dir: /var/lib/postgresql/data
bin_dir: /usr/lib/postgresql/12/bin
authentication:
replication:
username: replicator
password: replicator_password
superuser:
username: postgres
password: postgres_password
parameters:
max_connections: 100
wal_level: replica
hot_standby: "on"
Etcd 최소 설정 예
etcd는 별도 서버에 설치한다. 아래는 단일 노드 테스트용 시작 예시이며 운영 환경에선 3노드 이상으로 구성한다.
ETCD_NAME=etcd1
ETCD_INITIAL_CLUSTER=etcd1=http://10.0.0.10:2380
ETCD_LISTEN_CLIENT_URLS=http://0.0.0.0:2379
ETCD_ADVERTISE_CLIENT_URLS=http://10.0.0.10:2379
etcd --name ${ETCD_NAME} \
--initial-advertise-peer-urls ${ETCD_INITIAL_CLUSTER} \
--listen-client-urls ${ETCD_LISTEN_CLIENT_URLS} \
--advertise-client-urls ${ETCD_ADVERTISE_CLIENT_URLS}
클러스터 초기화 순서
- Etcd 클러스터를 먼저 기동하고 상태를 확인한다.
- 각 노드에 patroni.yml을 배포한다.
- 각 노드에서 Patroni를 기동하면 첫 노드가 자동으로 리더가 된다.
- 후속 노드는 리더에게 연결해 복제를 시작한다.
간단한 확인 방법
- Patroni REST API: http://node:8008/cluster 상태 확인
- Etcdctl을 이용한 키 확인: etcdctl get --prefix /service/
- PostgreSQL 측: pg_isready 및 replication 슬롯 확인
장애 시나리오와 자동 복구
리더 노드가 다운되면 Patroni는 Etcd에 기록된 상태를 기반으로 새로운 리더를 선출한다. 선출 과정에서 WAL 위치와 복제 상태를 확인해 데이터 일관성을 유지한다. 장애 복구 동안 애플리케이션은 가능한 빠르게 새 리더로 연결을 전환해야 한다.
운영 시 유의사항
- Etcd는 가용성 확보를 위해 홀수 개 노드로 운영
- 복제 사용자 권한과 네트워크 방화벽 설정 점검
- 정기적인 백업과 PITR(포인트 인 타임 리커버리) 구성
- 모니터링: Patroni 상태, PostgreSQL replication lag, 디스크 I/O
테스트 팁
- 리더 프로세스 종료로 페일오버 동작을 검증
- 네트워크 분리 시 split-brain 방지 동작 확인
- 실제 트래픽에서 복제 지연을 확인해 임계값 설정
결론
Patroni와 Etcd를 함께 쓰면 PostgreSQL의 자동 복구와 안정적인 페일오버가 가능하다. 기본 개념을 이해하고 단계별로 구성 파일을 준비하면 운영 환경에 빠르게 적용할 수 있다. patroni 클러스터 설정 예제와 자동 복구 postgres patroni 원리를 바탕으로 초기 설정을 진행하면 운영 리스크를 크게 낮출 수 있다.