Application connection management¶
アプリケーション接続の管理は、高可用性の重要な部分です。
特に非同期レプリケーションでは、競合を回避し、アプリケーションの可用性を保証するために、一貫した書き込みリードノードを持つことが重要です。
EDB Postgres Distributedは、PGDプロキシと呼ばれるプロキシレイヤーを提供します。これは、通常、高可用性構成(リージョンごとに少なくとも2つのインスタンス)でインストールされます。
PGDプロキシは、 EDB Postgres分散ノードの1つに接続し、 EDB Postgres分散クラスターによって決定されたルーティング構成の変更を監視します。これにより、接続が一貫して正しいノードにルーティングされます。
構成¶
ルーティングの構成は、 SQLインターフェイスまたはPGD-CLIのいずれかを介して行われます。
bdr.alter_node_group_option()
関数を呼び出すことで、ルーティングの決定を有効にできます。例:
SELECT bdr.alter_node_group_option(region1-group, enable_proxy_routing, true)
同じオプションをfalse に設定することで無効にできます。
追加のグループレベルのオプションは、ルーティングの決定に影響します。
route_writer_max_lag—書き込みリーダーとして選択される新しい書き込み候補の最大ラグ(バイト単位)。これに合格する候補者がない場合、ライタは自動的に選択されません。route_reader_max_lag—ノードが実行可能な読み取り専用ノードと見なされるための最大ラグ(バイト単位)。現在、将来の使用のために予約されています。
ルーティングのノードごとの構成は、 bdr.alter_node_option()
を使用して設定されます。ルーティングに影響する使用可能なオプションは次のとおりです。
route_dsn—このノードに接続するためにプロキシが使用するdsn。route_priority—同じノードグループ内の他のノードに対するノードの相対的なルーティング優先度。route_fence—ノードがルーティングからフェンスされているかどうか、つまり、PGDプロキシから接続を受信できないかどうか。route_writes—書き込みをこのノードにルーティングできるかどうか、つまり、ノードが書き込みリーダーになれるかどうか。route_reads—読み取り専用接続をこのノードにルーティングできるかどうか。現在、将来の使用のために予約されています。
SQLインターフェイスを使用してプロキシを構成することもできます。
bdr.create_proxy を使用してプロキシ構成を追加できます。たとえば、
SELECT bdr.create_proxy('region1-proxy1', 'region1-group');
は、PGDグループregion1-group のメンバーであるregion1-proxy1
という名前のプロキシのデフォルト構成を追加します。ここで指定されたプロキシの名前は、プロキシ構成ファイルで指定された名前と同じである必要があります。
SELECT bdr.drop_proxy('region1-proxy1')
を使用してプロキシ構成を削除できます。その結果、プロキシは非アクティブ化されます。
bdr.alter_proxy_option()
関数を使用して、各プロキシのオプションを構成できます。使用可能なオプションは次のとおりです。
listen_address—リッスンするプロキシのアドレス。listen_port—プロキシがリッスンするポート。max_client_conn—プロキシが受け入れる最大接続数。max_server_conn—プロキシがPostgresノードに作成できる接続の最大数。server_conn_timeout—サーバー接続の接続タイムアウト。server_conn_keepalive—サーバー接続のキープアライブ間隔。consensus_grace_period— Raftリーダーを失ってもプロキシがルーティングを継続する期間。0sに設定されている場合、プロキシはルーティングをすぐに停止します。
すべてのグループの現在の構成は、
bdr.node_group_routing_config_summary ビューに表示されます。同様に、
bdr.node_routing_config_summary
ビューには、現在のノードごとのルーティング構成が表示されます。
bdr.proxy_config_summary は、プロキシごとの構成を示しています。
スイッチオーバー操作を実行して、書き込みリーダーであるノードを明示的に変更することもできます。これを行うには、
bdr.routing_leadership_transfer() 関数を使用します。