Connection Manager overview
===========================

接続マネージャーについて
------------------------

Connection Managerは、 EDB Postgres Distributed PGD
6.0の新しいバックグラウンドワーカーであり、クライアントアプリケーションの単一のエントリポイントを提供することにより、PGDクラスターへの接続プロセスを簡素化します。
PGD
5.xプロキシソリューションを、PGDの読み書き、読み取り専用、およびHTTPステータスネットワークインターフェイスを公開する緊密に統合されたアプローチに置き換えます。

Connection
ManagerはPGDに完全に統合されており、既存のPGDアーキテクチャとシームレスに動作するように設計されています。すべてのPGDデータノードには、着信接続をリッスンし、クラスター内の適切なノード、特にクラスター内の現在の書き込みリーダーにルーティングするConnection
Managerインスタンスがあります。また、クラスターからデータを読み取ることのみが必要なアプリケーションに読み取り専用インターフェイスも提供します。

PGD
6.3.0から、接続マネージャーはサブスクライバー専用ノードでデフォルトで起動し、主にレプリケートデータの受信専用のノードでも、高度な接続プーリングおよびセッション管理機能にアクセスできます。

Connection
Managerは、以前は別個のツールを必要とした3つの機能を統合します。書き込みを現在のリーダーにルーティングし、読み取りトラフィックをノード全体に分散し、バックエンド接続をプールします。
PGD内で実行されるため、認証は\ ``pg_hba.conf``
で一度構成され、プロキシレイヤーとデータベースの両方に適用され、維持する個別のユーザーリストはありません。

PGD 6.5以降、Connection
Managerは、シングルスレッドではなくマルチスレッドエンジンで実行されます。クライアントトラフィック、プーリング、および認証はマルチプルのスレッドで処理されるため、接続容量はノードで使用可能なCPUコアの数に応じて拡張されます。構成とルーティングの更新は、トラフィックパスから離れた別のスレッドで処理されるため、クライアント接続に遅延が追加されません。ワーカースレッドの数は
:ref:`bdr.conn_mgr_worker_threads <bdr.conn_mgr_worker_threads>` 
によって制御され、これはデフォルトで、CPUコアの数を4で割って、2〜8の間にクランプされるように自分自身を自動的にサイジングします。

接続マネージャーを使用する
--------------------------

接続マネージャーは、デフォルトでPostgresサーバーの構成に従います。読み取り/書き込みポート、読み取り専用ポート、およびHTTPポートの3つのポートがあります。読み取り/書き込みポートは書き込み操作に使用され、読み取り専用ポートは読み取り操作に使用されます。
HTTPポートは、監視と管理の目的で使用されます。

読み取り/書き込みポートは、デフォルトで、Postgresポート+1000通常は6432に設定されます。読み取り専用ポートは、Postgresポート+1001通常は6433に設定されます。
HTTPポートはPostgresポート+1002通常は6434に設定されます。

接続マネージャーを使用するには、データノードの読み取り書き込みまたは読み取り専用ポートに接続するようにクライアントアプリケーションを構成します。接続マネージャーは、クラスター内の適切なノードに接続をルーティングします。

読み取り専用ポートに接続すると、接続が読み取り専用操作に制限されます。読み取り/書き込みに変更できないことを除き、
 
`SET TRANSACTION READ ONLY <https://www.postgresql.org/docs/current/sql-set-transaction.html>`_  。 
`transaction_read_only <https://www.postgresql.org/docs/17/runtime-config-client.html#GUC-TRANSACTION-READ-ONLY>`_ 構成パラメーターは、これらの接続で\ ``on``
を正しくレポートします。

認証
----

接続マネージャーは、 Postgresと同じ\ ``pg_hba.conf``
構成を使用してTLS終端と事前認証を実行し、維持する別のユーザーリストはありません。サポートされているメソッドとコンストレインについては、
:ref:`Connection Manager Authentication <Connection Manager Authentication>` を参照してください。

接続プーリング
--------------

接続マネージャーにはビルトインの接続プーリングが含まれており、ほとんどの展開でpgBouncerなどの別個のプーラーの必要がありません。プーリングは、多くのクライアント接続で共有することによりバックエンドのPostgres接続の数を減らし、データベースサーバーのメモリとプロセスのオーバーヘッドを削減します。リファレンスの詳細については :ref:`Connection pooling <Connection pooling>` を、
DBAセットアップガイダンスについては :ref:`Configuring connection pooling <Configuring connection pooling>` を、および開発者ガイダンスについては :ref:`Using connection pooling in your application <Using connection pooling in your application>` を参照してください。

ロードバランシング
------------------

接続マネージャーは、ロードバランサーに代わるものではありません。外部ロードバランサーを使用して、別のノードで実行されているConnection
Managerインスタンス間でクライアントトラフィックを分散します。構成の詳細とHAProxyの例については、
:ref:`Load Balancing with Connection Manager <Load Balancing with Connection Manager>` を参照してください。

構成
----

接続マネージャーは、ポート、接続制限、コンセンサスタイムアウト、プールモードを含むPGDグループオプションを介して構成されます。完全なオプションのリファレンスについては、
:ref:`Configuring Connection Manager <Configuring Connection Manager>` を参照してください。

モニタリング
------------

接続マネージャーは、カタログビューとHTTPエンドポイントを介して接続数とプールの使用率を公開します。使用可能なメトリックについては、
:ref:`Monitoring the Connection Manager <Monitoring the Connection Manager>` を参照してください。
