archive_command を介したWALアーカイブ

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

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

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

  • barman-wal-archive ユーティリティを介して( Barman 2.6から)

  • rsync / SSH経由( Barman 2.6より前の一般的なアプローチ)

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

重要

PostgreSQL 9.5では、スタンバイから`archive_command` を使用したWALファイルアーカイブのサポートが導入されました。 Barmanがこの機能をサポートする方法の詳細については、「スタンバイからの同時バックアップとバックアップ」セクションをお読みください。

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

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

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

このため、Barmanのput-wal コマンド(2.6で導入)とネイティブに通信するbarman-wal-archive ユーティリティを開発しました。したがって、 barman-wal-archive は、 Barmanの間違った場所/ディレクトリにWALファイルをコピーするリスクを減らします。 archive_command で使用される唯一のパラメーターはサーバーのIDです。

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

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

barman-wal-archive --test backup pg DUMMY

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

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

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ディレクトリを取得できます。

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

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

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 プロセスに厳密なチェックを追加することができます。たとえば、一部のユーザーは次のことを提案しています。

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

HOSTNAME プレースホルダーは、 hostname --fqdn によって返される値に置き換える必要があります。このトリックは、サーバーが複製され、復元されたPostgreSQLインスタンスからWALファイルを受信しないようにする場合の安全対策です。

WALアーカイブ構成の検証

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

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

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

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

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