etcd
====

``etcd``
は、分散調整に一般的に使用される分散された信頼性の高いキー-値ストアです。
TPAは、PostgreSQLクラスターのフェールオーバーマネージャーとしてPatroniを使用する場合、主に分散構成ストアDCSとして\ ``etcd``
を構成します。

M1アーキテクチャでPatroniを有効にすると、TPAはデフォルトで3ノード\ ``etcd``
クラスターを自動的に展開および構成します。

インストール
------------

TPAは、構成されたシステムリポジトリから入手可能な\ ``etcd``
パッケージをインストールします。
SLESおよびRHELベースのシステムでは、TPAはPGDG ``extras``
リポジトリを自動的に有効にして\ ``etcd`` パッケージを提供します。

etcdパッケージバージョン
------------------------

デフォルトでは、TPAはetcdの利用可能な最新バージョンをインストールします。

インストールされるetcdパッケージのバージョンは、 ``config.yml``
ファイルの\ ``cluster_vars``
セクションの下の\ ``etcd_package_version: xxx``
を含めることにより指定できます。

.. code:: yaml

   cluster_vars:
       …
       etcd_package_version: 3.6.2*
       …

aptまたはyumが受け入れるバージョン指定子を使用できます。

バージョンが一致しない場合は、\ ``*``
ワイルドカードを先頭に追加してみてください。これは、パッケージバージョンに\ ``2:...``
のようなエポック修飾子がある場合に必要になることがよくあります。

構成
----

TPAは、\ ``config.yml``
設定とクラスタートポロジに基づいて\ ``/etc/etcd/etcd.conf``
ファイルを生成します。ピアおよびクライアントの通信URL、データディレクトリ、およびSSL証明書を構成します。

セキュリティ
------------

TPAは、 ``etcd`` クラスターとの通信および\ ``etcd``
クラスター内の通信を保護するための堅牢なオプションを提供します。これは、主に\ ``etcd_ssl_enabled``
および\ ``etcd_authentication_mode`` 変数によって制御されます。

TLS暗号化
^^^^^^^^^

``etcd_ssl_enabled: true`` を設定すると、すべての\ ``etcd``
トラフィックのTLS暗号化が有効になります。
TPAは自動的に次のことを行います。

- 各etcdノードのクラスターCAとサーバー証明書適切なIPおよびDNSサブジェクト代替名を含むを生成します。

- ピアツーピア通信とクライアントサーバー通信の両方にHTTPSを使用するようにetcdを構成します。

- HTTPSを介して接続し、CAを使用してサーバー証明書を検証するようにクライアント\ ``etcdctl``
  、Patroniを構成します。

クライアント認証
^^^^^^^^^^^^^^^^

TLS暗号化が有効になる ``etcd_ssl_enabled: true`` すると、
``etcd_authentication_mode`` 変数を使用して認証モードを選択できます。

- **``none`` デフォルト** クライアント認証は実行されません。
  ``etcd_ssl_enabled`` が\ ``true``
  の場合、通信はTLS暗号化にのみ依存します。

- **``basic`` :**
  クライアントにユーザー名とパスワードを使用して認証する必要があります。自動的にTPA

  - 生成されたパスワードで管理用\ ``root`` ユーザーを作成します。
  - Patroniを使用する場合、特定のキープレフィックス\ ``/tpa/cluster_name``
    などにのみ\ ``readwrite``
    アクセスを持つPatroniの専用の最小特権ユーザー\ ``patroni_etcd_user``
    経由で構成可能。
  - これらの専用の資格情報を使用するようにPatroniを構成します。

- **``mtls`` :**
  クライアントピアノードを含むに、信頼できるクラスターCAによって署名された有効なTLS証明書を提示する必要があります。
  TPAは自動的に

  - ピア接続の両方のクライアント証明書を要求および検証するように\ ``etcd``
    を構成します。
  - 認証のためにクライアント証明書を提示するようにクライアント\ ``etcdctl``
    、Patroniを構成します。

..  Note::
   TPAには、展開または再構成中に異なる認証モード間の移行を処理する堅牢なロジックが含まれており、クラスターの安定性を保証します。構成検証チェックは、無効な組み合わせを防ぐために早期に実行されますたとえば、 `mtls` には`etcd_ssl_enabled: true` が必要です。ただし、現在`etcd_ssl_enabled` の値の移行つまり`false` から`true` またはその逆を処理することはできません。この制限により、 `etcd_ssl_enabled` の別の値を必要とする`etcd_authentication_mode` 値を切り替えることもできなくなります。例、`basic` から`mtls` 、または`mtls` から`basic` 。 23.41.0より前のバージョンのTPAを使用して展開されたクラスターはデフォルトで`etcd_ssl_enabled: false` に設定されているため、 `etcd_ssl_enabled` を変更することはできません。

.. ::
   ##構成変数

``etcd`` には、次の変数を設定できます。

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

  `etcd_peer_port`,`2380`,`etcd`がピアツーピアサーバー間通信に使用するTCPポート。
  `etcd_client_port`,`2379`,`etcd`がクライアント通信に使用するTCPポート。
  `etcd_ssl_enabled`,`false`\*,すべての`etcd`通信のSSL/TLS暗号化を有効にします。セキュリティを参照してください。 \* `tpaexec configure`を介した新しいクラスターの場合は`true`。
  `etcd_authentication_mode`,`none`\*,クライアント認証モード `none`、`basic`、`mtls` を定義します。 `none`以外のモードの場合は`etcd_ssl_enabled: true`が必要です。セキュリティを参照してください。 \* `tpaexec configure`を介した新しいクラスターの場合は`mtls`。
  `etcd_compaction_mode`,`revision`,自動圧縮モード `revision`または`periodic` 。
  `etcd_compaction_retention`,`10`,自動圧縮のリテンション値。 `revision`モードの場合、これは保持するリビジョンの数です。 `periodic`モードの場合、これは時間間隔たとえば `1h` 。

``tpaexec upgrade`` を使用したetcdのマイナー更新
------------------------------------------------

..  Warning ETCDCTL_API v2 is deprecated::
   etcd v3.4では、互換性のない変更が導入され、ETCDCTL_API v3がデフォルトバージョンになりますが、v2 APIを手動で有効にできます。

etcd v3.6は\ ``--enable-v2`` フラグを完全に削除し、v2
APIをまったく使用できません。

TPAアップグレードは、v3 APIを使用した\ ``etcd``
バージョンのアップグレードのみをサポートしています。

TPAを使用してクラスター内の\ ``etcd``
をアップグレードする前に、 
`migrated from the v2 API to the v3 API <https://etcd.io/docs/v3.4/op-guide/v2-migration/>`_ があることを確認してください

.. ::
   特定のパッケージバージョンにアップグレードしようとするときは、 `config.yml` の`etcd_package_version` が更新されて、目的のバージョンを反映していることを確認します。

目的のバージョンを追加の引数として\ ``tpaexec upgrade``
コマンドに渡すこともできます。

.. code:: shell

   tpaexec upgrade -e etcd_package_version="<desired version>" --components=etcd

詳細については、 :ref:`package version selection and upgrade <Upgrading your cluster>` のセクションを参照してください。

アップグレードのためにetcdを選択するには、 ``tpaexec upgrade``
コマンドに渡される\ ``--components`` フラグに\ ``etcd`` または\ ``all``
が含まれていることを確認します

:ref:`component selection for upgrade <Upgrading your cluster>` のセクションを参照してください

詳細については、
