PostgreSQL · 2025-12-18

PostgreSQL 고가용성 구성: Patroni 클러스터

Patroni와 etcd로 PostgreSQL 고가용성 클러스터를 단계별로 설명하며 설치, 설정, 검증 절차를 정리한 구성

작성일 : 2025-12-18 ㆍ 작성자 : 관리자
post
목차

소개

기업 환경에서 PostgreSQL의 가용성 확보는 안정적인 서비스 운영의 핵심이다. Patroni는 분산 코디네이터와 함께 자동 페일오버를 제공하여 고가용성(HA)을 구현한다. 본문은 patroni postgres 설치와 patroni etcd 설정 postgres 과정을 초보자도 이해하기 쉬운 흐름으로 정리한다.

핵심 개념

Patroni란

Patroni는 PostgreSQL 인스턴스의 리더 선출과 페일오버를 관리하는 오픈소스 도구다. 내부적으로 분산 키-값 저장소를 사용해 클러스터 상태를 공유한다. etcd, Consul, Zookeeper 중 하나를 선택할 수 있으며, 여기서는 etcd를 기준으로 설명한다.

왜 etcd를 사용하는가

etcd는 경량 분산 키-값 저장소로 빠른 일관성과 심플한 API를 제공한다. patroni etcd 설정 postgres에서 etcd는 리더 정보를 저장하고 클러스터 상태 동기화에 사용된다.

아키텍처 개요

기본적인 구성은 다음 요소로 이루어진다.

  • PostgreSQL 인스턴스 3대 이상(1 마스터, 2 이상의 레플리카 권장)
  • Patroni 프로세스 각 노드에 설치
  • etcd 클러스터 3대 이상(가용성 확보 목적)
  • 리버스 프록시 또는 VIP(선택 사항)로 클라이언트 연결 관리

사전 준비

다음 항목을 미리 준비한다.

  • OS: Ubuntu 또는 CentOS 최신 안정 버전
  • PostgreSQL 설치 패키지(예: 13 이상 권장)
  • Python 환경 및 필요한 라이브러리
  • etcd 바이너리 또는 패키지

설치 및 설정 순서

1. etcd 설치 및 간단 설정

각 etcd 노드에 etcd를 설치하고 클러스터를 구성한다. 최소 3노드로 구성하면 안정성이 높아진다. etcd 기본 설정 파일은 아래 예시를 참고한다.

name: 'etcd1'
data-dir: '/var/lib/etcd'
listen-peer-urls: 'http://0.0.0.0:2380'
listen-client-urls: 'http://0.0.0.0:2379'
initial-advertise-peer-urls: 'http://ETCD1_IP:2380'
advertise-client-urls: 'http://ETCD1_IP:2379'
initial-cluster: 'etcd1=http://ETCD1_IP:2380,etcd2=http://ETCD2_IP:2380,etcd3=http://ETCD3_IP:2380'
initial-cluster-state: 'new'
initial-cluster-token: 'etcd-cluster-1'

2. PostgreSQL 설치

각 노드에 동일한 PostgreSQL 버전을 설치한다. 데이터 디렉토리 권한과 포트 설정을 확인한다. 기본적으로 replication 계정과 적절한 pg_hba.conf 설정이 필요하다.

# 예시: replication 사용자 생성
sudo -u postgres psql -c "CREATE ROLE replicator WITH REPLICATION PASSWORD '비밀번호' LOGIN;"

3. Patroni 설치 및 구성

Patroni는 Python 기반으로 pip 또는 OS 패키지로 설치할 수 있다. 각 노드에 Patroni 설정 YAML 파일을 배치한다.

scope: postgres-cluster
namespace: /service/
name: node1
etcd:
  hosts: ['ETCD1_IP:2379','ETCD2_IP:2379','ETCD3_IP:2379']
bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
  initdb:
    - encoding: UTF8
    - data-checksums
postgresql:
  listen: 0.0.0.0:5432
  data_dir: /var/lib/postgresql/data
  bin_dir: /usr/lib/postgresql/13/bin
  parameters:
    max_wal_senders: 5
    max_replication_slots: 5
    wal_level: replica
restapi:
  listen: 0.0.0.0:8008
  connect_address: NODE1_IP:8008
watchdog:
  mode: off

실행 및 검증

각 노드에서 patroni 서비스를 시작한다. etcd와 Patroni, PostgreSQL 로그를 확인하여 클러스터가 정상적으로 구성되었는지 확인한다. 리더가 선출되고, 레플리카가 동기화되는 지점을 확인한다.

# 서비스 기동 예시
sudo systemctl enable patroni
sudo systemctl start patroni
# 클러스터 상태 확인
curl http://NODE1_IP:8008

페일오버 테스트

마스터 프로세스를 의도적으로 중단하여 자동 페일오버가 동작하는지 확인한다. Patroni는 etcd에 기록된 상태를 바탕으로 새로운 리더를 선출한다. 테스트 절차는 다음과 같다.

  • 현재 리더 확인
  • 리더 PostgreSQL 중지
  • 다른 노드가 리더로 승격되는지 확인

운영 시 고려사항

실무에서는 아래 항목에 유의한다.

  • etcd 클러스터의 노드 수와 네트워크 안정성
  • Patroni와 PostgreSQL 로그의 모니터링 설정
  • 백업 정책과 PITR(포인트 인 타임 복구) 계획
  • 버전 업그레이드 시의 다운타임 최소화 절차

결론

patroni postgres 설치와 patroni etcd 설정 postgres 과정을 통해 PostgreSQL 고가용성 patroni 기반 클러스터를 구축할 수 있다. etcd는 상태 저장소로서 안정적인 리더 선출을 보장하고, Patroni는 자동 페일오버와 간편한 운영을 돕는다. 처음 구성할 때는 소규모 테스트 환경에서 충분히 검증한 뒤 운영 환경으로 확장하는 것이 안전하다.

patroni postgres 설치 postgresql 고가용성 patroni patroni etcd 설정 postgres postgresql patroni etcd HA클러스터 데이터베이스가용성