WALストリーミング

Barmanは、ユーザーが標準の archive_command 戦略に加えて、 PostgreSQLサーバーからの連続的なWALストリーミングを追加できるようにすることで、Recovery Point Objective(RPO)を削減できます。

Barmanは pg_receivewal に依存しています。これは、ネイティブストリーミングレプリケーションプロトコルを活用し、 PostgreSQLサーバー(マスタまたはスタンバイ)からトランザクションログを継続的に受信するPostgreSQL 9.2から利用可能なユーティリティです。 PostgreSQL 10より前は、 pg_receivewal の名前付けは pg_receivexlog でした。

重要

Barmanでは、 pg_receivewal が同じサーバーにインストールされている必要があります。 PostgreSQL 9.2サーバーの場合、 Barmanと一緒にバージョン9.2の pg_receivexlog をインストールする必要があります。 PostgreSQL 9.3以降の場合、 pg_receivewal の最新バージョンをインストールすることをお勧めします。これは、互換性があるためです。そうでない場合、ユーザーは pg_receivewal / pg_receivexlog のマルチプルのバージョンをBarmanサーバーにインストールし、構成ファイルの path_prefix オプションを使用して、サーバーの特定のバージョンを適切に指すことができます。

トランザクションログのストリーミングを有効にするには、オーダーのことが必要です。

1.前述のようにストリーミング接続をセットアップします2. streaming_archiver オプションを on に設定します

前述の要件が満たされている場合、 cron コマンドは、 receive-wal コマンドの実行を通じてログストリーミングを透過的に管理します。これは推奨シナリオです。

ただし、ユーザーは receive-wal コマンドを手動で実行できます。

barman receive-wal <server_name>

注釈

receive-wal コマンドはフォアグラウンドプロセスです。

トランザクションログは、 streaming_wals_directory 構成オプションで指定されたディレクトリに直接ストリーミングされ、 archive-wal コマンドによってアーカイブされます。

streaming_archiver_name パラメータで特に指定されていない限り、 PostgreSQL 9.3以降の場合のみ、 BarmanはWALストリーマープロセスの application_name を barman_receive_wal に設定し、 PostgreSQLサーバーの pg_stat_replication システムビューでその状態をモニタできるようにします。

複製スロット

重要

レプリケーションスロットは、 PostgreSQL 9.4以降で使用可能です

レプリケーションスロットは、すべてのアーカイバが受信するまでPostgreSQLサーバーがWALファイルを削除しないように保証自動化された方法です。 Barmanはこのメカニズムを使用して、 PostgreSQLからトランザクションログを受信します。

PostgreSQL manual でレプリケーションスロットに関する詳細情報を見つけることができます。

バックアップアーキテクチャをストリーミング接続のみに基づいて構築することもできます。このシナリオは、DockerベースのPostgreSQLサーバーを構成したり、 Windows上で実行されてPostgreSQLサーバーと連携したりする場合にも役立ちます。

重要

現時点では、 Windowsサポートはまだ継続的統合システムのパートではないため、まだ実験段階です。

WALストリーミングを設定する方法

まず、 PostgreSQLサーバーは、トランザクションログファイルをBarmanサーバーにストリームするように構成する必要があります。

BarmanからPostgreSQLサーバーへのストリーミング接続を構成するには、既に説明したように、サーバー構成ファイルに次の行を含めて、 streaming_archiver を有効にする必要があります。

streaming_archiver = on

レプリケーションスロットの使用を計画している場合(推奨)、ストリーミングベースのトランザクションログアーカイビングのセットアップに不可欠なもう1つのオプションは、 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は -P オプションを barman-wal-restore に自動的に追加します( restore_command リカバリオプションでリモート get-wal コマンドにリレーします)。

get-wal は、WALファイルが既にBarmanに出荷されているがまだアーカイブされていない場合、 incoming ディレクトリも検索します。