タグ付けされた質問 「pgbouncer」

3
HAProxyおよびPGBouncerを使用したPostgreSQLの高可用性/スケーラビリティ
Webアプリケーション用に複数のPostgreSQLサーバーがあります。通常、1つのマスターとホットスタンバイモードの複数のスレーブ(非同期ストリーミングレプリケーション)。 接続プーリングにPGBouncerを使用します:ローカルホスト上のデータベースに接続する各PGサーバー(ポート6432)にインストールされた1つのインスタンス。トランザクションプールモードを使用します。 スレーブ上の読み取り専用接続の負荷を分散するために、HAProxy(v1.5)を次のような設定で使用します: listen pgsql_pool 0.0.0.0:10001 mode tcp option pgsql-check user ha balance roundrobin server master 10.0.0.1:6432 check backup server slave1 10.0.0.2:6432 check server slave2 10.0.0.3:6432 check server slave3 10.0.0.4:6432 check したがって、私のWebアプリケーションはhaproxy(ポート10001)に接続します。これは、各PGスレーブ上に構成された複数のpgbouncerで接続を負荷分散します。 ここに私の現在のアーキテクチャの表現グラフがあります: これは次のように非常にうまく機能しますが、いくつかの実装がまったく異なることを認識しています。Webアプリケーションは、複数のPGサーバーで負荷分散するHAproxyに接続する単一のPGBouncerインスタンスに接続します。 最善のアプローチは何ですか?最初のもの(私の現在のもの)または2番目のものですか?あるソリューションが他のソリューションより優れている点はありますか? ありがとう

1
pgBouncerはうまく機能しますが、時々利用できなくなります
忙しいpostgres 9データベースの前でpgBouncerを実行しています。ほとんどの場合、問題なく動作します。しかし、数時間ごとに、psycopg2からの例外を除いて、アプリケーションからエラーメールが届きます。 OperationalError(「サーバーに接続できませんでした:要求されたアドレスを割り当てることができません。サーバーはホスト "neo-hulk"で実行されており、ポート6432でTCP / IP接続を受け入れていますか?」) これは、タスクを実行しているセロリワーカーの束を備えたpythonアプリです。これらのエラーが発生したら、pgbouncer dbをチェックし、プールサイズが制限内であることを確認します。いくつかの実験を行った後、プールの最大サイズを400に、プールサイズを200に設定しました。プールモードは「セッション」です(リクエストはほとんど自動コミットで、ほとんどトランザクションはありません)。 何がpgBouncerをそのように「消失」させるのですか?それは短期間のみです(そして、全体としては、処理する要求の膨大な量と比較して、ごく少量の要求について話しています)が、失敗した要求は重要です。 ありがとう!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.