본문으로 건너뛰기
3.3 Consul, ZooKeeper, Exhibitor

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
urlConsul 접속 URL
portagent 포트
schemehttp(기본) 또는 https
tokenACL 토큰
dcdatacenter 지정
consistency읽기 일관성 모드. default, consistent, stale
verify / cacert / cert / keyTLS 검증과 인증서 3종
checksConsul health check 목록 (기본 빈 list)
register_servicePatroni 클러스터를 Consul service로 등록 (기본 false)
service_tags등록한 service에 붙일 추가 tag
service_check_intervalservice check 주기 (기본 '5s')

ACL을 켠 Consul이라면 token에 연결된 정책이 최소 세 가지 write 권한을 가져야 한다.

  • service_prefix "${scope}"에 write
  • key_prefix "${namespace}/${scope}"에 write
  • session_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: true

ZooKeeper

zookeeper 섹션은 hosts에 앙상블 멤버를 list로 나열한다. Patroni는 ZooKeeper 클라이언트로 kazoo 라이브러리를 사용한다.

내용
hostsZooKeeper 멤버 목록. ['host1:port1', 'host2:port2'] 형식
use_sslSSL 사용 여부 (기본 false)
verify인증서 검증 여부 (기본 true)
cacert / cert / key / key_passwordTLS 인증서와 키, 키 암호
auth_dataZooKeeper 인증 credential dict
set_acls지정하면 Patroni가 생성하는 ZNode에 기본 ACL 적용. schema 기본값은 x509, digest 등 다른 schema도 지원
zookeeper:
  hosts:
  - zk1:2181
  - zk2:2181
  - zk3:2181
use_ssl: true는 kazoo 2.6.0 이상이 설치되어 있어야 동작한다. 그보다 낮은 버전에서는 SSL 연결이 지원되지 않는다.

Exhibitor

Exhibitor는 ZooKeeper 앙상블을 관리하는 감독 도구다. ZooKeeper를 Exhibitor로 운영하는 환경이라면 zookeeper 섹션 대신 exhibitor 섹션을 쓴다. 초기 노드 목록만 주면 이후의 앙상블 구성 변화는 Patroni가 Exhibitor API를 주기적으로 조회해 따라간다.

내용
hosts초기 Exhibitor(ZooKeeper) 노드 목록. host1,host2 형식
portExhibitor 포트
poll_intervalZooKeeper와 Exhibitor 노드 목록을 갱신하는 주기
exhibitor:
  hosts: exhibitor1,exhibitor2,exhibitor3
  port: 8181

raft는 deprecated

raft 섹션은 pysyncobj 라이브러리 기반의 내장 Raft 구현으로, 외부 저장소 없이 Patroni 프로세스들 사이에서 직접 합의를 수행하는 방식이다. 별도 인프라가 필요 없다는 매력 때문에 소규모 구성에서 쓰이던 선택지였다.

공식 문서(YAML Configuration Settings)는 raft 백엔드를 deprecated로 표기한다. 신규 구성에서 선택할 이유가 없고, 이미 raft로 운영 중인 클러스터라면 지원되는 다른 백엔드로의 이전을 검토하는 편이 안전하다.

정리

세 백엔드 모두 설정의 뼈대는 같다. 접속 지점, 인증(ACL 토큰 또는 auth_data), TLS 3종이다. 차이는 그 앞뒤에 있다. Consul은 ACL 정책 3종과 register_service 연동이, ZooKeeper는 kazoo 버전 요건이, Exhibitor는 노드 목록 자동 갱신이 각각의 확인 지점이다.