DBAtlas · 데이터베이스 운영 아틀라스

PgBouncer로 유지보수 중 연결 보류(PAUSE/RESUME) 및 구성 reload(RELOAD)

PostgreSQLPgBouncer

명령어

psql -h 127.0.0.1 -p 6432 -U pgbouncer -d pgbouncer -X
RELOAD;            -- apply pgbouncer.ini and auth_file changes without dropping connections
PAUSE <db>;        -- closes server connections once running queries/transactions finish; new requests are queued
-- ... maintenance: switchover, PostgreSQL restart, etc. ...
RESUME <db>;
-- If the host in [databases] was changed (after RELOAD), gradually refresh server connections:
RECONNECT <db>;

하는 일

PAUSE는 클라이언트 연결을 끊지 않고 PostgreSQL 측 연결을 비우며 새 쿼리를 대기열에 넣는다. RESUME은 대기열을 다시 흐르게 한다. 따라서 짧은 primary 재시작이나 스위치오버가 애플리케이션에는 오류가 아닌 잠깐의 지연으로 보인다.

사용 시점

짧은 유지보수 시간대(스위치오버, 마이너 버전 재시작, 파라미터 재시작) 및 pgbouncer.ini/userlist 변경 적용 시.

주의

PAUSE는 모든 활성 트랜잭션이 끝난 후에야 반환된다. 장시간 쿼리가 PAUSE를 붙잡는다(필요하면 PostgreSQL에서 해당 세션을 종료한다). 대기 중인 클라이언트는 query_wait_timeout(기본 120 s)이 만료되면 오류를 받으므로 그 시간 안에 유지보수를 끝낸다. PAUSE 후 RESUME을 잊으면 전체 장애가 된다. 일부 설정(listen_addr, listen_port 등)은 RELOAD로 바뀌지 않으며 재시작이 필요하다.

DBAtlas에서 열기 →

관련 항목