PgBouncer 接続プール
PostgreSQLレベル: 中級所要時間: 30〜45 分PGDG リポジトリからの PgBouncer のインストール: transaction または session のプールモード、auth_query (SECURITY DEFINER 関数) または userlist.txt による scram-sha-256 認証、データベースの max_connections と CPU 数から算出したプールサイズ、systemd、オプションで so_reuseport によるマルチプロセス。最後に管理コンソール (SHOW POOLS/STATS)、アプリケーションの接続文字列、transaction モードの互換性チェックリストを扱います。
導入する場面: アプリケーションが数百〜数千の接続を開く、sorry, too many clients already が発生する、または接続確立のコストが高い場合。PgBouncer は HA やバックアップのソリューションではありません: フェイルオーバーには ストリーミングレプリケーション や Patroni、バックアップには pgBackRest が必要です。
構成: PgBouncer はデータベースサーバー上または別サーバー上。Patroni では HAProxy/VIP の前段
開始前の確認
- PostgreSQL が pg-install ガイドでインストールされて稼働しており、… データベースと … ユーザー (scram-sha-256 のパスワード) が存在する。
- PostgreSQL の… Patroni クラスター (pg-patroni) が稼働しており、… が現在の Leader…プライマリ (pg-streaming) が稼働している… pg-install ガイドでインストールされて稼働している…。… データベースと … ユーザー (scram-sha-256 のパスワード) が存在する。
- Patroni クラスター … が正常: Leader が 1 つ、レプリカは streaming。HAProxy の書き込みポート (…:…) は leader だけに転送される。
- アプリケーションユーザーのパスワードが SCRAM-SHA-256 形式で保存されている (古い md5 ハッシュのユーザーは password_encryption = scram-sha-256 の状態でパスワードを再設定する必要があります)。
- フォームの max_connections (…) と CPU (…) がデータベースサーバーの実際の値と一致している (プールサイズはこれらから算出されます)。
- PgBouncer サーバーからデータベース (…HAProxy/VIP ……:…) に到達でき、アプリケーションサーバーから PgBouncer (…:…) に到達できる。
- ポート … が空いている。
- アプリケーションチームとプールモードについて合意済み: transaction モードでは、セッション状態に依存する機能 (下のチェックリスト) を使っていない。
- パスワードハッシュをデータベースサーバーから PgBouncer サーバーにコピーするための scp アクセス (root または sudo 権限のあるユーザー) がある、または別の安全な方法でファイルを移動する。
ガイドのフェーズ
- PgBouncer のインストール — PGDG リポジトリを追加する · PGDG リポジトリを追加する · PgBouncer をインストールする
- データベース側 — ロールを確認する: このサーバーは… Leader…プライマリ…か · 管理用と認証用のユーザーを作成する · 管理用と認証用のユーザーを作成する · パスワードを設定する · パスワードを設定する · pg_hba.conf に PgBouncer サーバーを追加する …
- PgBouncer の設定 — auth_user のパスワードを追加する · pgbouncer.ini を作成する · ファイルディスクリプタの上限を設定する · PgBouncer を起動する
- マルチプロセス (so_reuseport) — プロセスごとの設定ファイル · systemd テンプレートサービス · 単一プロセスのサービスを停止し、プロセスを起動する
- 検証 — アプリケーションユーザーで接続する · leader に接続されることを確認する · 管理コンソールを確認する · ファイアウォールで PgBouncer のポートを開放する
- アプリケーション側とインストール後の作業 — アプリケーションの接続文字列 · transaction モードの互換性チェックリスト · プールを監視する · 設定の変更と再読み込み