infra: APISIX ingress controller 복구 및 PostgreSQL HA 구조 명확화
- apisix.md: ingress controller 2026-04-08 복구, GatewayProxy + ApisixRoute CRD 호환 검증, 옛 helm values 문제 정정, ApisixRoute 예시 추가 - apisix.md: 외부 통합 etcd 클러스터 사용 명시 (K3s 내부 StatefulSet 아님), global_rules는 chaitin-waf 미포함 (라우트별 적용) - postgresql-ha.md: pgcat가 HAProxy 단일 백엔드 경유로 변경 (2026-04-08 사고 기록), Patroni 노드 IP 직접 박지 말 것 경고 - gitea.md: 컨테이너 레지스트리 섹션 추가, gitea-registry secret 네임스페이스별 수동 복사 필요 명시
This commit is contained in:
@@ -112,6 +112,34 @@ backend bk_postgres_primary
|
||||
- Patroni failover 시 HAProxy가 자동으로 새 Leader를 감지 (~3초)
|
||||
- K3s config 변경 없이 Leader 전환 대응
|
||||
|
||||
## 애플리케이션 접속 경로
|
||||
|
||||
NocoDB, n8n 등 K3s 내부 애플리케이션은 **pgcat**(연결 풀링)을 통해 PostgreSQL에 접속.
|
||||
|
||||
```
|
||||
nocodb/n8n → pgcat (db.svc.cluster.local:6432) → HAProxy 192.168.9.1:5432 → Patroni Leader
|
||||
```
|
||||
|
||||
`db/pgcat-config` ConfigMap의 각 풀의 `shards.0.servers`는 **HAProxy 단일 백엔드만 가리켜야 함** (2026-04-08 변경):
|
||||
|
||||
```toml
|
||||
[pools.nocodb.shards.0]
|
||||
database = "nocodb"
|
||||
servers = [["192.168.9.1", 5432, "primary"]]
|
||||
|
||||
[pools.n8n.shards.0]
|
||||
database = "n8n"
|
||||
servers = [["192.168.9.1", 5432, "primary"]]
|
||||
```
|
||||
|
||||
⚠️ **하지 말 것**: pgcat에 Patroni 노드 IP(10.100.2.5/3.185/1.83)를 직접 박지 말 것. Patroni failover가 발생하면 pgcat는 옛 primary를 계속 가리키게 되어 nocodb/n8n이 read-only 에러 발생.
|
||||
|
||||
pgcat는 풀링 전용으로만 쓰고, leader 탐지는 OpenWrt HAProxy에 위임. `query_parser_enabled = false` 설정 (read/write splitting 비활성).
|
||||
|
||||
### 2026-04-08 사고 기록
|
||||
|
||||
Patroni failover 발생 → pgcat가 옛 primary IP(`10.100.2.5`)를 hardcoded 참조 → nocodb 마이그레이션 시 `cannot execute UPDATE in a read-only transaction` 에러로 4시간 가량 CrashLoopBackOff. n8n은 마이그레이션이 없어서 표면화되지는 않았으나 동일한 잠재 문제 존재. 위의 단일 백엔드 구조로 변경하여 항구 해결.
|
||||
|
||||
## APISIX etcd 통합 (2026-04-06)
|
||||
|
||||
기존 각 사이트별 독립 etcd를 통합 etcd 클러스터로 이전.
|
||||
|
||||
Reference in New Issue
Block a user