M1
==

単一のプライマリノードと、バックアップとフェールオーバー管理を含む多数のスタンバイノードへの物理レプリケーションを備えたPostgresクラスター。

このアーキテクチャは、運用に適していますが、そのシンプルさと独自のコンポーネントなしで構成できる機能により、テスト、デモンストレーション、学習にも適しています。

このアーキテクチャでサブスクリプション専用のEDBソフトウェアを選択した場合、EDB
Repos 2.0からソースされ、 :ref:`Configuring EDB Repos 2.0 repositories <Configuring EDB Repos 2.0 repositories>`  が必要です。

フェイルオーバー管理
--------------------

M1アーキテクチャには、常にフェールオーバーマネージャーが含まれます。サポートされているオプションはrepmgr、EDB
Failover
ManagerEFM、およびPatroniです。すべての場合、フェールオーバーマネージャーはデフォルトで構成され、プライマリが使用できなくなった場合にレプリカがプライマリに代わって昇格します。

アプリケーションのフェイルオーバー
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

M1アーキテクチャは、通常、アプリケーショントラフィックをプライマリに再ルーティングする自動機能を提供しません。この機能をクラスターに追加するには、いくつかの方法があります。

TPAで

- フェールオーバーマネージャーとしてrepmgrを選択し、PgBouncerを有効にすると、\ ``config.yml``
  の\ ``cluster_vars`` の下に\ ``repmgr_redirect_pgbouncer: true``
  ハッシュを含めることができます。これにより、repmgrはPgBouncerを自動的に再構成して、フェールオーバー時にトラフィックを新しいプライマリにルーティングします。

- フェールオーバーマネージャーとしてPatroniを選択し、PgBouncerを有効にすると、Patroniはフェールオーバー時にトラフィックを新しいプライマリにルーティングするようにPgBouncerを自動的に再構成します。

- フェールオーバーマネージャーとしてEFMを選択した場合、 ``config.yml``
  の\ ``cluster_vars`` の下の\ ``efm_conf_settings``
  ハッシュを使用できます ``config.yml`` から :ref:`configure EFM to use a virtual IP address    (VIP) <Configuring EFM>` 
  。これは、常にプライマリノードにルーティングされる追加のIPアドレスです。

- クラスターとアプリケーションの間に適切なプロキシまたはロードバランサーを配置し、
  :ref:`TPA hooks <TPA hooks>` を使用して、選択したフェールオーバーマネージャーをフェールオーバー時に新しいプライマリへのルートで更新するように構成します。

- マルチホスト接続文字列を使用するなど、アプリケーション自分自身でフェールオーバーを処理します。

バックアップフェイルオーバー
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

TPAは、いかなる種類の「バックアップフェイルオーバー」も構成しません。バックアップしているPostgresノードがダウンしている場合、ノードがオンラインに戻るまでバックアップは単に停止します。バックアップを新しいプライマリに手動で接続するには、
``config.yml`` を編集して\ ``backup``
ハッシュを新しいプライマリインスタンスに追加し、\ ``tpaexec deploy``
を再実行します。

クラスター構成
--------------

構成オプションの概要
^^^^^^^^^^^^^^^^^^^^

このアーキテクチャの\ ``tpaexec configure``
の呼び出し例を以下に示します。

.. code:: shell

   tpaexec configure ~/clusters/m1 \
            --architecture M1 \
            --platform aws --region eu-west-1 --instance-type t3.micro \
            --distribution Debian \
            --postgresql 14 \
            --failover-manager repmgr \
            --data-nodes-per-location 3

helpコマンドを使用して、使用可能なすべてのオプションをリストできます。

.. code:: shell

   tpaexec configure --architecture M1 --help

以下の表では、M1の必須オプションと追加の重要なオプションについて説明します。オプションの詳細については、次のセクションで説明します。

必須オプション
^^^^^^^^^^^^^^

.. csv-table::
  :header: Parameter,Description
  :widths: 10,30
  :align: left
  :class: longtable

  `--architecture` (`-a`),`M1`に設定する必要があります。
  Postgres flavour and version (e.g. `--postgresql 15`),有効な :ref:`Postgresのフレーバーとバージョン<Postgresのフレーバーとバージョン>` 。
  "One of:  - `--failover-manager {efm, repmgr, patroni}`- `--enable-efm` - `--enable-repmgr`- `--enable-patroni`",:ref:`Configuring EFM<Configuring EFM>` 、 :ref:`Repmgrリダイレクトpgbouncer<Repmgrリダイレクトpgbouncer>` 、および :ref:`Patroni cluster management commands<Patroni cluster management commands>` からフェイルオーバーマネージャーを選択します。

追加オプション
^^^^^^^^^^^^^^

.. csv-table::
  :header: Parameter,Description,Behaviour if omitted
  :widths: 12,25,15
  :align: left
  :class: longtable

  `--platform`,`aws`、`docker`、`bare`のいずれか。,Defaults to `aws`.
  `--location-names`,場所名のスペース区切りのリスト。場所の数は、指定された名前の数と同じです。,"A single location called ""main"" is used."
  `--primary-location`,プライマリサーバーが置かれる場所。 `location-names`のメンバーである必要があります。,The first listed location is used.
  `--data-nodes-per-location`,1以上の数字。各場所では、1つのノードがクラスターのプライマリノードから直接ストリーミングするように構成され、他のノードが存在する場合はそのノードからストリーミングします。,Defaults to 2.
  `--witness-only-location`,ロケーション名は、`location-names`のメンバーである必要があります。この場所には、単一の監視ノードのみが設定されます。,No witness-only location is added.
  `--single-node-location`,ロケーション名は、`location-names`のメンバーである必要があります。  この場所には、単一のデータノードのみが設定されます。,No single-node location is added.
  `--enable-haproxy`,2つの追加ノードがロードバランサーレイヤーとして追加されます。フェールオーバーマネージャーとしてPatroniでのみサポートされています。,HAproxy nodes will not be added to the cluster.
  `--enable-pgbouncer`,PgBouncerは、プライマリの接続をプールするようにPostgresノードで構成されます。,PgBouncer will not be configured in the cluster.
  `--patroni-dcs`,patroniの分散構成ストアバックエンドを選択します。現時点では、オプションは`etcd`のみです。  フェールオーバーマネージャーとしてPatroniでのみサポートされています。,Defaults to `etcd`.
  `--efm-bind-by-hostname`,efmがIPアドレスの代わりにホスト名を使用してクラスター`bind.address`を構成するようにします。,Defaults to use IP addresses

M1構成の詳細
^^^^^^^^^^^^

:ref:`クラスター構成 <クラスター構成>` で説明されるオプションを指定することもできます。
