pgpool 전면 전환 + pgcat 퇴역: postgresql-ha.md 전면 갱신

This commit is contained in:
heimdall
2026-04-16 12:24:39 +09:00
parent 5f9a153d96
commit 33ce94a75a
2 changed files with 107 additions and 55 deletions

View File

@@ -0,0 +1,64 @@
---
date: 2026-04-16
topic: pgpool-II 전면 전환 + pgcat 퇴역
areas:
- infra/postgresql-ha.md
tags: [history, pgpool, pgcat, patroni, postgresql, migration]
---
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 퇴역
1. `kubectl -n argocd delete application pgcat` (cascade 삭제)
2. 잔존 리소스 수동 정리: Deployment, Service, ConfigMap (pgcat-config, pgcat-monitor), PDB
3. `helm-charts/values/pgcat.yaml` git rm + push (commit `534118e`)
## 최종 상태
```
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」 로 교체