準備的な手順
------------

このセクションには、
BarmanでPostgreSQLサーバーをセットアップする前に実行する必要がある予備手順が含まれています。

..  IMPORTANT::
   続行する前に、_"デザインとアーキテクチャ"_セクションで概要を示しているように、WALアーカイブとバックアップ戦略の観点から決定を下すことが重要です。特に、使用するWALアーカイブ方法とバックアップ方法を決定する必要があります。

PostgreSQL接続
^^^^^^^^^^^^^^

``backup`` サーバーがスーパーユーザーとして\ ``pg``
のPostgreSQLサーバーに接続できること、またはデータベースに接続するユーザーに正しい特権セットが付与されていることを確認する必要があります。

次のとおりに、PostgreSQLで\ ``barman``
という名前の特定のスーパーユーザーを作成できます。

.. code:: bash

   postgres@pg$ createuser -s -P barman

または、次のとおりに必要な特権セットを持つ通常のユーザーを作成します。

.. code:: bash

   postgres@pg$ createuser -P barman

.. code:: sql

   GRANT EXECUTE ON FUNCTION pg_backup_start(text, boolean) to barman;
   GRANT EXECUTE ON FUNCTION pg_backup_stop(boolean) to barman;
   GRANT EXECUTE ON FUNCTION pg_switch_wal() to barman;
   GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) to barman;

   GRANT pg_read_all_settings TO barman;
   GRANT pg_read_all_stats TO barman;

PostgreSQLバージョン14以前のバージョンを使用する場合、ファンクション\ ``pg_backup_start``
および\ ``pg_backup_stop``
は異なる名前と異なるシグネチャを持っていました。したがって、上記のブロックの最初の2行を次のように置き換える必要があります。

.. code:: sql

   GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) to barman;
   GRANT EXECUTE ON FUNCTION pg_stop_backup() to barman;
   GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) to barman;

実際のスーパーユーザーのないPostgreSQLバージョン13以下では、
``barman switch-wal`` コマンドの\ ``--force``
オプションは機能しないことに注意してください。
PostgreSQLバージョン15以降を実行している場合は、\ ``pg_checkpoint``
ロールを付与できるため、スーパーユーザーなしでこの機能を使用できます。

.. code:: sql

   GRANT pg_checkpoint TO barman;

..  IMPORTANT ::
   上記の`createuser` コマンドは、パスワードの入力を求めます。パスワードは、 `backup` サーバー上の`~barman/.pgpass` ファイルに追加することをお勧めします。詳細については、["The Password File"セクションのPostgreSQL Documentation][pgpass]を参照してください。

この接続は、
Barmanがサーバーとのアクティビティを調整するために、およびモニタリングのために必要です。

PostgreSQLが提供するものの中からお気に入りのクライアント認証方法を選択できます。詳細については、[“Client
Authentication”セクションのPostgreSQL
Documentation][pghba]を参照してください。

``backup`` ホストでbarmanユーザーとして次のコマンドを実行して、
``backup`` ホストが\ ``pg``
ホスト上のPostgreSQLに接続できることを確認します。

.. code:: bash

   barman@backup$ psql -c SELECT version() -U barman -h pg postgres

上記の情報ユーザー名、ホスト名、データベース名を書き留め、後で使用するために保存しておきます。この例のように、サーバー構成の\ ``conninfo``
オプションでこれが必要になります。

.. code:: ini

   [pg]
   ; ...
   conninfo = host=pg user=barman dbname=postgres application_name=myapp

..  NOTE ::
   `application_name` はオプショナル。

PostgreSQL WALのアーカイブとレプリケーション
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

続行する前に、\ ``pg`` でPostgreSQLを適切に構成して、
Barmanサーバーからのストリーミングレプリケーション接続を受け入れる必要があります。
PostgreSQLドキュメントの次のセクションを読んでください。

-  [ロール属性][ロール]

-  [pg_hba.confファイル][authpghba]

-  [ストリーミングレプリケーションを使用したスタンバイサーバーのセットアップ
   ][streamprot]

非常に重要な構成パラメーターの1つが ``wal_level``
パラメーターです。このパラメーターは、バックアップの一貫性を保つために必要なすべての有用な情報がトランザクションログファイルに含まれるように構成する必要があります。

.. code:: ini

   wal_level = replica|logical

構成を更新するためにPostgreSQLサーバーを再起動します。

PostgreSQLストリーミング接続
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

WALストリーミングまたはストリーミングバックアップを使用する予定がある場合は、ストリーミング接続をセットアップする必要があります。次のとおり、PostgreSQLで\ ``streaming_barman``
という名前の特定のユーザーを作成することをお勧めします。

.. code:: bash

   postgres@pg$ createuser -P --replication streaming_barman

..  IMPORTANT ::
   上記のコマンドは、パスワードの入力を求めます。パスワードは、 `backup` サーバー上の`~barman/.pgpass` ファイルに追加することをお勧めします。詳細については、["The Password File"セクションのPostgreSQL Documentation][pgpass]を参照してください。

次のコマンドを使用して、ストリーミング接続が機能していることを手動で確認できます。

.. code:: bash

   barman@backup$ psql -U streaming_barman -h pg \
     -c "IDENTIFY_SYSTEM" \
     replication=1

接続が機能している場合は、システム識別子、現在のタイムラインID、および現在のWALフラッシュの場所を含む応答が表示されます。例

::

         systemid       | timeline |  xlogpos   | dbname
   - --------------------+----------+------------+--------
    7139870358166741016 |        1 | 1/330000D8 |
   (1 row)

..  IMPORTANT::
   続行する前に、ストリーミングレプリケーションを介して接続できることを確認してください。

PostgreSQL構成ファイルで\ ``max_wal_senders``
パラメーターを構成する必要もあります。
WAL送信者の数は、実装したPostgreSQLアーキテクチャによって異なります。この例では、\ ``2``
に設定しています。

.. code:: ini

   max_wal_senders = 2

このオプションは、サーバーが管理できる同時ストリーミング接続の最大数を表します。

もう1つの重要なパラメーターは\ ``max_replication_slots``
で、これはサーバーが管理できるレプリケーションスロット[^replslot94]の最大数を表します。このパラメーターは、ストリーミング接続を使用してWALファイルを受信する予定がある場合に必要です。

.. code:: ini

   max_replication_slots = 2

[^replslot94] レプリケーションスロットはPostgreSQL
9.4で導入されました。詳細については、セクション\_“WALストリーミング/レプリケーションスロット”\_を参照してください。

``max_replication_slots`` および\ ``max_wal_senders``
として提案された値は例として考えられる必要があり、実際のセットアップで使用する値は、アーキテクチャを注意深く評価した後に選択する必要があります。ガイドラインと説明については、
PostgreSQLドキュメントを参照してください。

SSH接続
^^^^^^^

SSHは、リモートサーバーへのリモートシェルを開き、サーバーとローカルシステム間でファイルをコピーできるプロトコルとツールセットです。
Digital Oceanの記事[“SSH
Essentials”][ssh_essentials]で、SSHの使用に関するドキュメントの詳細を見つけることができます。

SSHキー交換は、別のマシン上のユーザー間の安全なパスワードレス接続を実装するために使用される非常に一般的な手法であり、WALアーカイブとバックアップに\ ``rsync``
を使用する必要があります。

..  NOTE::
   このプロシージャは、トランザクションログのアーカイブとPostgreSQLサーバーのバックアップにのみストリーミング接続を使用する予定がある場合に必要です。

[ssh_essentials]
https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys

postgresユーザーのSSH構成
^^^^^^^^^^^^^^^^^^^^^^^^^

これまでに行ったことがない限り、PostgreSQLユーザーのSSHキーを作成する必要があります。
``pg`` ホストに\ ``postgres`` としてログインし、次のように入力します。

.. code:: bash

   postgres@pg$ ssh-keygen -t rsa

このキーは、パスワードを提供せずにホストから接続するために使用する必要があるため、キーペアの作成中にパスフレーズを入力する必要はありません。

barmanユーザーのSSH構成
^^^^^^^^^^^^^^^^^^^^^^^

前の段落と同様に、 BarmanユーザーのSSHキーを作成する必要があります。
``backup`` ホストに\ ``barman`` としてログインし、次のように入力します。

.. code:: bash

   barman@backup$ ssh-keygen -t rsa

同じ理由で、パスフレーズは入力しないでください。

PostgreSQLからBarmanへ
^^^^^^^^^^^^^^^^^^^^^^

``archive_command``
設定を使用してWALファイルを正しくアーカイブするには、PostgreSQLサーバーからバックアップサーバーへのSSH接続が必要です。

PostgreSQLサーバーからバックアップサーバーに正常に接続するには、PostgreSQL公開キーを\ ``barman``
ユーザーのバックアップサーバーの承認されたキーに構成する必要があります。

承認される公開キーは、\ ``postgres``
ユーザーのホームディレクトリ内の\ ``.ssh/id_rsa.pub``
という名前のファイルに保存され、そのコンテンツは、バックアップサーバーの\ ``barman``
ユーザーのホームディレクトリ内の\ ``.ssh/authorized_keys``
という名前のファイルに含まれる必要があります。 ``authorized_keys``
ファイルが存在しない場合は、権限として\ ``600`` を使用して作成します。

SSHキーペアの交換が正常に完了した場合、次のコマンドは出力なしで成功するはずです。

.. code:: bash

   postgres@pg$ ssh barman@backup -C true

``archive_command`` 構成パラメーターの値については、\_“WAL archive via
archive_commandセクション”\_で説明します。

BarmanからPostgreSQLへ
^^^^^^^^^^^^^^^^^^^^^^

バックアップサーバーとPostgreSQLサーバー間のSSH接続は、rsyncを介した従来のバックアップに使用されます。
PostgreSQLサーバーからバックアップサーバーへの接続と同様に、\ ``postgres``
ユーザーのPostgreSQLサーバーでバックアップサーバーの公開キーを承認する必要があります。

``barman`` サーバーのファイル\ ``.ssh/id_rsa.pub``
の内容は、PostgreSQLサーバーの\ ``.ssh/authorized_keys``
という名前のファイルに配置する必要があります。そのファイルのアクセス許可は\ ``600``
である必要があります。

キーペアの交換が正常に完了した場合、次のコマンドは出力なしで成功するはずです。

.. code:: bash

   barman@backup$ ssh postgres@pg -C true
