Configuring haproxy
===================

TPAは、 ``role`` に\ ``haproxy``
が含まれるインスタンスにhaproxyをインストールおよび構成します。

デフォルトでは、 haproxyは\ ``127.0.0.1:5432``
で、同じインスタンスで実行されている :ref:`Repmgrリダイレクトpgbouncer <Repmgrリダイレクトpgbouncer>` によって転送された要求をリッスンします。要求を転送する\ ``haproxy_backend_servers``
のリストを指定する必要があります。

TPAは、デフォルトでhaproxyの最新バージョンをインストールします。
``haproxy_package_version: 1.9.15*``
たとえば、を設定することにより、特定のバージョンをインストールできます。

注
:ref:`tpaexec-configure <Cluster configuration>` のpackage_versionでのワイルドカードの使用の制限を参照してください。

Haproxyパッケージは、アーキテクチャのタイプに応じて選択されます。
EDB管理対象haproxyパッケージを使用できますが、サブスクリプションが必要です。必要に応じて、
PGDGエクストラリポジトリからのパッケージをインストールできます。

``haproxy`` インスタンスで次の変数を設定できます。

.. csv-table::
  :header: Variable,Default value,Description
  :widths: 15,12,20
  :align: left
  :class: longtable

  `haproxy_bind_address`,127.0.0.1\*,`failover_manager`がパトロニの場合、haproxyが\ *0.0.0.0をバインドするアドレス。 ** ユーザーはこの値を、クラスターネットワーキングに適したより制限的なものに変更する必要があります** 
  `haproxy_port`,5432 (5444 for EPAS),TCPポートHAプロキシがリッスンする必要がある
  `haproxy_read_only_port`,5433 (5445 for EPAS),読み取り専用ロードバランサーのTCPポート
  `haproxy_backend_servers`,None,Postgresインスタンス名のリスト
  `haproxy_maxconn`,`max_connections`×0.9,バックエンドサーバーごとに許可される接続の最大数。デフォルトは、バックエンドの`max_connections`設定から取得されます
  `haproxy_peer_enabled`,True\*,既知のハプロキシホストを`peer`リストとして追加します。  \*`False` `failover_manager`がharpまたはpatroniの場合。

読み取り専用ロードバランサー
----------------------------

データベースへの読み取り専用アクセスを追加ポートでリッスンするようにHaproxyを構成できます。現時点では、これはPatroniフェールオーバーマネージャーでのみサポートされています。バックエンドヘルスチェックは、どのpostgresインスタンスが現在レプリカとして機能し、ラウンドロビンロードバランシングアルゴリズムを使用してトラフィックを送信するかを判断します。

読み取り専用ロードバランサーはデフォルトで無効になっていますが、
cluster_vars変数 ``haproxy_read_only_load_balancer_enabled``
を使用して有効にできます。

Patroni ヘルスチェック
----------------------

Patroniがフェールオーバーマネージャーとして使用される場合、
HAProxyはPatroni REST APIに対してヘルスチェックを実行します。
TPAは、Patroniのセキュリティ設定に基づいて、これらのチェックを自動的に構成します。

- **HTTP:** ``patroni_ssl_enabled`` が\ ``false``
  の場合、標準のHTTPチェック\ ``option httpchk`` がPatroni
  APIポートデフォルト8008に対して使用されます。

- **HTTPS基本認証または認証なし** ``patroni_ssl_enabled`` が\ ``true``
  で、\ ``patroni_authentication_mode`` が\ ``basic`` の場合、
  HAProxyは\ ``check-ssl``
  を使用し、クラスターのCA証明書を信頼してパトロニAPIサーバー証明書を検証するように構成されています\ ``verify required ca-file <path>``
  を使用します。

- **HTTPS (mTLS)** ``patroni_authentication_mode`` が\ ``mtls`` の場合、
  HAProxyは\ ``check-ssl`` を使用し、クラスターのCA証明書 *および*
  認証用の一意のクライアント証明書/キーペアで構成されます\ ``verify required ca-file <path> crt <path>``
  を使用します。 TPAは、
  HAProxyのこれらのクライアント証明書を自動的に生成および展開します。

サーバーオプション
------------------

TPAは、 ``default-server``
行とバックエンドサーバーごとに1行があるバックエンドで\ ``/etc/haproxy/haproxy.cfg``
を生成します。最初のサーバーを除くすべては「バックアップ」サーバーとしてマークされます。

``haproxy_default_server_extra_options``
をhaproxyインスタンスのオプションのリストに設定して、\ ``default-server``
行にオプションを追加します。そして、 ``haproxy_server_options``
をバックエンドサーバーのオプションのリストに設定して、各バックエンドの個々のサーバー行にオプションデフォルトをオーバーライドします。
TPAは、フェールオーバーマネージャー構成に基づいて、必要な\ ``check``
および\ ``check-ssl`` オプションを自動的に追加します。

ssl-dh-param-fileに使用されるRSAキーサイズは、 ``cluster_vars``
セクションに変数\ ``ha_proxy_dhparams_key_size``
を追加することにより変更できます。

例
--

.. code:: yaml

   cluster_vars:
     ha_proxy_dhparams_key_size: 4096
   instances:

   - Name: one
     vars:
       haproxy_server_options:
       - maxconn 33

   - Name: two
   …

   - Name: proxy
     role:
     - haproxy
     vars:
       haproxy_backend_servers:
       - one
       - two
       haproxy_default_server_extra_options:
       - on-error mark-down
       - on-marked-down shutdown-sessions
