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は、WALファイルのサポートを導入しました>スタンバイからarchive_commandを使用したアーカイビング。 Barmanがこの機能をサポートする方法の詳細については、「同時バックアップとスタンバイからのバックアップ」セクションをお読みください。

barman-wal-archiveを介したWALアーカイビング

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

代わりにrsyncのbarman-wal-archiveを使用して/ SSHはnomechanismがあり、archive_command WALファイルとしてrsyncを/ SSHを使用してバーマンserver.Whenに出荷されたWALファイルのriskofデータの破損を低減し、そのファイルのコンテンツがにflushedandにfsync-EDであることを保証します宛先のディスク。

このため、Barmanのput-walコマンド(2.6で導入)とネイティブに通信するbarman-wal-archiveユーティリティを開発しました。このコマンドは、ファイルを受信し、そのサーバーの適切なincomingディレクトリにコンテンツをfsyncします。したがって、archive_commandで使用される唯一のパラメータはサーバーのIDであるため、barman-wal-archiveは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ファイル名前の引数が必要ですが、これは無視されます)。

pgファイル上のPostgreSQLインスタンスのpostgresql.confファイルを編集し、アーカイブモードをアクティブにして、archive_commandをusebarman-wal-archiveに設定します。

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

次に、 PostgreSQLサーバーをリスタートします。

rsync / SSHを介したWALアーカイビング

show-serverBarmanコマンドを使用してincoming_wals_directory値を検索することで、着信WALディレクトリを取得できます。

barman@backup$ barman show-server 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-server pgコマンドによって返された値でINCOMING_WALS_DIRECTORYプレースホルダを必ず変更してください。

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

場合によっては、archive_commandprocessにさらに厳密なチェックを追加することもできます。例、一部のユーザは、次のいずれかを示唆しています:

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コマンドが開発されました:

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

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

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