1

私はPostgreSQLの4人の作業者の間にbi-direction replicationを設定しています。私は、Goデータベース接続プールが4つすべての接続を処理するようにしたいと思います。それらはすべて複数の接続を作成し、任意のクエリに対してランダムに選択し、接続が切断されたときにフェイルオーバーすることができなければなりません。これはGoデータベースライブラリで実行可能ですか?または、ちょうどpgBouncerを使用して、そのバランスを処理するためにdatabase/sqlまたはpgxを取得しようとしないでください。クラスタ内の複数のホストへの接続を管理するGolangデータベース接続プールを取得するにはどうすればよいですか?

+2

golangの接続プールは 'configuration'になります(スキーマごとにPostgreSQLの場合、MySQLでは同じサーバで複数のデータベース/スキーマにアクセスするために同じ接続を使用できます)。複数のサーバーに接続する必要がある場合は、サーバーごとに異なる接続プールを作成し、手動で管理する必要があります。 IMHO、あなたの場合は、pgBouncerを使うべきです。 – putu

+0

@putuのように見えます。私はそれを受け入れることができる答えに入れたいですか? – theory

答えて

2

sql.Open(driverName, dataSourceName)dataSourceNameはデータベースに接続するためのドライバ固有のconfiguration)を呼び出すたびに、golangの接続プールが作成されます。 configuration(ホストアドレス、スキーマ、ユーザー名などを変更する)を変更するたびに、新しい接続を開く必要があるため、新しい接続プールが作成されます。ドライバが負荷分散を処理できる場合は、dataSourceNameに設定する必要があります。高可用性構成の場合はMariaDB Connector/Jです。

AFAIK、lib/pqおよびpgxではまだロードバランシングはサポートされていません。あなたのケースでは、クラスタ内のデータベースサーバに接続するには、サーバごとに異なる接続プールを開いてから、接続を管理してロードバランシングを手動で実行する必要があります。このアプローチは、多くの作業が必要です。私はpgBouncerを使う方が良いと思います。

+0

偉大な答え、ありがとう! – theory

関連する問題