Application connection management#
アプリケーション接続の管理は、高可用性の重要な部分です。
特に非同期レプリケーションの場合、競合を回避し、アプリケーションの可用性を保証するためには、一貫した書き込みリードノードを持つことが重要です。
EDB Postgres Distributedは、 PGDプロキシと呼ばれるプロキシレイヤーを提供します。これは、通常、高可用構成リージョンごとに少なくとも2つのインスタンスでインストールされます。
PGDプロキシは、 EDB Postgres分散ノードのいずれかに接続し、 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() ファンクションを使用します。