본문으로 건너뛰기
7.5 그 외 명령

7.5 그 외 명령

매일 실행하지는 않지만 알아두면 필요한 순간에 찾게 되는 명령들이다. 접속 문자열을 뽑는 dsn, 원격 SQL 실행용 query, 이름 때문에 오해하기 쉬운 remove, 버전 점검용 version, 그리고 4.1.0에서 추가된 클러스터 단위 전환 명령 쌍을 다룬다.

dsn

클러스터 멤버 1개의 접속 문자열(DSN)을 출력한다.

patronictl dsn batman -r primary     # role로 선택
patronictl dsn batman -m node2       # 멤버 이름으로 선택

셸 스크립트에서 현재 primary의 접속 정보를 얻어 후속 명령에 넘기는 용도로 쓴다.

query

멤버를 지정해 SQL을 실행한다.

patronictl query batman -m node2 -c "SELECT pg_is_in_recovery()"
patronictl query batman -r replica -d appdb -U app --format json -c "SELECT count(*) FROM orders"
patronictl query batman -r primary -f maintenance.sql
  • 대상 선택: -m/--member 또는 -r/--role
  • 접속 정보: -d/--dbname, -U/--username, --password
  • 실행 내용: -c/--command로 한 줄, -f/--file로 파일
  • 출력: --formatpretty, tsv, json, yaml
일상적인 SQL 작업이라면 psql로 직접 접속하는 편이 낫다. query의 쓸모는 대상을 role로 지정하는 데 있다. “지금 replica인 노드에서 이 쿼리를 실행"처럼 role 기준으로 실행 위치를 고르는 확인성 쿼리에 어울린다.

remove: 노드 제거가 아니다

이름 때문에 오해하기 쉽지만, patronictl remove는 멤버(노드)를 제거하는 명령이 아니다. 클러스터 정보 전체를 DCS에서 삭제하는 명령이다. 공식 문서의 경고 원문은 “This operation will destroy the information of the Patroni cluster from the DCS.“다.

patronictl remove batman

위험한 명령이라 대화형 확인을 세 번 거친다. 클러스터 이름을 다시 입력하고, “Yes I am aware” 문구를 입력하고, 마지막으로 leader 노드의 이름을 입력해야 실행된다.

정당한 용례는 major upgrade 절차다. primary에서 pg_upgrade를 마친 뒤 DCS에 남은 구 클러스터 상태(initialize key 등)를 wipe하고 새 버전으로 다시 인식시키는 단계에서 쓴다. 전체 절차는 Part X의 major upgrade 참고.

노드를 클러스터에서 빼고 싶은 것이라면 remove가 아니라 그 노드의 Patroni 데몬을 정지한다. member key의 TTL이 만료되면 멤버 목록에서 사라진다.

remove가 지우는 것은 DCS 안의 클러스터 정보(leader key, dynamic configuration, 이력)다. 운영 중인 클러스터에서 노드 제거 명령으로 착각하고 실행하는 사고를 막으려고 3중 확인이 붙어 있다.

version

patronictl version batman

patronictl 자신의 버전과 함께 각 멤버의 Patroni, PostgreSQL 버전을 표시한다. 롤링 업그레이드 중 어느 노드가 아직 구버전인지 점검하는 용도로 쓴다.

demote-cluster와 promote-cluster

4.1.0에서 추가된 명령 쌍이다. 대상이 멤버가 아니라 클러스터 전체라는 점에서 switchover/failover와 다르다.

patronictl demote-cluster batman --host 10.1.0.11 --port 5432 --force
patronictl promote-cluster batman --force
  • demote-cluster: 일반 클러스터를 standby cluster로 전환한다. 복제 원본을 알려 주는 --host, --port, --restore-command 중 최소 하나가 필요하고, --primary-slot-name으로 원본 쪽 slot 이름을 지정한다
  • promote-cluster: standby cluster를 일반 클러스터로 승격한다. dynamic configuration에서 standby_cluster 섹션을 제거하고 leader가 primary로 동작할 때까지 기다린다

standby cluster가 무엇이고 DR 구성에서 어떻게 쓰는지는 Part X의 standby cluster에서 다룬다.

제거된 명령

구버전 자료에는 등장하지만 4.1.4에는 없는 명령이 둘 있다. patronictl configure는 2.1.6에서, patronictl scaffold는 3.0.0에서 제거되었다. 옛 문서의 예시를 따라 하다 명령이 없다는 오류를 만나면 버전 차이를 의심한다.