準備的な手順#

このセクションには、 BarmanでPostgreSQLサーバーをセットアップする前に実行する必要がある予備手順が含まれています。

重要

続行する前に、「デザインとアーキテクチャ」セクションで概要を示しているように、WALアーカイブとバックアップ戦略の観点から決定を行うことが重要です。特に、使用するWALアーカイブ方法とバックアップ方法を決定する必要があります。

PostgreSQL接続#

backup サーバーがスーパーユーザーとしてpg のPostgreSQLサーバーに接続できること、またはデータベースに接続するユーザーに正しい特権セットが付与されていることを確認する必要があります。

次のとおりに、PostgreSQLでbarman という名前の特定のスーパーユーザーを作成できます。

postgres@pg$ createuser -s -P barman

または、次のとおりに必要な特権セットを持つ通常のユーザーを作成します。

postgres@pg$ createuser -P barman
GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) to barman;
GRANT EXECUTE ON FUNCTION pg_stop_backup() to barman;
GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) to barman;
GRANT EXECUTE ON FUNCTION pg_switch_wal() to barman;
GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) to barman;

GRANT pg_read_all_settings TO barman;
GRANT pg_read_all_stats TO barman;

PostgreSQL 15ベータおよび後続のPostgreSQLバージョンでは、ファンクションpg_start_backup およびpg_stop_backup の名前が変更され、シグネチャが異なります。したがって、上記のブロックの最初の3行を次のように置き換える必要があります。

GRANT EXECUTE ON FUNCTION pg_backup_start(text, boolean) to barman;
GRANT EXECUTE ON FUNCTION pg_backup_stop(boolean) to barman;

実際のスーパーユーザーのないPostgreSQLバージョン13以下では、 barman switch-wal コマンドの--force オプションは機能しないことに注意してください。 PostgreSQLバージョン14以降を実行している場合は、pg_checkpoint ロールを付与できるため、スーパーユーザーなしでこの機能を使用できます。

GRANT pg_checkpoint TO barman;

重要

上記の`createuser` コマンドは、パスワードの入力を求めます。パスワードは、 backup サーバー上の`~barman/.pgpass` ファイルに追加することをお勧めします。詳細については、 The Password File を参照してください。

この接続は、 Barmanがサーバーとのアクティビティを調整するために、およびモニタリングのために必要です。

PostgreSQLが提供するものの中からお気に入りのクライアント認証方法を選択できます。詳細については、

Client Authentication を参照してください。

backup ホストでbarmanユーザーとして次のコマンドを実行して、 backup ホストがpg ホスト上のPostgreSQLに接続できることを確認します。

barman@backup$ psql -c SELECT version() -U barman -h pg postgres

上記の情報ユーザー名、ホスト名、データベース名を書き留め、後で使用するために保存しておきます。この例のように、サーバー構成のconninfo オプションでこれが必要になります。

[pg]
; ...
conninfo = host=pg user=barman dbname=postgres application_name=myapp

注釈

application_name はオプショナル。

PostgreSQL WALのアーカイブとレプリケーション#

続行する前に、pg でPostgreSQLを適切に構成して、 Barmanサーバーからのストリーミングレプリケーション接続を受け入れる必要があります。 PostgreSQLドキュメントの次のセクションを読んでください。

非常に重要な構成パラメーターの1つが wal_level パラメーターです。このパラメーターは、バックアップの一貫性を保つために必要なすべての有用な情報がトランザクションログファイルに含まれるように構成する必要があります。

wal_level = replica|logical

構成を更新するためにPostgreSQLサーバーを再起動します。

PostgreSQLストリーミング接続#

WALストリーミングまたはストリーミングバックアップを使用する予定がある場合は、ストリーミング接続をセットアップする必要があります。次のとおり、PostgreSQLでstreaming_barman という名前の特定のユーザーを作成することをお勧めします。

postgres@pg$ createuser -P --replication streaming_barman

重要

上記のコマンドは、パスワードの入力を求めます。パスワードは、 backup サーバー上の`~barman/.pgpass` ファイルに追加することをお勧めします。詳細については、 The Password File を参照してください。

次のコマンドを使用して、ストリーミング接続が機能していることを手動で確認できます。

barman@backup$ psql -U streaming_barman -h pg \
  -c "IDENTIFY_SYSTEM" \
  replication=1

接続が機能している場合は、システム識別子、現在のタイムラインID、および現在のWALフラッシュの場所を含む応答が表示されます。例

      systemid       | timeline |  xlogpos   | dbname
- --------------------+----------+------------+--------
 7139870358166741016 |        1 | 1/330000D8 |
(1 row)

重要

続行する前に、ストリーミングレプリケーションを介して接続できることを確認してください。

PostgreSQL構成ファイルでmax_wal_senders パラメーターを構成する必要もあります。 WAL送信者の数は、実装したPostgreSQLアーキテクチャによって異なります。この例では、2 に設定しています。

max_wal_senders = 2

このオプションは、サーバーが管理できる同時ストリーミング接続の最大数を表します。

もう1つの重要なパラメーターはmax_replication_slots で、これはサーバーが管理できるレプリケーションスロット [1] の最大数を表します。このパラメーターは、ストリーミング接続を使用してWALファイルを受信する予定がある場合に必要です。

max_replication_slots = 2

max_replication_slots およびmax_wal_senders として提案された値は例として考えられる必要があり、実際のセットアップで使用する値は、アーキテクチャを注意深く評価した後に選択する必要があります。ガイドラインと説明については、 PostgreSQLドキュメントを参照してください。

SSH接続#

SSHは、リモートサーバーへのリモートシェルを開き、サーバーとローカルシステム間でファイルをコピーできるプロトコルとツールセットです。 Digital Oceanの記事 SSH Essentials で、SSHの使用に関するドキュメントの詳細を見つけることができます。

SSHキー交換は、別のマシン上のユーザー間の安全なパスワードレス接続を実装するために使用される非常に一般的な手法であり、WALアーカイブとバックアップにrsync を使用する必要があります。

注釈

このプロシージャは、トランザクションログのアーカイブとPostgreSQLサーバーのバックアップにのみストリーミング接続を使用する予定がある場合に必要です。

[ssh_essentials] https://www.digitalocean.com/community/tutorials/ssh-essentials-working-with-ssh-servers-clients-and-keys

postgresユーザーのSSH構成#

これまでに行ったことがない限り、PostgreSQLユーザーのSSHキーを作成する必要があります。 pg ホストにpostgres としてログインし、次のように入力します。

postgres@pg$ ssh-keygen -t rsa

このキーは、パスワードを提供せずにホストから接続するために使用する必要があるため、キーペアの作成中にパスフレーズを入力する必要はありません。

barmanユーザーのSSH構成#

前の段落と同様に、 BarmanユーザーのSSHキーを作成する必要があります。 backup ホストにbarman としてログインし、次のように入力します。

barman@backup$ ssh-keygen -t rsa

同じ理由で、パスフレーズは入力しないでください。

PostgreSQLからBarmanへ#

archive_command 設定を使用してWALファイルを正しくアーカイブするには、PostgreSQLサーバーからバックアップサーバーへのSSH接続が必要です。

PostgreSQLサーバーからバックアップサーバーに正常に接続するには、PostgreSQL公開キーをbarman ユーザーのバックアップサーバーの承認されたキーに構成する必要があります。

承認される公開キーは、postgres ユーザーのホームディレクトリ内の.ssh/id_rsa.pub という名前のファイルに保存され、そのコンテンツは、バックアップサーバーのbarman ユーザーのホームディレクトリ内の.ssh/authorized_keys という名前のファイルに含まれる必要があります。 authorized_keys ファイルが存在しない場合は、権限として600 を使用して作成します。

SSHキーペアの交換が正常に完了した場合、次のコマンドは出力なしで成功するはずです。

postgres@pg$ ssh barman@backup -C true

archive_command 構成パラメーターの値については、「archivecommandを介したWALアーカイブセクション」で説明します。

BarmanからPostgreSQLへ#

バックアップサーバーとPostgreSQLサーバー間のSSH接続は、rsyncを介した従来のバックアップに使用されます。 PostgreSQLサーバーからバックアップサーバーへの接続と同様に、postgres ユーザーのPostgreSQLサーバーでバックアップサーバーの公開キーを承認する必要があります。

barman サーバーのファイル.ssh/id_rsa.pub の内容は、PostgreSQLサーバーの.ssh/authorized_keys という名前のファイルに配置する必要があります。そのファイルのアクセス許可は600 である必要があります。

キーペアの交換が正常に完了した場合、次のコマンドは出力なしで成功するはずです。

barman@backup$ ssh postgres@pg -C true