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