pgcat+Patroni TCP keepalive 적용: 좀비 소켓 방지 (Step 1 옵션 B)
This commit is contained in:
@@ -149,7 +149,29 @@ servers = [["192.168.9.1", 5432, "primary"]]
|
||||
|
||||
pgcat는 풀링 전용으로만 쓰고, leader 탐지는 OpenWrt HAProxy에 위임. `query_parser_enabled = false` 설정 (read/write splitting 비활성).
|
||||
|
||||
Patroni failover 인시던트 이력: [[../history/2026-04-08-patroni-failover-incident|2026-04-08 pgcat/nocodb/outline read-only 사고]]
|
||||
### 좀비 소켓 방지 — TCP keepalive
|
||||
|
||||
Patroni failover 시 pgcat↔backend 및 client↔pgcat TCP 소켓이 반쪽만 끊어진 채 애플리케이션 풀이 계속 붙잡는 현상을 방지하기 위해 양쪽 모두 TCP keepalive 활성화.
|
||||
|
||||
**pgcat (`db/pgcat-config` `[general]`)**:
|
||||
```toml
|
||||
tcp_keepalives_idle = 60
|
||||
tcp_keepalives_interval = 10
|
||||
tcp_keepalives_count = 3
|
||||
```
|
||||
|
||||
**Patroni (`postgresql.parameters` via `patronictl edit-config -p`)**:
|
||||
```
|
||||
tcp_keepalives_idle = 60
|
||||
tcp_keepalives_interval = 10
|
||||
tcp_keepalives_count = 3
|
||||
```
|
||||
|
||||
동작: 60s idle 후 keepalive probe 전송, 10s 간격으로 3회 재전송 실패 시 커넥션 종료. 최대 감지 시간 **90초**. pgcat 는 서버 측에, Patroni 는 클라이언트(= pgcat 소켓) 측에 각각 설정 — 어느 쪽에서 먼저 죽음을 감지해도 소켓이 정리됨.
|
||||
|
||||
검증: 2026-04-16 switchover 테스트(postgres-3→postgres-2, TL6→7) 기준 n8n 에러 윈도우 7초·9건으로 한정 ([[../history/2026-04-16-pgcat-patroni-tcp-keepalive|history]]). 이전 2026-04-15 19:53 UTC failover 시 1038건과 극적 대비.
|
||||
|
||||
Patroni failover 인시던트 이력: [[../history/2026-04-08-patroni-failover-incident|2026-04-08 pgcat/nocodb/outline read-only 사고]] · [[../history/2026-04-15-pgcat-ha-promotion|2026-04-15 pgcat HA 승격 Step 0]]
|
||||
|
||||
## APISIX etcd 사용 현황
|
||||
|
||||
|
||||
Reference in New Issue
Block a user