WALストリーミング#
Barmanは、ユーザーが標準のarchive_command
戦略に加えて、PostgreSQLサーバーから継続的なWALストリーミングを追加できることにより、目標復旧ポイントRPOを削減できます。
Barmanは[pg_receivewal
][25]に依存しており、ネイティブストリーミングレプリケーションプロトコルを利用し、PostgreSQLサーバーマスターまたはスタンバイからトランザクションログを継続的に受信します。
PostgreSQL 10より前では、pg_receivewal
の名前はpg_receivexlog でした。
重要
Barmanでは、pg_receivewal が同じサーバーにインストールされていることが必要です。下位互換性があるため、pg_receivewal の最新バージョンをインストールすることをお勧めします。それ以外の場合、ユーザーはBarmanサーバーに`pg_receivewal` の複数のバージョンをインストールし、構成ファイルの`path_prefix` オプションを使用してサーバーの特定のバージョンを適切にポイントできます。
トランザクションログのストリーミングを有効にするには、次のことを行う必要があります。
前述のようにストリーミング接続をセットアップします
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 documentation][replication-slots]で見つけることができます。
ストリーミング接続のみに基づいてバックアップアーキテクチャをベースにすることもできます。このシナリオは、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_conninfoWALストリーミングステータスを監視し、関連するチェックを実行するためのオプションの接続文字列。設定されている場合、 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 ディレクトリも検索します。