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 ユーティリティを開発しました。このコマンドは、ファイルを受信し、そのコンテンツを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で構成されていることを確認できます。

barman-wal-archive --test backup pg DUMMY

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

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

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

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

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は1つのファイルが30秒以内に到着するのを待ちます(タイムアウトは --archive-timeout オプションで変更できます)。 WALファイルが受信されない場合、エラーが返されます。

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