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로 바뀌지 않으며 재시작이 필요하다.