HARP Proxy

HARPプロキシは、クライアントアプリケーションとPostgres間の抽象化レイヤーとして機能するデーモンです。コンセンサスレイヤーとインターフェイスして、現在のリードマスターノードのIDを取得し、トラフィックをその場所に転送します。計画的なスイッチオーバーまたは計画外のフェイルオーバー中に、DCSの指示に従って新しいリードマスターノードにリダイレクトします。

HARPプロキシはpgbouncer またはbuiltin から選択できます。プロキシタイプを指定しない場合、デフォルトはbuiltin です。 pgbouncer を使用する場合、 HARPプロキシはDCSとPgBouncer間のインターフェイスレイヤーです。そのため、PgBouncerは前提条件であり、 HARPプロキシがそのアクティビティを完全に管理するにはインストールする必要があります。

組み込みプロキシには、追加のソフトウェアは必要ありません。ビルトインを使用する場合、 HARPプロキシはレベル4パススループロキシとして機能します。

ビルトインプロキシ:仕組み

起動時に、 HARPプロキシは、プロキシインスタンスごとにブートストラップファイルで指定されたリスニングアドレスとリスニングポートで着信接続を監視します。すべてのアプリケーションクライアントトラフィックは、組み込みプロキシを介して、このプロキシが動作している場所の現在のリードマスターノードに渡されます。

リードマスターリースが設定されていない場合、 HARPプロキシは、新しいリードマスターが確立されるまですべての接続トラフィックを切断します。これは、harpctl promote を使用して新しいリードマスターへの計画的な移行を呼び出す場合にも適用されます。切断は即時です。

構成

プロキシタイプをbuiltin に設定して、ビルトインプロキシを選択します。組み込みプロキシに適用される他の唯一のオプションは、許可されるクライアント接続の最大数を指定します。 max_client_conn がシステムが処理できるものよりも高い場合、プロキシがオンになっているシステムの能力内の設定に下げられます。

PgBouncer:仕組み

注釈

Harp Proxyが提供するものよりも多くの構成可能性が必要な場合は、ビルトインプロキシを使用してpgbouncerがそれをポイントするように設定することをお勧めします。

HARPプロキシは、起動時にPgBouncerがまだ実行されていない場合に起動し、クライアント接続を一時停止したままにします。その後、DCSに連絡してリードマスターのIDを判断し、これをデータベース接続のターゲットとして使用するようにPgBouncerを構成し、接続アクティビティを再開します。すべてのアプリケーションクライアントトラフィックは、PgBouncerを介して、このプロキシが動作している場所の現在のリードマスターノードに渡されます。

PgBouncerの実行中、 HARPプロキシはDCSのmonitor_interval 構成設定に基づいてステータスを確認し、監視のためにDCSに保存します。この構成により、 harpctl を使用した問い合わせで、構成されているすべてのプロキシまたは1つのプロキシのステータスを取得できます。

リードマスターリースが設定されていない場合、 HARPプロキシは新しいリードマスターが確立されるまですべての接続トラフィックを一時停止します。これは、harpctl promote を使用して新しいリードマスターへの計画的な移行を呼び出す場合にも適用されます。これにはPgBouncer PAUSE コマンドを使用するため、既存のセッションは保留中のトランザクションが停止する前に完了することができます。

PgBouncer構成ファイル

HARPプロキシが接続管理とリダイレクトにPgBouncerを使用する場合、 pgbouncer.ini ファイルが存在する必要があります。 HARPマネージャーは、 Proxy directives で定義されているさまざまなランタイム指示子に基づいてこのファイルをビルドします。

このファイルは、 HARPプロキシで使用されるconfig.yml と同じフォルダーにあります。 HARPプロキシによって起動されるPgBouncerプロセスはこの構成ファイルを使用し、デバッグまたは情報の目的で使用できます。この自動生成されたpgbouncer.ini ファイルへの変更は、 HARPプロキシが再起動するたびに失われるため、代わりに harpctl set proxy を使用してください。 harpctl set proxy を呼び出しても、プロキシが再起動するまでpgbouncer.ini ファイルは更新されません。

HARPプロキシノード管理の無効化と再有効化

PgBouncerのHARPプロキシ制御を一時的に一時停止できます。これにより、デーモンの実行は継続されますが、クラスターの既存の動作に影響を与える可能性のある操作は実行されません。管理を再度有効にすると、操作が再開されます。

特定のプロキシの管理を一時的に無効にする例は次のとおりです。

harpctl unmanage proxy proxy1

詳細については、 harpctl command-line tool を参照してください。

プロキシノード管理はデフォルトで有効になっています。

パススルーユーザー認証

pgbouncerでは、 auth_user およびauth_query ランタイム指示子を使用するようにHARPプロキシを構成することを強くお勧めします。これらが設定されていない場合、PgBouncer userlist.txt ファイルには、PgBouncerがPostgresに代わって認証する必要があるすべてのユーザーのユーザー名とパスワードのハッシュの組み合わせを含める必要があります。

pgbouncer ユーザーは使用しないでください。これは、基になるPgBouncerサービスを操作するための管理レベルのユーザーとしてHARPプロキシによって使用されます。

構成

HARPプロキシは、 dcs 、cluster 、およびproxy 構成スタンザを想定しています。以下は機能的な例です。

cluster:
  name: mycluster

dcs:
  driver: etcd
  endpoints:
    - host1:2379
    - host2:2379
    - host3:2379

proxy:
  name: proxy1
``` 各プロキシはDCSに接続して、接続をリッスンするホストとポートを取得します。

###  使用法

これは、 HARPプロキシの基本的な使用法です。

```bash
Usage of ./harp-proxy:
  -f string
        Optional path to config file (shorthand)
  --config string
        Optional path to config file

harp-proxy をフォークされたデーモンとして起動するための引数はありません。このソフトウェアは、systemdまたはコンテナ内でトップレベルプロセスとして起動されるように設計されています。これは、journaldまたは接続されたコンテナターミナルを介してキャプチャおよびアクセスするために、出力がSTDOUTおよびSTDERRに送られることも意味します。