3.9 KiB
title, updated, tags
| title | updated | tags | |||||
|---|---|---|---|---|---|---|---|
| pgpool stale primary detection — n8n 장기 장애 (2026-07-11) | 2026-07-11 |
|
증상
https://n8n.inouter.com접속 시 BunnyCDN 오리진 pull은 성공하나 HTTP 503, body{"code":503,"message":"Database is not ready!"}- n8n 파드 로그에
Database connection timed out,Pruning failed,Failed to hard-delete executions반복
원인
pgpool-II 두 파드(db ns) 모두 show pool_nodes 기준 실제 Patroni Leader(node 1, 10.100.3.185)를 status=down으로 오인식, 3개 백엔드 전부 role=standby로 표시되어 write 가능한 노드가 없는 상태였음.
- pod
pgpool-f6fcdb947-pvx45(2026-05-19 기동): node 1downsince 2026-06-05 15:53:45 — 5주 이상 방치 - pod
pgpool-f6fcdb947-lmwg5(2026-05-22 기동): node 1downsince 2026-06-25 20:52:59
Patroni 자체는 정상 (patronictl list — postgres-2 Leader, TL23, replica lag 0). 즉 Patroni failover/switchover 이후 pgpool이 새 primary를 재탐지하지 못하고 stuck된 것으로 추정.
failover_on_backend_error = off, failover_command = '' 설정(../infra/data/postgresql-ha 참조 — Patroni가 promotion 전담)이라 pgpool은 자동으로 상태를 갱신하지 않고, 수동 개입(PCP 또는 재시작) 필요.
PCP 관리 인터페이스 불능 — 근본 원인
pcp_attach_node로 수동 재연결 시도 시:
FATAL: failed to authenticate PCP user
DETAIL: could not open /opt/pgpool-II/etc/pcp.conf. reason: No such file or directory
원인은 pgpool-config ConfigMap의 커스텀 entrypoint.sh (kaffa/helm-charts repo pgpool/configmap.yaml)가 pgpool 이미지 기본 entrypoint를 쓰지 않고 직접 pgpool.conf/pool_hba.conf만 렌더링 후 pgpool -n -f ... -a ...를 실행 — pcp.conf 생성 로직도, -F 플래그도 없었음. pgpool-secrets에 pcp_user/pcp_password 키는 있었지만 Deployment env에 매핑도 안 되어 있어 애초에 이중으로 빠져 있었음 (env 배선 + entrypoint 로직 둘 다 누락).
조치
kubectl -n db rollout restart deployment pgpool— 재시작 후show pool_nodes에서 node 1role=primary, status=up으로 정상 인식 확인- n8n 파드는 pgpool 재시작 후에도 기존 끊긴 커넥션을 계속 사용해 timeout 지속 →
kubectl -n n8n rollout restart deployment n8n으로 해결 https://n8n.inouter.comHTTP 200 복구 확인- 근본 수정 (
kaffa/helm-chartsrepo, commit712e5a0+a303f18):pgpool/deployment.yaml:PGPOOL_PCP_USER/PGPOOL_PCP_PASSWORDenv를pgpool-secrets(pcp_user/pcp_password)에서 매핑pgpool/configmap.yamlentrypoint.sh:pg_md5로$CONFDIR/pcp.conf생성 +pgpool실행 시-F "$CONFDIR/pcp.conf"추가- ArgoCD
pgpoolApp selfHeal로 자동 반영 확인,pcp_node_info -W로 PCP 인증 정상 동작 검증 완료 - 참고:
pcp_node_info류 CLI의-w+PCPPASSWORDenv 조합은 인증 실패함 (원인 미상) —-W로 stdin에 비밀번호 입력하는 방식만 확인됨. 향후 PCP 수동 조작 시 이 방식 사용.
TODO / 재발 방지
- pgpool 배포에
pcp.conf생성 로직 추가 — 2026-07-11 완료 (위 조치 4) - Patroni switchover/failover 시 pgpool 자동 재탐지 여부 조사 (health_check_period=10s인데 왜 자동 복구 안 됐는지 원인 미상 — 재현 필요)
- pgpool
show pool_nodes의status=down&role≠primary상태를 감지하는 모니터링/알림 추가 (5주간 미인지 상태로 방치됨) - n8n 자체도 DB 재연결 실패 시 자동 재시작(liveness probe on DB connectivity) 검토
관련
- ../infra/data/postgresql-ha — pgpool-II 구성, Patroni 클러스터
- ../services/n8n — n8n 서비스 개요
- 2026-04-16-pgpool-full-migration — pgpool 전면 전환 이력