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