``archive_command`` を介したWALアーカイブ
-----------------------------------------

``archive_command`` は、WALファイルをアーカイブする従来の方法です。

このPostgreSQL構成パラメーターの値は、PostgreSQLサーバーによって実行されてWALファイルをBarman受信ディレクトリにコピーするシェルコマンドである必要があります。

これは2つの方法で行うことができ、どちらもSSH接続が必要です。

-  ``barman-wal-archive`` ユーティリティ経由Barman 2.6から

-  rsync / SSH経由Barman 2.6以前の一般的なアプローチ

詳細については、以下のセクションを参照してください。

..  IMPORTANT ::
   Barmanがこの機能をサポートする方法の詳細については、「コンカレントバックアップとスタンバイからのバックアップ」セクションを読んでください。

``barman-wal-archive`` を介したWALアーカイブ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Barman 2.6から、 ``archive_command``
を介してWALファイルをBarmanに安全かつ確実にアーカイブする **推奨方法**
は、 ``barman-cli`` パッケージに含まれる\ ``barman-wal-archive``
コマンドを使用することです。EnterpriseDBパブリックリポジトリを介して配布され、GNU
GPL 3ライセンスで利用できます。 ``barman-cli`` は、
Barmanクラスターの一部である各PostgreSQLサーバーにインストールする必要があります。

rsync / SSHの代わりに\ ``barman-wal-archive`` を使用すると、
Barmanサーバー上の出荷されたWALファイルのデータ破損のリスクが削減されます。
WALファイルの\ ``archive_command`` としてrsync /
SSHを使用する場合、ファイルのコンテンツが宛先のディスクにフラッシュおよびfsyncされることを保証するメカニズムはありません。

このため、私たちはBarmanの\ ``put-wal``
コマンド2.6で導入とネイティブ通信する\ ``barman-wal-archive``
ユーティリティを開発しました。このコマンドは、ファイルを受信し、そのコンテンツをfsyncし、そのサーバーの適切な\ ``incoming``
ディレクトリに配置します。したがって、 ``archive_command``
で使用される唯一のパラメーターはサーバーのIDであるため、
``barman-wal-archive`` は、
Barmanの間違った場所/ディレクトリにWALファイルをコピーするリスクを削減します。

``barman-wal-archive``
コマンドの詳細については、PostgreSQLサーバーで\ ``man barman-wal-archive``
と入力してください。

次のコマンドで、 ``barman-wal-archive``
がBarmanサーバーに接続できること、および必要なPostgreSQLサーバーが着信WALファイルを受け入れるようにBarmanで構成されていることを確認できます。

.. code:: bash

   barman-wal-archive --test backup pg DUMMY

``backup`` はBarmanがインストールされているホストであり、\ ``pg``
はBarmanで構成されたPostgreSQLサーバーの名前であり、DUMMYはプレースホルダーです。
``barman-wal-archive``
にはWALファイル名の引数が必要ですが、これは無視されます。

すべてが正しく構成されている場合、次の出力が表示されるはずです。

.. code:: bash

   Ready to accept WAL files for the server pg

SSHを使用してBarmanサーバーと通信するため、 ``postgres``
ユーザーがバックアップサーバーに\ ``barman``
としてログインするには、SSHキー認証が必要です。
SSHデフォルトの22以外のポートを使用する必要がある場合は、 ``--port``
オプションを追加して、SSH接続に使用するポートを指定できます。

``pg`` データベース上のPostgreSQLインスタンスの\ ``postgresql.conf``
ファイルを編集し、アーカイブモードをアクティブにして、\ ``barman-wal-archive``
を使用するように\ ``archive_command`` を設定します。

.. code:: ini

   archive_mode = on
   wal_level = replica
   archive_command = barman-wal-archive backup pg %p

次に、PostgreSQLサーバーを再起動します。

rsync / SSHを介したWALアーカイブ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

``show-servers`` Barmanコマンドを使用し、\ ``incoming_wals_directory``
値を探して、着信WALディレクトリを取得できます。

.. code:: bash

   barman@backup$ barman show-servers pg |grep incoming_wals_directory
           incoming_wals_directory: /var/lib/barman/pg/incoming

``pg`` データベース上のPostgreSQLインスタンスの\ ``postgresql.conf``
ファイルを編集し、アーカイブモードをアクティブにします。

.. code:: ini

   archive_mode = on
   wal_level = replica
   archive_command = rsync -a %p barman@backup:INCOMING_WALS_DIRECTORY/%f

``INCOMING_WALS_DIRECTORY``
プレースホルダーを、上記の\ ``barman show-servers pg``
コマンドによって返された値に変更してください。

PostgreSQLサーバーを再起動します。

場合によっては、より厳密なチェックを\ ``archive_command``
プロセスに追加することができます。たとえば、一部のユーザーは次のことを提案しました。

.. code:: ini

   archive_command = test $(/bin/hostname --fqdn) = HOSTNAME \
     && rsync -a %p barman@backup:INCOMING_WALS_DIRECTORY/%f

``HOSTNAME`` プレースホルダーは、\ ``hostname --fqdn``
によって返される値に置き換える必要があります。この_trick_は、サーバーがクローンされ、復旧したPostgreSQLインスタンスからWALファイルの受信を回避する場合の安全対策です。

WALアーカイブ構成の検証
-----------------------

継続的なアーカイブがオンで適切に動作していることをテストするには、PostgreSQLサーバーとバックアップサーバーの両方をチェックする必要があります。特に、WALファイルが宛先ディレクトリに正しく収集されていることを確認する必要があります。

この目的に、WALアーカイブプロセスの検証を容易にするために、
``switch-wal`` コマンドが開発されました。

.. code:: bash

   barman@backup$ barman switch-wal --force --archive pg

上記のコマンドは、 PostgreSQLにWALファイルを強制的に切り替え、
Barmanのアーカイブプロセスをトリガーします。
Barmanは、1つのファイルが30秒以内に到着するまで待機します。
``--archive-timeout`` オプションを介してタイムアウトは変更できます。
WALファイルを受信しない場合、エラーが返されます。

``barman check``
コマンドを使用して、WALアーカイブが正しく構成されているかどうかを確認できます。
