Patroni cluster management commands
===================================

Patroniは、次のコマンドオプションを使用して、M1アーキテクチャーのシングルマスターフェイルオーバーマネージャーとして使用できます。

.. code:: shell

   tpaexec configure cluster_name -a M1 --enable-patroni --postgresql 14

または config.ymlオプションを設定することにより

.. code:: yaml

   cluster_vars:
     failover_manager: patroni

RedHatにデプロイする場合は、 ``PGDG``
リポジトリをconfig.ymlのyumリポジトリリストに追加する必要もあります。

.. code:: yaml

   cluster_vars:
     yum_repository_list:
     - PGDG

TPA ``configure`` は、3つのetcdノードと2つのhaproxyノードを追加します。
Etcdは、分散構成ストア（DCS）に使用されます。
Patroniは他のDCSバックエンドをサポートしていますが、現在EDBまたはTPAではサポートされていません。

TPAは、既存のPostgreSQLスタンドアロンサーバーを変換するPatroniの機能を使用します。これにより、TPAは構成を初期化および管理できます。単一のPostgreSQLサーバーとデータベースが作成されると、Patroniはレプリカを作成し、レプリケーションを構成します。
TPAは、セットアップ中に使用されたpostgres構成ファイルを削除します。

セットアップが完了すると、Postgresは、TPAとクラスターの\ ``config.yml``
設定を使用して引き続き管理できます。コマンドライン\ ``patronictl``
やREST
APIなどのPatroniインターフェースを使用することもできますが、可能な限りTPAメソッドを使用することをお勧めします。

これらの構成変数を使用して、TPAでのPatroniの展開における特定の動作を制御できます。

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

  `patroni_super_user`,postgres,スーパーユーザーロールのpostgresで作成するユーザー。
  `patroni_replication_user`,replicator,レプリケーションロール用にpostgresで作成するユーザー名。
  `patroni_restapi_user`,patroni,パトロニREST API用に設定するユーザー名。
  `patroni_rewind_user`,rewind,pg_rewind関数のためにpostgresで作成するユーザー名。
  `patroni_installation_method`,pkg,パッケージまたはソースからパトニーをインストールします（例： gitリポジトリまたはdockerの場合はローカルソースディレクトリ）。
  `patroni_ssl_enabled`,no,REST APIおよびctl接続でSSLを有効にするかどうか。利用可能な場合、クラスターSSL証明書とCAを使用します。
  `patroni_rewind_enabled`,yes,postgresリワインドを有効にするかどうか、atoi_rewind_userで定義されたユーザーを作成し、 configセクションを追加します。
  `patroni_watchdog_enabled`,no,追加のスプリットブレイン防止のためにカーネルウォッチドッグを構成するかどうか。
  `patroni_dcs`,etcd,DCSに使用するバックエンド。現時点で唯一のオプションはetcdです。
  `patroni_listen_port`,8008,REST API TCPポート番号
  `patroni_conf_settings`,{},パトロニ構成のオーバーライドを持つ構造化データオブジェクト。<br/>部分的なデータを提供でき、生成された構成とマージされます。<br/>実行時に既知のインスタンス情報に基づいて生成された値をオーバーライドしないように注意してください。
  `patroni_dynamic_conf_settings`,{},DCS設定専用のオプションの構造化データ。これは`patroni_conf_settings`にマージされます。
  `patroni_repl_max_lag`,None,これは、 `haproxy_read_only_load_balancer_enabled`がtrueの場合にのみhaproxyバックエンドヘルスチェックで使用されます。<br/> `/replica?lag`の可能な値については :ref:`tpaexec-configure <Patroni cluster management commands>` を参照してください

Patroni構成ファイルの設定
-------------------------

パトロニの構成は、Patroniデーモンによって設定されたデフォルト、DCSからロードされた構成、最後にローカル構成の3つのレイヤーから構築されます。最後はいずれかの構成ファイルから制御でき、環境を介してオーバーライドします。
TPAは構成ファイルを制御し、値はこの順序で構築されます。

APIに送信され、構成ファイルのブートストラップセクションに保存されるDCS構成：

-  ``postgres`` のTPA変数はDCS設定にロードされます。
   :ref:`postgresql.conf.md <postgresql.conf>` を参照してください。一部の機能はサポートされていません。以下の注を参照してください。

-  DCS設定のPatroniデフォルト

-  ``patroni_dynamic_conf_settings``
   のユーザー指定のデフォルト。DCS設定をオーバーライドする場合は、ここで実行できます。

YAML構成ファイルに保存されているローカル構成：

-  上記の前の手順からロードされた\ ``bootstrap.dcs`` 。

-  ``patroni_ssl_enabled``
   などの機能フラグによって有効にされる構成。上記の表を参照してください。

-  最後に、ユーザー指定の設定、\ ``patroni_conf_settings``
   オプションからオーバーロード。機能フラグで制御されない構成を変更または追加する場合は、これが最適な場所です。

構成は、IPアドレス、ポート番号、クラスターの役割などのクラスター情報からTPAによって生成された構成の上に
*マージ*
されることに注意してください。これはクラスターの安定した動作に影響を与える可能性があるため、オーバーライドに注意してください。

Patroniはすべてのpostgres構成をDCSに保存し、これをpostgresに配布する方法と時期を制御するため、TPAの一部の機能はパトロニと互換性がありません。

-  ``postgres_conf_template`` 設定で\ ``postgresql.conf``
   を生成するために使用されるテンプレートを変更することはできません。

-  設定\ ``postgres_conf_dir``
   でPostgres構成ファイルの場所を変更することはできません。

TPA ``config.yml`` でのPatroni構成
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

単一の値をオーバーライドできます。

.. code:: yaml

   cluster_vars:
     patroni_conf_settings:
       bootstrap:
         dcs:
           ttl: 120

またはフルブロック（Patroni docsの例）：

.. code:: yaml

   cluster_vars:
     patroni_conf_settings:
       restapi:
         http_extra_headers:
           X-Frame-Options: SAMEORIGIN
           X-XSS-Protection: 1; mode=block
           X-Content-Type-Options: nosniff
         https_extra_headers:
           Strict-Transport-Security: max-age=31536000; includeSubDomains

デフォルトのTPA構成変数に存在する値またはセクションを否定する場合は、値を\ ``null``
に設定できます。これにより、構成ファイルをロードするときにパトニーはこのセクションを無視します。

たとえば、 ``log`` のデフォルトのTPA構成は次のとおりです。

.. code:: yaml

   log:
     dir: /var/log/patroni

ログをオフにするには、これを\ ``config.yml`` に追加します。

.. code:: yaml

   cluster_vars:
     patroni_conf_settings:
       log: null

TPAは、Patroniクラスターを管理するためのこれらの最小限のツールセットを提供します。

ステータス
----------

Patroni runに従ってTPAクラスターの現在のステータスを表示するには

.. code:: shell

   tpaexec status cluster_name

スイッチオーバー
----------------

レプリカノードへのスイッチオーバーを実行するには（メンテナンスの実行など）、次のコマンドを実行します

.. code:: shell

   tpaexec switchover cluster_name new_primary

new_primary引数は、現在正常なレプリカとして実行されている既存のクラスターノードの名前である必要があります。スイッチオーバーが実行される前に、これが当てはまることを確認するためのチェックが実行されます。

スイッチオーバーが実行されたら、 ``deploy`` および\ ``test``
を実行して、クラスターが正常であることを確認することをお勧めします。

.. code:: shell

   tpaexec deploy cluster_name
   tpaexec test cluster_name

TPAは、たとえば別のノードがリーダーである場合など、config.ymlに含まれる内容に関係なく、デプロイ中にノードの現在のロールを検出します。
