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.前述のようにストリーミング接続をセットアップする

  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 ディレクトリも検索します。