web-dev-qa-db-ja.com

pgbouncerを設定してマスターとスレーブにクエリを分散させることは可能ですか?

マスター(書き込み/読み取り)およびスレーブ(読み取り専用)Postgres 10データベースがあります。スレーブはマスターからのオンライン複製です。

これで、アプリケーション(c#webapi)はマスターに直接のみ接続します。スレーブですべてのSELECTクエリを実行して、ハードウェア間で負荷を分散したいと考えています。

  1. アイデアは、スレーブですべてのSELECTを渡す接続プーラーを追加し、他のクエリはマスターに渡すことです
  2. レプリケーションが失敗した場合、自動的にそれを検出し、レプリケーションがオンラインになるまですべてのSELECTをマスターに渡します。

Pgbouncerはそれで大丈夫ですか?別のツールですか?

1
Doctor Coder

pgBouncerはそれを行うことができず、確かにそれは疑わしい機能です。次のようなステートメントを確実に伝えるにはどうすればよいですか

SELECT pg_create_physical_replication_slot('aname');

データベースを変更しませんか?

そのような機能を誇るpgPoolがありますので、調べてみてください。

通常、より良い手法は、アプリケーションが2つのデータベース接続を使用することです。1つは読み取り用で、もう1つはデータ変更用です。それはあなたが推測しようとするツールのなすがままにはなりません。

3
Laurenz Albe