본문으로 건너뛰기

10.4 용어집

v2.2 기준 용어입니다. 상태 이름은 monitor 스키마의 pgautofailover.replication_state enum(v2.2 pgautofailover.sql)에 정의된 22개 값을 모두 담았습니다. 설명은 v2.2 failover-state-machine.rst와 이 노트의 실측 로그를 바탕으로 작성했습니다.

구성 요소와 개념​

용어설명
monitorpgautofailover extension이 설치된 PostgreSQL 인스턴스와 이를 관리하는 pg_autoctl. 노드 상태를 기록하고 목표 상태를 결정하는 주체
keeper데이터 노드에서 pg_autoctl run으로 실행되는 프로세스. 로컬 PostgreSQL을 자식 프로세스로 실행하고 monitor가 정한 목표 상태로 전환
pg_autoctlmonitor와 keeper 모두에서 사용하는 명령행 도구
formation함께 관리하는 PostgreSQL 서비스의 논리적 묶음. 기본값 default. monitor 하나가 여러 formation을 관리
group같은 데이터를 가진 노드 집합(primary 하나와 standby들). 일반 구성에는 group 0 하나가 있고, Citus는 worker마다 group이 있음
nodemonitor에 등록된 PostgreSQL 인스턴스 하나. 역할이 바뀔 수 있으므로 이름에 역할을 넣지 않도록 문서에서 권장
reported statekeeper가 node_active()로 보고한 현재 상태
assigned state, goal statemonitor가 노드에 지정한 목표 상태
node_active()keeper가 1초마다 호출하는 monitor 함수. 현재 상태를 보고하고 목표 상태를 수신
health checkmonitor가 각 노드에 PostgreSQL 연결을 시도하여 도달 가능 여부를 확인하는 작업
candidate priority0~100, 기본 50. failover 후보 선정 우선순위. 0이면 자동 승격 대상에서 제외
replication quorum노드별 boolean, 기본 true. true인 standby만 synchronous_standby_names에 포함
number_sync_standbysformation 설정. primary가 커밋할 때마다 기다릴 동기 standby 수. N으로 설정하려면 quorum 참여 standby가 N+1개 이상 필요
Business Continuity2노드 구성의 설계 목표. 노드 하나를 잃어도 서비스를 계속하는 것을 데이터 이중화보다 우선

상태​

상태설명
unknownenum의 기본 자리 값
init처음 등록된 노드. monitor가 존재만 알고 있는 상태
singlegroup에 노드가 하나뿐인 상태. 일반 PostgreSQL처럼 동작하며 failover는 없음
wait_primaryprimary 역할이지만 정상적인 동기 standby가 없는 상태. 동기 복제를 끄고(synchronous_standby_names = '') 쓰기를 받음. 자동 failover 불가
join_primarystandby 합류를 준비하던 primary 상태. deprecated, 현재는 primary를 사용
primary정상적인 standby가 따라잡은 상태. failover가 가능한 유일한 primary 상태
apply_settingsprimary가 복제 설정 변경(synchronous_standby_names)을 적용하는 중
wait_standbystandby로 지정된 후 primary가 접속을 허용하기를 기다리는 상태
catchinguppg_basebackup 또는 pg_rewind 후 primary를 따라잡는 중. 승격 불가
secondaryprimary와의 WAL 차이가 enable_sync_wal_log_threshold(16MB) 이내인 hot standby. 승격 후보
maintenance운영자가 maintenance로 전환한 노드. pg_autoctl이 관리하지 않음
wait_maintenancesecondary가 maintenance로 전환되기 전, primary가 비동기 방식으로 바뀌기를 기다리는 상태
prepare_maintenanceprimary를 maintenance로 전환하기 전 단계. 이어서 failover가 발생
drainingprimary가 새 쓰기를 멈추고 남은 WAL을 standby로 보내는 단계. PostgreSQL을 정지하는 방식으로 구현
demote_timeoutmonitor가 강등을 지정했지만 keeper가 확인하지 않아 시간 초과를 기다리는 상태. 고립된 primary가 스스로 이 상태에 들어가기도 함
demoted강등 완료. keeper가 PostgreSQL을 멈추고 실행되지 않도록 함
prepare_promotion승격 후보가 승격을 준비하는 상태. primary 정지를 monitor와 동기화
stop_replication후보를 promote하되 default_transaction_read_only = on으로 쓰기를 막고 이전 primary의 강등을 기다리는 상태
report_lsnstandby가 2대 이상일 때 선출에 사용할 최신 LSN을 보고하는 상태. 복제를 멈춘 뒤 보고
fast_forwardpriority에 따라 선정되었지만 LSN이 뒤처진 후보가 더 앞선 standby에서 부족한 WAL을 받아 오는 단계
join_secondary선출되지 않은 standby가 새 primary를 따르기 위해 기다리는 상태
droppedpg_autoctl drop node로 제거 중인 노드. 상태 보고 후 monitor에서 삭제

monitor GUC (v2.2 기본값)​

GUC기본값뜻
pgautofailover.health_check_period5000 mshealth check 간격
pgautofailover.health_check_timeout5000 mshealth check 연결 타임아웃
pgautofailover.health_check_max_retries2실패로 표시하기 전 재시도 횟수
pgautofailover.health_check_retry_delay2000 ms재시도 간격
pgautofailover.node_considered_unhealthy_timeout20000 ms마지막 보고 후 이 시간이 지나고 health check도 실패하면 unhealthy
pgautofailover.primary_demote_timeout30000 ms새 primary를 열기 전 이전 primary의 강등을 기다리는 시간
pgautofailover.startup_grace_period10000 msmonitor 시작 후 failover를 시작하지 않는 유예 시간
pgautofailover.promote_wal_log_threshold16777216standby가 이 바이트 이상 뒤처지면 승격하지 않음
pgautofailover.enable_sync_wal_log_threshold16777216standby가 이 바이트 이내로 따라잡아야 동기 복제를 다시 켬

main 브랜치에는 pgautofailover.guard_data_loss와 pgautofailover.replication_stall_timeout이 추가되었지만 v2.2에는 없습니다.

keeper 설정 ([timeout] 섹션, v2.2 실측 값)​

키값뜻
network_partition_timeout20primary가 monitor와 standby 모두에 이 시간(초) 동안 연결되지 않으면 스스로 강등
prepare_promotion_catchup30이름상 승격 전 WAL을 따라잡는 대기 시간(초)이지만 v2.2에서는 파싱만 하고 사용하지 않음
prepare_promotion_walreceiver5이름상 승격 전 walreceiver 대기 시간(초)이지만 v2.2에서는 사용하지 않음(소스 TODO)
postgresql_restart_failure_timeout20PostgreSQL 재시작을 시도하는 시간(초)
postgresql_restart_failure_max_retries3PostgreSQL 재시작 최대 시도 횟수

내부 사용자와 이름​

이름설명
autoctl_nodekeeper가 monitor에 접속할 때 사용하는 사용자
autoctlmonitor의 pg_auto_failover DB 소유자
pgautofailover_monitormonitor의 health check 사용자
pgautofailover_replicator복제, pg_basebackup, pg_rewind에 사용하는 사용자
pgautofailover_standby_<nodeid>replication slot 이름이자 application_name. synchronous_standby_names에 이 이름이 포함됨
postgresql-auto-failover.confpg_autoctl이 관리하는 PostgreSQL 설정 파일. postgresql.conf 맨 위에서 include