クラウド スナップショット バックアップ#

Barmanは、ストレージボリュームのスナップショットを利用して、特定のクラウド環境に展開されたPostgresサーバーのバックアップを実行できます。この設定では、 Postgresファイルのバックアップはクラウドに保存されているボリュームスナップショットとして表され、 Barmanは書き込み先行ログWALとバックアップカタログのストレージサーバーとして機能します。バックアップデータはクラウドに保存されているにもかかわらず、 Barmanは、 rsync または postgres バックアップ方法で作成された従来のバックアップと同様にこれらのバックアップを管理します。

注釈

さらに、 Postgresサーバーで barman-cloud-backup コマンドを直接使用することにより、 Barmanサーバーを使用せずにスナップショットバックアップを作成できます。このオプションを適切に使用する方法の詳細については、 barman-cloud-backup セクションを参照してください。

重要

backup_method=snapshot を使用する場合、次の構成オプションと同等のコマンド引数該当する場合は使用できません。

  • backup_compression

  • bandwidth_limit --bwlimit

  • parallel_jobs --jobs

  • network_compression

  • reuse_backup --reuse-backup

スナップショットバックアップを構成するには、特定のPostgresサーバーのBarman構成ファイルに次のパラメーターを含めます。

backup_method = snapshot
snapshot_provider = CLOUD_PROVIDER
snapshot_instance = INSTANCE_NAME
snapshot_disks = DISK_NAME1,DISK_NAME2

重要

snapshot_disks に、Postgresデータを保存するすべてのディスクが含まれていることを確認します。リストされていないディスクに保存されているデータはバックアップされず、リカバリ中に使用できません。

要件と構成#

Barmanでスナップショットバックアップ方法を使用するには、展開が次の要件を満たしている必要があります。

  1. Postgresは、サポートされているクラウドプロバイダーが提供するコンピューティングインスタンスで実行されている必要があります。

  2. PGDATAやテーブルスペースデータを含むすべての重要なデータは、スナップショットをサポートするストレージボリュームに保存する必要があります。

  3. findmnt コマンドは、Postgresホストで使用できる必要があります。

重要

PGDATA の外部に保存された構成ファイルは、スナップショットに含まれません。構成管理システムまたはその他のメカニズムを使用して、これらのファイルを個別に管理する必要があります。

Google Cloud Platform#

Barmanで`GCP`のスナップショットバックアップを使用するには、以下を確認してください。

  1. Python Libraries

Barmanが使用するPythonディストリビューションの google-cloud-compute および grpcio ライブラリをインストールします。これらのライブラリはオプショナルであり、デフォルトでは含まれません。

pipを使用してインストールします。

pip3 install grpcio google-cloud-compute

注釈

google-cloud-compute ライブラリには、Python 3.7以降が必要です。 GCPスナップショットは、以前のPythonバージョンと互換性がありません。

  1. Disk Requirements

snapshot バックアップで使用されるディスクは、ゾーン永続ディスクである必要があります。現時点では、リージョン永続ディスクはサポートされていません。

  1. Access Control

Barmanには、特定の権限を持つサービスアカウントが必要です。このアカウントをBarmanを実行しているコンピューティングインスタンスに接続するか、 GOOGLE_APPLICATION_CREDENTIALS 環境変数を使用して資格情報ファイルを指定できます。

重要

サービスアカウントに以下にリストされている権限があることを確認します。

  • compute.disks.createSnapshot

  • compute.disks.get

  • compute.globalOperations.get

  • compute.instances.get

  • compute.snapshots.create

  • compute.snapshots.delete

  • compute.snapshots.list

For provider specific credentials configurations, refer to the Google authentication methods and service account impersonation.

  1. Specific Configuration

フィールド gcp_project および gcp_zone は、GCPに固有の構成オプションです。

gcp_project = GCP_PROJECT_ID
gcp_zone = ZONE

Microsoft Azure#

Barmanを使用してAzureでスナップショットバックアップを使用するには、以下を確認します。

  1. Python Libraries

azure-mgmt-compute および azure-identity ライブラリは、 Barmanが使用するPythonディストリビューションで利用できる必要があります。これらのライブラリはオプショナルであり、デフォルトでは含まれません。

pipを使用してインストールします。

pip3 install azure-mgmt-compute azure-identity

注釈

azure-mgmt-compute ライブラリには、Python 3.7以降が必要です。 Azureスナップショットは、以前のPythonバージョンと互換性がありません。

  1. Disk Requirements

スナップショットバックアップに関係するすべてのディスクは、データディスクとしてVMインスタンスに接続されている管理ディスクである必要があります。

  1. Access Control

Barmanは、マネージドIDまたはCLIログインを介して取得した資格情報を使用してAzureにアクセスする必要があります。

次の環境変数がサポートされています。 AZURE_STORAGE_CONNECTION_STRING 、 AZURE_STORAGE_KEY および AZURE_STORAGE_SAS_TOKEN 。 Azure Active Directoryを介して認証するために、 --credential オプションを使用して、 default 、 azure-cli または managed-identity 資格情報を指定することもできます。

重要

資格情報に以下にリストされている権限があることを確認します。

  • Microsoft.Compute/disks/read

  • Microsoft.Compute/virtualMachines/read

  • Microsoft.Compute/snapshots/read

  • Microsoft.Compute/snapshots/write

  • Microsoft.Compute/snapshots/delete

For provider specific credential configurations, refer to the Azure environment variables configurations, Identity Package and DefaultAzureCredential documentation.

  1. Specific Configuration

フィールド azure_subscription_id および azure_resource_group は、Azureに固有の構成オプションです。

azure_subscription_id = AZURE_SUBSCRIPTION_ID
azure_resource_group = AZURE_RESOURCE_GROUP

アマゾン ウェブ サービス#

Barmanで`AWS`のスナップショットバックアップを使用するには、以下を確認してください。

  1. Python Libraries

boto3 ライブラリは、 Barmanが使用するPythonディストリビューションで利用できる必要があります。このライブラリはオプショナルであり、デフォルトでは含まれません。

pipを使用してインストールします。

pip3 install boto3
  1. Disk Requirements

スナップショットバックアップに関係するすべてのディスクは、同じVMインスタンスに接続されている非ルートEBSボリュームである必要があります。

  1. Access Control

BarmanはAWSにアクセスする必要があるため、postgresユーザーとして awscli ツールを使用してAWS資格情報を構成する必要があります、AWSコンソールのIAMセクションで事前に作成する必要があるアクセスキーとシークレットキーを入力します。

重要

以下にリストされている権限があることを確認します。

  • ec2:CreateSnapshot

  • ec2:CreateTags

  • ec2:DeleteSnapshot

  • ec2:DescribeSnapshots

  • ec2:DescribeInstances

  • ec2:DescribeVolumes

プロバイダー固有の資格情報構成については、 AWS boto3 configurations を参照してください。

  1. Specific Configuration

フィールド aws_region 、 aws_profile 、および aws_await_snapshots_timeout は、AWSに固有の構成オプションです。

aws_profile は、資格情報ファイルのAWSプロファイルの名前です。使用しない場合、デフォルトのプロファイルが適用されます。資格情報ファイルが存在しない場合、資格情報は環境から取得されます。

aws_region は、AWSプロファイルで定義されたリージョンをオーバーライドします。

aws_await_snapshots_timeout は、スナップショットが作成されるのを待機するタイムアウトです。デフォルトは 3600 秒です。

snapshot_instance または snapshot_disks を指定すると、 Barmanはインスタンス/ボリュームIDまたはリソースの名前を受け入れます。名前を使用する場合、 BarmanはAWSに照会して、一致する Name タグを持つリソースを照会します。 0または複数の一致が見つかった場合、 Barmanはエラーを結果ます。

aws_region = AWS_REGION
aws_profile = AWS_PROFILE_NAME
aws_await_snapshots_timeout = TIMEOUT_IN_SECONDS
  1. Ransomware Protection

ランサムウェア保護は、データを保護し、動作の安定性を維持するために不可欠です。 Amazon EBS Snapshot Lockを使用すると、スナップショットが削除から保護され、ランサムウェア攻撃から保護する不変のバックアップを提供します。スナップショットをロックすることにより、不要な削除が防止され、侵害された場合に信頼できる復旧オプションが保証されます。 Barmanは、バックアップの作成時にスナップショットをロックすることにより、バックアップの不要な削除を防ぐことができます。

注釈

ロックされたバックアップを削除するには、最初にAWSコンソールでロックを手動で削除する必要があります。

バックアップの作成中にスナップショットをロックするには、次のオプションを構成する必要があります。

  1. スナップショットロックモード compliance または governance のいずれかを選択します。

  2. ロック期間または有効期限のいずれかを設定します両方ではありません。ロックの期間は1〜36,500の範囲で日単位で指定されます。有効期限を選択する場合、 YYYY-MM-DDTHH:MM:SS.sssZ 形式を使用して、スナップショット作成日時の少なくとも1日後である必要があります。

  3. オプションで、クールオフ期間時間単位を1〜72の範囲で設定します。このオプションは、ロックモードが compliance に設定されている場合にのみ適用されます。

aws_snapshot_lock_mode = compliance | governance
aws_snapshot_lock_duration = 1
aws_snapshot_lock_cool_off_period = 1
aws_snapshot_lock_expiration_date = "2024-10-07T21:53:00.606Z"

重要

以下にリストされている権限があることを確認します。

  • ec2:LockSnapshot

AWSスナップショットロックの背後にある概念については、 Amazon EBS snapshot lock concepts を参照してください。

バックアッププロセス#

次に、スナップショットバックアッププロセスの概要を示します。

  1. Barmanは、チェックを実行して、スナップショットオプション、インスタンス、ディスクを検証します。

    各バックアップの前と barman check コマンドの実行中に、次のチェックが実行されます。

    • snapshot_instance およびプロバイダ固有の引数で指定されたコンピューティングインスタンスが存在します。

    • snapshot_disks にリストされているディスクは存在します。

    • snapshot_disks にリストされているディスクは、 snapshot_instance に接続されています。

    • snapshot_disks にリストされているディスクは、 snapshot_instance にマウントされています。

  2. Barmanは、PostgresバックアップAPIを使用してバックアップを開始します。

  3. クラウドプロバイダーAPIは、指定された各ディスクのスナップショットを作成するために使用されます。 Barmanは、各スナップショットがアプリケーションの一貫性を保証する状態に到達するまで待機してから、次のディスクに進みます。

  4. 各ディスクのデバイス名、各ディスクのマウントポイントとオプションなどの追加プロバイダー固有の詳細は、バックアップメタデータに記録されます。

メタデータ#

コードとしてのインフラストラクチャ、アドホック自動化、または手動でリカバリディスクとインスタンスをプロビジョニングするかどうかに関係なく、 Barmanを使用して特定のバックアップに必要なスナップショットを特定する必要があります。これは、 barman show-backup コマンドで行うことができます。このコマンドは、バックアップに含まれる各スナップショットの詳細を提供します。

例

Backup 20240813T200506:
  Server Name            : snapshot
  System Id              : 7402620047885836080
  Status                 : DONE
  PostgreSQL Version     : 160004
  PGDATA directory       : /opt/postgres/data
  Estimated Cluster Size : 22.7 MiB

  Server information:
    Checksums            : on

  Snapshot information:
    provider             : aws
    account_id           : 714574844897
    region               : sa-east-1

    device_name          : /dev/sdf
    snapshot_id          : snap-0d2288b4f30e3f9e3
    snapshot_name        : Barman_AWS:1:/dev/sdf-20240813t200506
    Mount point          : /opt/postgres
    Mount options        : rw,noatime,seclabel

  Base backup information:
    Backup Method        : snapshot-concurrent
    Backup Size          : 1.0 KiB (16.0 MiB with WALs)
    WAL Size             : 16.0 MiB
    Timeline             : 1
    Begin WAL            : 00000001000000000000001A
    End WAL              : 00000001000000000000001A
    Number of WALs       : 1
    Begin time           : 2024-08-14 16:21:50.820618+00:00
    End time             : 2024-08-14 16:22:38.264726+00:00
    Copy time            : 47 seconds
    Estimated throughput : 22 B/s
    Begin Offset         : 40
    End Offset           : 312
    Begin LSN            : 0/1A000028
    End LSN              : 0/1A000138

  WAL information:
    Number of files      : 1
    Disk usage           : 16.0 MiB
    WAL rate             : 5048.32/hour
    Last available       : 00000001000000000000001B

  Catalog information:
    Retention Policy     : not enforced
    Previous Backup      : - (this is the oldest base backup)
    Next Backup          : - (this is the latest base backup)

--format=json オプションは、外部ツールと統合する場合に使用できます。

{
  "snapshots_info": {
    "provider": "gcp",
    "provider_info": {
      "project": "project_id"
    },
    "snapshots": [
      {
        "mount": {
          "mount_options": "rw,noatime",
          "mount_point": "/opt/postgres"
        },
        "provider": {
          "device_name": "pgdata",
          "snapshot_name": "barman-av-ubuntu20-primary-pgdata-20230123t131430",
          "snapshot_project": "project_id"
        }
      },
      {
        "mount": {
          "mount_options": "rw,noatime",
          "mount_point": "/opt/postgres/tablespaces/tbs1"
        },
        "provider": {
          "device_name": "tbs1",
          "snapshot_name": "barman-av-ubuntu20-primary-tbs1-20230123t131430",
          "snapshot_project": "project_id",
        }
      }
    ]
  }
}

snapshots_info/provider_info および snapshots_info/snapshots/*/provider にあるメタデータは、以降のセクションで詳細に説明するように、クラウドプロバイダーによって異なります。

GCP

snapshots_info/provider_info

  • project バックアップとリカバリーに関係するリソースを所有するプロジェクトのGCPプロジェクトID。

snapshots_info/snapshots/*/provider

  • device_name スナップショットのソースディスクがバックアップ時にバックアップVMに接続された短いデバイス名。

  • snapshot_name スナップショットの名前。

  • snapshot_project スナップショットを所有するGCPプロジェクトID。

Azure

snapshots_info/provider_info

  • subscription_id バックアップとリカバリーに関係するリソースを所有するAzureサブスクリプションID。

  • resource_group バックアップに関係するリソースが属するAzureリソースグループ。

snapshots_info/snapshots/*/provider

  • location スナップショットが取得されたディスクのAzureの場所。

  • lun バックアップ時にスナップショットが取得されたディスクを識別するLUN。

  • snapshot_name スナップショットの名前。

AWS

snapshots_info/provider_info

  • account_id バックアップの作成に使用されるリソースを所有するAWSアカウントのID。

  • region バックアップに関係するリソースが存在するAWSリージョン。

snapshots_info/snapshots/*/provider

  • device_name バックアップ時にバックアップVMでソースディスクがマッピングされたデバイス。

  • snapshot_id AWSによって割り当てられたスナップショットのID。

  • snapshot_name スナップショットの名前。