From 0e21b94f3bd7558cf54c71f3d0570eedc2448bb6 Mon Sep 17 00:00:00 2001 From: kaffa Date: Sat, 11 Jul 2026 12:59:03 +0900 Subject: [PATCH] =?UTF-8?q?n8n=20=EC=9E=A5=EC=95=A0:=20pcp.conf=20?= =?UTF-8?q?=EA=B7=BC=EB=B3=B8=20=EC=9B=90=EC=9D=B8(entrypoint=20=EB=AF=B8?= =?UTF-8?q?=EC=83=9D=EC=84=B1)=20=EB=B0=8F=20helm-charts=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=EB=82=B4=EC=97=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-07-11-pgpool-stale-primary-n8n-outage.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/history/2026-07-11-pgpool-stale-primary-n8n-outage.md b/history/2026-07-11-pgpool-stale-primary-n8n-outage.md index 93d71fc..47ba331 100644 --- a/history/2026-07-11-pgpool-stale-primary-n8n-outage.md +++ b/history/2026-07-11-pgpool-stale-primary-n8n-outage.md @@ -20,24 +20,30 @@ Patroni 자체는 정상 (`patronictl list` — postgres-2 Leader, TL23, replica `failover_on_backend_error = off`, `failover_command = ''` 설정([[../infra/data/postgresql-ha|postgresql-ha]] 참조 — Patroni가 promotion 전담)이라 pgpool은 자동으로 상태를 갱신하지 않고, 수동 개입(PCP 또는 재시작) 필요. -### 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 배포에 `pcp.conf`가 아예 생성되어 있지 않음 — PCP 기반 노드 관리가 애초에 불가능한 상태. `pgpool-secrets`에 `pcp_user`/`pcp_password`는 존재하나 서버측 conf 파일 부재로 무용. + +원인은 `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 로직 둘 다 누락). ## 조치 1. `kubectl -n db rollout restart deployment pgpool` — 재시작 후 `show pool_nodes`에서 node 1 `role=primary, status=up`으로 정상 인식 확인 2. n8n 파드는 pgpool 재시작 후에도 기존 끊긴 커넥션을 계속 사용해 timeout 지속 → `kubectl -n n8n rollout restart deployment n8n`으로 해결 3. `https://n8n.inouter.com` HTTP 200 복구 확인 +4. **근본 수정** (`kaffa/helm-charts` repo, commit `712e5a0` + `a303f18`): + - `pgpool/deployment.yaml`: `PGPOOL_PCP_USER`/`PGPOOL_PCP_PASSWORD` env를 `pgpool-secrets`(`pcp_user`/`pcp_password`)에서 매핑 + - `pgpool/configmap.yaml` entrypoint.sh: `pg_md5`로 `$CONFDIR/pcp.conf` 생성 + `pgpool` 실행 시 `-F "$CONFDIR/pcp.conf"` 추가 + - ArgoCD `pgpool` App selfHeal로 자동 반영 확인, `pcp_node_info -W`로 PCP 인증 정상 동작 검증 완료 + - 참고: `pcp_node_info`류 CLI의 `-w`+`PCPPASSWORD` env 조합은 인증 실패함 (원인 미상) — `-W`로 stdin에 비밀번호 입력하는 방식만 확인됨. 향후 PCP 수동 조작 시 이 방식 사용. ## TODO / 재발 방지 -- [ ] pgpool 이미지/차트에 `pcp.conf` 생성 로직 추가 (Helm values 또는 ConfigMap) — PCP로 즉시 재연결 가능하게 +- [x] 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) 검토