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アーカイビングが正しく構成されているかどうかを確認できます。