나의 잡다한 노트 및 메모
Patroni의 명령어 본문
patronictl -c /etc/patroni/patroni.yml pause
postgresql에 영향을 주지 않고 patroni 서비스를 중단할 수 있다.
patroni가 유지관리 모드로 들어가게 된다.
patronictl -c /etc/patroni/patroni.yml resume
유지관리 모드에서 벗어난다.
patroni 클러스터 상태 확인 명령어
patronictl -c /etc/patroni.yml list
실행 명령어
patroni /etc/patroni.yml > patroni.log 2>&1 &
실행할 때 postgres 계정으로 실행해줘야한다.
sudo -u postgres nohup patroni /etc/patroni.yml > /var/log/postgresql/patroni.log 2>&1 &
삭제 명령어
patronictl remove <cluster-name>
노드 재시작
patronictl restart <노드명>
failover
직접 active와 standby를 지정해서 바꾸는 명령은 없다.
수동 장애조치를 통해 현재 리더를 강제로 내려놓고 standby 중인 노드를 새 리더로 승격시킬 수 있다.
edit-config
- 의미:
- DCS(예: etcd)에 저장된 클러스터 전역 구성(global configuration)을 편집하는 명령어.
- 이 구성은 클러스터 부트스트랩 시에 설정되며, 이후 모든 노드가 이 구성을 참조한다.
- 활용 시기:
- 클러스터 생성 후에 복제 설정, 타임아웃, 기타 글로벌 파라미터 등 변경이 필요할 때 사용합니다.
- 주의: bootstrap 섹션에서 설정한 일부 값은 edit-config로 변경할 수 없으므로, 변경 가능 항목만 수정해야 합니다.
pg에 pg-cron extension을 설치할 때 etcd에 저장된 클러스터의 바뀐 상태가 반영되도록 이 명령어를 사용한뒤 restart를 해줬다.
2. pause
- 의미:
- 자동 장애 조치(failover) 기능을 일시 중지하는 명령어입니다.
- 활용 시기:
- 주 노드(primary)에 유지보수 작업이나 긴급 점검이 필요한 경우,
- 장애 조치로 인해 원치 않는 역할 전환이 발생하지 않도록 일시적으로 자동 장애 조치를 중지할 때 사용한다.
- 백업 또는 데이터 마이그레이션 작업 전
3. reinit
- 의미:
- 특정 노드를 재초기화(reinitialize)하여, 기존 데이터 디렉토리를 제거하고, primary 노드로부터 fresh한 basebackup을 받아 복제본(replica)으로 다시 가입시키는 명령어입니다.
- 활용 시기:
- 특정 replica 노드의 데이터가 손상되었거나, 동기화에 문제가 생겼을 때,
- 노드가 오랫동안 장애 상태에 빠져 복구가 어려울 경우, 해당 노드를 클러스터에서 재가입시키고자 할 때 사용합니다.
- 주의:
- 재초기화 시 해당 노드의 기존 데이터는 모두 삭제되므로, replica로서의 역할만 수행 중인 노드에 한해서 적용해야 합니다.
4. reload
- 의미:
- Patroni 또는 PostgreSQL의 설정 파일(예: postgresql.conf)에 변경된 설정을 반영하는 명령어이다.
- primary에 reload를 해도 primary가 바뀌진 않는다.
- 활용 시기:
- 설정 파일을 수정한 후, 전체 서비스를 중지하지 않고 변경 사항을 적용하고 싶을 때 사용합니다.
- 예를 들어, pg_hba.conf 또는 기타 PostgreSQL 설정을 수정한 후에 사용하면, 서버 재시작 없이 설정을 반영할 수 있습니다. 재시작 없이 재적용이 가능할 때 사용된다.
- 제한:
- 모든 설정 변경이 reload로 반영되지 않을 수 있으므로, 일부 경우에는 restart가 필요할 수 있습니다. 복잡한 구조 변경이나 시스템 업데이트에는 적합하지 않다.
5. restart
- 의미:
- Patroni가 관리하는 PostgreSQL 인스턴스(및 Patroni 프로세스)를 완전히 재시작하는 명령어이다.
- 활용 시기:
- 설정 변경 후 또는 문제가 발생했을 때, 서비스 전체를 재시작하여 안정된 상태로 복구하고자 할 때 사용합니다.
- pg 파라미터 중 max_connections, shared_buffers 등과 같이 재시작이 필요한 설정이 변경된 경우 사용함.
- 재시작 시 클러스터 상태가 DCS를 통해 다시 동기화되므로, 장애 복구에도 유용합니다.
전체 클러스터의 모든 노드를 동시에 재시작하는 것이 아니라 롤링 재시작 방식을 사용한다. 하나의 노드를 재시작한 후 해당 노드가 정상 상태로 돌아오면 다음 노드를 재시작하는 식으로 진행된다.
Replica 노드부터 하나씩 내려서 재시작하고, 각 노드가 정상적으로 replication을 재개할 때까지 대기한다. 이 단계에서 primary는 계속 동작 중이므로 클라이언트에 대한 서비스 중단이 발생하지 않는다.
마지막에 primary 노드를 재시작한다. 이때도 자동 failover 할 만한 장애 상태가 발생하지 않으면 patroni는 굳이 primary를 바꾸지 않는다. 그래서 별 일이 없다면 primary가 그대로 유지된다.
6. switchover
- 의미:
- 계획된(수동) 장애 조치를 수행하여, 현재 primary 노드를 강제로 standby(복제본)로 전환하고, 지정한 후보(replica)를 새 primary로 승격시키는 명령어입니다.
- 활용 시기:
- 주 노드에 유지보수나 업그레이드 작업을 진행해야 할 때,
- 서비스 중단 없이 primary 역할을 다른 노드로 원활하게 이전하고자 할 때 사용합니다.
- 특징:
- 장애 상황이 아니라 계획된 전환이므로, 클러스터의 상태가 모두 정상인 상태에서 진행됩니다.
'DB > PostgreSQL' 카테고리의 다른 글
pg_hba 란? (0) | 2025.03.25 |
---|---|
PostgreSQL 베어메탈 환경에서 설치 (0) | 2025.03.02 |
Pigsty 란? (0) | 2025.02.15 |
pg_rewind 란? (0) | 2025.02.13 |
Patroni 설정 파일 (0) | 2025.02.13 |