HARP Proxy

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

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

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

仕組み

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

PgBouncerの実行中、 HARPプロキシはDCS内のmonitor_interval構成設定に基づいてそのステータスを確認し、モニタリングのためにDCSに保存します。これにより、harpctlを使用して、構成されているすべてのプロキシ、または特定のプロキシのステータスを取得できます。

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

設定

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

cluster:
  name: mycluster

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

proxy:
  name: proxy1

使用法

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

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に向けられることも意味します。

PgBouncer構成ファイル

HARPプロキシは現在、接続管理とリダイレクションにPgBouncerを使用しているため、pgbouncer.iniファイルが存在する必要があります。 HARP Managerは、 プロキシディレクティブ の文書で定義されているさまざまな実行時指示子に基づいてこのファイルを構築します。

このファイルは、 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 の文書を参照してください。

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

パススルーユーザー認証

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

これは、基になるPgBouncerサービスを操作するオーダーに管理レベルのユーザとしてHARPプロキシによって利用されるため、pgbouncerユーザ自分自身ではないはずです。

TPAexecによって管理されるクラスターでは、プロビジョニング中にファンクションが作成され、template1データベースのpg_catalogスキーマにインストールされます。これは、その後に作成されるデータベースにもファンクションが含まれ、ユーザがどのデータベースに接続しようとしているかに関係なく、PgBouncerで利用できることを意味します。

TPAexecを使用しない場合でも、次のファンクション定義をお勧めします。

CREATE OR REPLACE FUNCTION pg_catalog.pgbouncer_get_auth(p_usename TEXT)
RETURNS TABLE(username TEXT, password TEXT) AS $$
BEGIN
  RETURN QUERY
  SELECT usename::TEXT, passwd::TEXT FROM pg_catalog.pg_shadow
   WHERE usename = p_usename;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER

REVOKE ALL ON FUNCTION pg_catalog.pgbouncer_get_auth(p_usename TEXT)
  FROM PUBLIC

GRANT EXECUTE ON FUNCTION pg_catalog.pgbouncer_get_auth(p_usename TEXT)
   TO <auth_user>;

HARPプロキシに提供されるauth_userフィールドを<auth_user>に置き換えることを忘れないでください。

次に、Bootstrapファイルで、次の設定を完了します。

cluster:
  name: mycluster

proxies:
  monitor_interval: 5
  default_pool_size: 20
  max_client_conn: 1000
  auth_user: pgb_auth
  auth_query: "SELECT * FROM pg_catalog.pgbouncer_get_auth($1)"
  database_name: bdrdb
  instances:
    - name: proxy1
    - name: proxy2

harpctl set proxyを使用してこれらのフィールドを定義することもできます。

harpctl set proxy global auth_user=pgb_auth

注釈

これは、 HARPプロキシを起動する`postgres`または`enterprisedb` OSユーザが、auth_user`がPostgresに対して認証できるように.pgpass`ファイルが必要であることを意味します。

仕組み

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

Lead Masterリースが設定されていないイベント、 HARP Proxyは、新しいLead Masterが確立されるまで、すべての接続トラフィックを切断します。これは、harpctl promoteを使用して、新しいリードマスターへの計画的な移行を呼び出す場合にも当てはまります。すぐに切断されます。

設定

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

cluster:
  name: mycluster

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

proxy:
  name: proxy1

使用法

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

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に向けられることも意味します。