내 잡다한 노트

Patroni 설정 파일 본문

DB/PostgreSQL

Patroni 설정 파일

peanutwalnut 2025. 2. 13. 10:39

patroni에서 YAML 파일은 클러스터의 동작과 각 노드의 역할, postgreSQL 서버의 설정 등을 정의하는 설정파일이다.

YAML 파일에는 다음과 같은 항목들을 추가할 수 있다.

  • 클러스터 스코프 및 노드 식별
    • scope: 클러스터의 이름이나 식별자를 지정합니다. 같은 스코프를 가진 노드들끼리 하나의 클러스터로 인식됩니다.
    • name: 해당 노드의 고유 이름을 지정합니다.
  • DCS (Distributed Configuration Store) 설정
    • Patroni는 etcd, Consul, ZooKeeper 등 분산 구성 저장소를 이용해 리더 선출과 상태 공유를 수행합니다.
    • 해당 항목에서는 사용하는 DCS의 종류와 접속 정보(예: 호스트, 포트 등)를 설정합니다.
  • REST API 설정
    • Patroni는 상태 조회나 제어를 위한 REST API를 제공합니다.
    • 이 섹션에서는 API가 수신할 IP와 포트, 그리고 접근 주소를 지정합니다.
  • Bootstrap (클러스터 초기화) 설정
    • 클러스터가 처음 구성될 때 혹은 초기화가 필요한 경우에 사용할 설정들을 지정합니다.
    • 예를 들어, initdb 옵션으로 PostgreSQL 데이터베이스를 초기화할 때의 인코딩, 데이터 체크섬 등을 설정하거나, 초기 복제 슬롯 및 복구 방법(예: pg_rewind 사용)을 정의합니다.
  • PostgreSQL 서버 설정
    • 실제 PostgreSQL 인스턴스와 관련된 설정들이 포함됩니다.
    • listen: PostgreSQL이 리스닝할 IP와 포트를 지정합니다.
    • connect_address: 클러스터 내 다른 노드들이 연결할 주소를 지정합니다.
    • data_dir, bin_dir: 데이터 디렉토리와 PostgreSQL 바이너리 경로를 지정합니다.
    • authentication: 복제(replication) 및 슈퍼유저 접근을 위한 사용자명과 비밀번호 등 인증 정보를 설정합니다.
    • parameters: max_connections, shared_buffers, wal_level, hot_standby 등 PostgreSQL의 성능 및 복제 관련 설정을 지정합니다.
  • Failover 및 복제 관련 추가 옵션
    • 리더 선출, 타임아웃, 최대 복제 지연 시간 등의 설정을 통해 클러스터의 장애 조치(failover) 동작을 미세하게 조정할 수 있습니다.

예시에서 namespace는 patroni가 사용하는 DCS 내에서 key들이 저장되는 경로의 기본 역할을 한다.

구체적으로

  • 키 격리 : 여러 클러스터가 동일한 DCS를 사용할 경우, 각 클러스터의 데이터를 서로 격리하기 위해 namespace를 사용한다.
  • 키 구조화 : Patroni는 클러스터 관련 정보(예: 리더 선출 정보, 상태 정보 등)를 저장하는데, 이때 namespace 아래에 관련 키들을 배치하여 관리하기 쉽게 만든다.
  • 접근 경로 지정 : patroni가 DCS에 접근할 때 어느 경로에서 클러스터 데이터를 읽고 쓸지 지정하는 역할을 한다.

예시)

scope: my_postgres_cluster
namespace: /service/
name: node1

restapi:
  listen: 0.0.0.0:8008
  connect_address: 192.168.1.10:8008

etcd:
  host: 192.168.1.11:2379,192.168.1.12:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      parameters:
        max_connections: 100
        shared_buffers: 256MB
  initdb:
    - encoding: UTF8
    - data-checksums

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 192.168.1.10:5432
  data_dir: /var/lib/postgresql/data
  bin_dir: /usr/lib/postgresql/12/bin
  authentication:
    replication:
      username: replicator
      password: rep_pass
    superuser:
      username: postgres
      password: super_pass
  parameters:
    wal_level: replica
    hot_standby: "on"

 

'DB > PostgreSQL' 카테고리의 다른 글

Pigsty 란?  (0) 2025.02.15
pg_rewind 란?  (0) 2025.02.13
Citus를 왜 사용해야하는가?  (0) 2025.02.12
PostgreSQL Citus  (0) 2025.02.12
PostgreSQL의 HA를 위해 설계된 Patroni  (0) 2025.02.12