내 잡다한 노트
Patroni 설정 파일 본문
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 |