メンテナンス中にPgBouncerで接続を保持(PAUSE/RESUME)し、構成をリロード(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でキューが再び流れる。これにより、短時間のプライマリ再起動やスイッチオーバーは、アプリケーションにはエラーではなく短い遅延として見える。
使用する場面
短時間のメンテナンスウィンドウ(スイッチオーバー、マイナーバージョンの再起動、パラメータ変更による再起動)中、およびpgbouncer.ini/userlistの変更適用時に。
注意
PAUSEはすべてのアクティブなトランザクションが終了した後にのみ戻る。長時間実行のクエリはPAUSEを保留させる(必要に応じてPostgreSQLでそのセッションを終了する)。待機中のクライアントはquery_wait_timeout(デフォルト120 s)が経過するとエラーになるため、その時間内にメンテナンスを終える。PAUSE後にRESUMEを忘れると完全な停止になる。一部の設定(listen_addr、listen_portなど)はRELOADでは変更されず、再起動が必要。