archive_command を介したWALアーカイブ¶
archive_command は、WALファイルをアーカイブする従来の方法です。
このPostgreSQL構成パラメーターの値は、WALファイルをBarman着信ディレクトリにコピーするためにPostgreSQLサーバーによって実行されるシェルコマンドである必要があります。
これは2つの方法で行うことができ、どちらもSSH接続が必要です。
barman-wal-archiveユーティリティ経由( Barman 2.6から)rsync / SSH経由( Barman 2.6より前の一般的なアプローチ)
詳細については、以下のセクションを参照してください。
重要
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ファイルのデータ破損のリスクが軽減されます。
rsync / SSHをarchive_command
WALファイルとして使用する場合、ファイルの内容がフラッシュされ、宛先のディスクにfsyncされることを保証するメカニズムはありません。
このため、私たちはBarmanのput-wal
コマンド(2.6で導入)とネイティブに通信するbarman-wal-archive
ユーティリティを開発しました。したがって、 barman-wal-archive は、
archive_command
で使用される唯一のパラメーターはサーバーのIDであるため、
Barmanの間違った場所/ディレクトリにWALファイルをコピーするリスクを減らします。
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ファイル名の引数が必要ですが、無視されます)。
すべてが正しく構成されている場合、次の出力が表示されます。
Ready to accept WAL files for the server pg
Barmanサーバーとの通信にSSHを使用するため、 postgres
ユーザーがバックアップサーバーにbarman
としてログインするには、SSHキー認証が必要です。
SSHのデフォルトの22以外のポートを使用する必要がある場合は、 --port
オプションを追加して、SSH接続に使用するポートを指定できます。
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アーカイブが正しく構成されているかどうかを確認できます。