準備手順

このセクションには、 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;

実際のスーパーユーザーがいないと、 barman switch-wal コマンドの--force オプションが機能しないことに注意してください。

重要

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

この接続は、 Barmanがサーバーとのアクティビティを調整したり、監視したりするために必要です。

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

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

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

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アーカイブとレプリケーション

続行する前に、 Barmanサーバーからのストリーミングレプリケーション接続を受け入れるように、 pg でPostgreSQLを適切に構成する必要があります。 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は、リモートサーバーへのリモートシェルを開き、サーバーとローカルシステム間でファイルをコピーできるようにするプロトコルおよびツールのセットです。 SSHの使用に関するその他のドキュメントは、Digital Oceanの記事

SSH Essentials にあります。

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 構成パラメーターの値については、「archiveコマンドによるWALアーカイブ」で説明します。

BarmanからPostgreSQLへ

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

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

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

barman@backup$ ssh postgres@pg -C true