3.3 Consul, ZooKeeper, Exhibitor
etcd가 없는 환경이라고 DCS(Distributed Configuration Store)를 새로 세워야 하는 것은 아니다. 이미 Consul이나 ZooKeeper를 운영 중이라면 그대로 Patroni의 백엔드로 쓸 수 있다. 이 챕터는 세 백엔드의 설정 키와 최소 구성, 그리고 deprecated 상태인 raft를 다룬다.
Consul
consul 섹션은 host(로컬 agent의 host:port) 또는 url 중 하나가 필수다. Consul의 일반적인 배치처럼 각 노드의 로컬 agent를 경유해 통신하는 형태가 기본 그림이다.
| 키 | 내용 |
|---|---|
host | 로컬 Consul agent의 host:port |
url | Consul 접속 URL |
port | agent 포트 |
scheme | http(기본) 또는 https |
token | ACL 토큰 |
dc | datacenter 지정 |
consistency | 읽기 일관성 모드. default, consistent, stale |
verify / cacert / cert / key | TLS 검증과 인증서 3종 |
checks | Consul health check 목록 (기본 빈 list) |
register_service | Patroni 클러스터를 Consul service로 등록 (기본 false) |
service_tags | 등록한 service에 붙일 추가 tag |
service_check_interval | service check 주기 (기본 '5s') |
ACL을 켠 Consul이라면 token에 연결된 정책이 최소 세 가지 write 권한을 가져야 한다.
service_prefix "${scope}"에 writekey_prefix "${namespace}/${scope}"에 writesession_prefix ""에 write
register_service: true로 켜면 Patroni가 scope 이름으로 Consul service를 등록하고, 각 멤버에는 role에 따라 master, primary, replica, standby-leader 중 해당하는 tag가 붙는다. Consul의 서비스 디스커버리를 이미 쓰는 환경이라면 DNS나 API로 primary를 찾는 라우팅에 연결되는 지점이다.
consul:
host: 127.0.0.1:8500
scheme: https
token: <ACL 토큰>
register_service: trueZooKeeper
zookeeper 섹션은 hosts에 앙상블 멤버를 list로 나열한다. Patroni는 ZooKeeper 클라이언트로 kazoo 라이브러리를 사용한다.
| 키 | 내용 |
|---|---|
hosts | ZooKeeper 멤버 목록. ['host1:port1', 'host2:port2'] 형식 |
use_ssl | SSL 사용 여부 (기본 false) |
verify | 인증서 검증 여부 (기본 true) |
cacert / cert / key / key_password | TLS 인증서와 키, 키 암호 |
auth_data | ZooKeeper 인증 credential dict |
set_acls | 지정하면 Patroni가 생성하는 ZNode에 기본 ACL 적용. schema 기본값은 x509, digest 등 다른 schema도 지원 |
zookeeper:
hosts:
- zk1:2181
- zk2:2181
- zk3:2181use_ssl: true는 kazoo 2.6.0 이상이 설치되어 있어야 동작한다. 그보다 낮은 버전에서는 SSL 연결이 지원되지 않는다.Exhibitor
Exhibitor는 ZooKeeper 앙상블을 관리하는 감독 도구다. ZooKeeper를 Exhibitor로 운영하는 환경이라면 zookeeper 섹션 대신 exhibitor 섹션을 쓴다. 초기 노드 목록만 주면 이후의 앙상블 구성 변화는 Patroni가 Exhibitor API를 주기적으로 조회해 따라간다.
| 키 | 내용 |
|---|---|
hosts | 초기 Exhibitor(ZooKeeper) 노드 목록. host1,host2 형식 |
port | Exhibitor 포트 |
poll_interval | ZooKeeper와 Exhibitor 노드 목록을 갱신하는 주기 |
exhibitor:
hosts: exhibitor1,exhibitor2,exhibitor3
port: 8181raft는 deprecated
raft 섹션은 pysyncobj 라이브러리 기반의 내장 Raft 구현으로, 외부 저장소 없이 Patroni 프로세스들 사이에서 직접 합의를 수행하는 방식이다. 별도 인프라가 필요 없다는 매력 때문에 소규모 구성에서 쓰이던 선택지였다.
정리
세 백엔드 모두 설정의 뼈대는 같다. 접속 지점, 인증(ACL 토큰 또는 auth_data), TLS 3종이다. 차이는 그 앞뒤에 있다. Consul은 ACL 정책 3종과 register_service 연동이, ZooKeeper는 kazoo 버전 요건이, Exhibitor는 노드 목록 자동 갱신이 각각의 확인 지점이다.