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

  2. 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

レプリケーションスロット推奨を使用する予定がある場合、ストリーミングベースのトランザクションログアーカイブのセットアップに重要なもう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とバックアップBarman 3.10.0以降#

Barmanは、WALセグメントをストリーミングするためのpg_receivewal プロセスを作成するときにstreaming_conninfo で定義された接続情報を使用し、レプリケーションスロットのステータスを確認するときにconninfo を使用します。 conninfo およびstreaming_conninfo はバックアップを取るときにも使用されるため、このデフォルト構成では、 BarmanにWALをストリーミングし、同じホストからバックアップを取得します。

プライマリからストリーミングされるWALと、スタンバイからバックアップがソースされるなど、代替構成が必要な場合、次のオプションを使用して実現できます。

  • wal_streaming_conninfo ストリーミングレプリケーションプロトコルを介してWALセグメントを受信するとき、およびWALの受信に使用されるレプリケーションスロットのステータスを確認するときに、 Barmanがstreaming_conninfo の代わりに使用する接続文字列。

  • wal_conninfo WALストリーミングステータスを監視し、関連するチェックを実行するためのオプションの接続文字列。設定されている場合、 Barmanはレプリケーションスロットのステータスを確認するときにwal_streaming_conninfo の代わりにこれを使用します。

次の制限が適用され、チェック中にBarmanによって強制されます。

  • wal_streaming_conninfo およびwal_conninfo によって定義された接続は、 streaming_conninfo およびconninfo 接続が到達するのと同じクラスターに属するPostgreSQLインスタンスに到達する必要があります。

  • wal_streaming_conninfo 接続文字列は、ストリーミングレプリケーション接続を作成できる必要があります。

  • wal_streaming_conninfo または wal_conninfo 設定されている場合 、設定を読み取り、レプリケーションスロットのステータスを確認するための十分な権限が必要です。必要な権限は次のいずれかです。

    • pg_monitor ロール.

    • pg_read_all_settings およびpg_read_all_stats ロールの両方。

    • superuser ロール。

重要

クラスター内の*任意の*PostgreSQLインスタンスからWALをストリーミングすることは可能ですが、スタンバイからWALをストリーミングするときにWALセグメントが失われるリスクがあります、そのようなスタンバイが独自の上流ソースに追いつけない場合。このため、WALは常にプライマリから直接ストリーミングすることを*強くお勧めします。

リカバリーを含む部分的な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 ディレクトリも検索します。