WALストリーミング¶
Barmanは、ユーザーが標準のarchive_command
戦略に加えて、PostgreSQLサーバーからの継続的なWALストリーミングを追加できるようにすることにより、目標復旧時点(RPO)を削減できます。
Barmanは pg_receivewal
に依存しており、ネイティブのストリーミングレプリケーションプロトコルを活用し、PostgreSQLサーバー(マスターまたはスタンバイ)からトランザクションログを継続的に受信します。
PostgreSQL 10より前は、 pg_receivewal はpg_receivexlog
と命名されました。
重要
Barmanでは、同じサーバーに`pg_receivewal` がインストールされている必要があります。 pg_receivewal には後方互換性があるため、利用可能な最新バージョンをインストールすることをお勧めします。それ以外の場合、ユーザーはBarmanサーバーに`pg_receivewal` の複数のバージョンをインストールし、構成ファイルの`path_prefix` オプションを使用してサーバーの特定のバージョンを適切にポイントできます。
トランザクションログのストリーミングを有効にするには、次のことを行う必要があります。
1.前述のようにストリーミング接続をセットアップする
streaming_archiverオプションをonに設定します
cron コマンドは、前述の要件が満たされている場合、 receive-wal
コマンドの実行を通じてログストリーミングを透過的に管理します。これは推奨されるシナリオです。
ただし、ユーザーはreceive-wal コマンドを手動で実行できます。
barman receive-wal <server_name>
注釈
receive-wal コマンドはフォアグラウンドプロセスです。
トランザクションログは、 streaming_wals_directory
構成オプションで指定されたディレクトリに直接ストリーミングされ、
archive-wal コマンドによってアーカイブされます。
streaming_archiver_name パラメーターで特に指定されない限り、
BarmanはWALストリーマープロセスのapplication_name
をbarman_receive_wal
に設定し、PostgreSQLサーバーのpg_stat_replication
システムビューでステータスを監視できるようにします。
レプリケーションスロット¶
レプリケーションスロットは、PostgreSQLサーバーがすべてのアーカイバーがWALファイルを受信するまで削除しないことを保証する自動化された方法です。 Barmanはこのメカニズムを使用して、PostgreSQLからトランザクションログを受信します。
レプリケーションスロットの詳細については、 PostgreSQL manual を参照してください。
ストリーミング接続のみに基づいてバックアップアーキテクチャを作成することもできます。このシナリオは、DockerベースのPostgreSQLサーバーを構成したり、 Windowsで実行されているPostgreSQLサーバーを操作したりする場合にも役立ちます。
重要
現時点では、 Windowsのサポートは継続的インテグレーションシステムの一部ではないため、まだ実験的です。
WALストリーミングの構成方法¶
最初に、トランザクションログファイルをBarmanサーバーにストリーミングするようにPostgreSQLサーバーを構成する必要があります。
BarmanからPostgreSQLサーバーへのストリーミング接続を構成するには、既に述べたように、サーバー構成ファイルに次の行を含めて、
streaming_archiver を有効にする必要があります。
streaming_archiver = on
レプリケーションスロットを使用する場合(推奨)、ストリーミングベースのトランザクションログアーカイブのセットアップに不可欠なオプションは
slot_name です。
slot_name = barman
このオプションは、 Barmanが使用するレプリケーションスロットの名前を定義します。レプリケーションスロットを使用する場合は必須です。
レプリケーションスロット名を構成する場合、次のコマンドを使用してBarmanのレプリケーションスロットを手動で作成できます。
barman@backup$ barman receive-wal --create-slot pg
Creating physical replication slot barman on server pg
Replication slot barman created
Barman 2.10以降、次のように設定して、レプリケーションスロットを自動的に作成するようにBarmanを構成できます。
create_slot = auto
リカバリによる部分的なWALファイルの制限¶
pg_receivewal の標準的な動作は、WALセグメント名の後に.partial
サフィックスを付けてファイルにトランザクション情報を書き込むことです。
Barmanは、部分的なファイルがサーバーのstreaming_wals_directory
にあることを想定しています。完了すると、 pg_receivewal
は.partial
サフィックスを削除して次のサフィックスを開き、永続的なストレージと圧縮のためにファイルをBarmanのarchive-wal
コマンドに配信します。
マスターPostgreSQLサーバーで回復不能な障害が発生した場合、
Barmanにストリーミングされた .partial
ファイルには、標準のアーカイバー(PostgreSQLのarchive_command
を介して)がBarmanに配信できなかった非常に重要な情報が含まれています。
Barman 2.10では、 get-wal コマンドは、 --partial/-P
オプションを介して現在の.partial
WALファイルの内容を返すことができます。これは、完全または特定の時点へのリカバリの場合に特に役立ちます。したがって、
get-wal を有効にして、 --standby-mode なしでrecover
コマンドを実行した場合、 Barmanはrestore_command
リカバリーオプションでbarman-wal-restore に-P
オプションを自動的に追加します(その後、リモートのget-wal
コマンドに中継します)。
get-wal
は、WALファイルが既にBarmanに出荷されたがまだアーカイブされていない場合に備えて、
incoming ディレクトリも検索します。