2.6 KiB
date, topic, areas, tags
| date | topic | areas | tags | |||||||
|---|---|---|---|---|---|---|---|---|---|---|
| 2026-04-16 | pgpool-II 전면 전환 + pgcat 퇴역 |
|
|
n8n PoC 성공 확인 후 NocoDB·Outline 도 pgpool 경유로 전환. pgcat ArgoCD App + 리소스 삭제.
전환 순서 + 결과
NocoDB (tools/nocodb)
kubectl -n tools set env deploy/nocodb NC_DB="pg://pgpool.db.svc.cluster.local:9999?u=nocodb&p=nocodb&d=nocodb" → rollout restart → 200 OK. Baseline 2분 에러 0건.
Outline (outline/outline)
outline-secrets DATABASE_URL 호스트를 pgpool.db.svc.cluster.local:9999 로 변경 → rollout restart → 200 OK. PVC multi-attach 이슈로 old pod 수동 삭제 필요 (RWO volume Longhorn). Sequelize 호환 문제 없음.
주의: outline-secrets 는 ExternalSecret (Vault secret/apps/outline) 관리. K8s Secret 직접 패치는 refreshInterval(1h) 후 Vault 값으로 덮어씌워짐 → kappa 가 Vault 의 DATABASE_URL 을 갱신해야 영속.
pgpool 설정 변경
pool_passwd = '' 추가 — 이전 entrypoint 가 생성한 pool_passwd 파일이 남아 nocodb/outline 유저를 찾지 못하는 에러 해결. allow_clear_text_frontend_auth=on + pool_hba password 방식으로 pool_passwd 불필요.
통합 switchover 테스트
patronictl switchover --leader postgres-2 --candidate postgres-1 --force (TL10→11):
| 서비스 | 에러 수 | HTTP |
|---|---|---|
| n8n | 3 (transient) | 200 |
| NocoDB | 0 | 200 |
| Outline | 0 | 200 |
write 복구 t+3ms (즉시). pgpool SHOW POOL_NODES 에서 primary 자동 갱신.
pgcat 퇴역
kubectl -n argocd delete application pgcat(cascade 삭제)- 잔존 리소스 수동 정리: Deployment, Service, ConfigMap (pgcat-config, pgcat-monitor), PDB
helm-charts/values/pgcat.yamlgit rm + push (commit534118e)
최종 상태
n8n → pgpool.db.svc.cluster.local:9999 ✓ 200
NocoDB → pgpool.db.svc.cluster.local:9999 ✓ 200
Outline → pgpool.db.svc.cluster.local:9999 ✓ 200
pgcat → 삭제 (ArgoCD App + K8s resources + helm values)
미해결
- Outline ExternalSecret → Vault 에서 DATABASE_URL 갱신 필요 (1h 이내 kappa 처리)
- pgpool
pool_passwd비활성 (clear-text frontend) → 장기 AES 암호화 하드닝 - retry_timeout=70/ttl=30 상향 작업 중단 상태 — 별도 재개
참조
- helm-charts: a6bb681(pool_passwd 비활성) → 534118e(pgcat 퇴역)
- PoC history:
history/2026-04-16-pgpool-n8n-poc.md infra/postgresql-ha.md— 「pgcat」 섹션 삭제, 「pgpool-II」 로 교체