クラウド スナップショット バックアップ#
Barmanは、ストレージボリュームのスナップショットを利用して、特定のクラウド環境に展開されたPostgresサーバーのバックアップを実行できます。この設定では、 Postgresファイルのバックアップはクラウドに保存されているボリュームスナップショットとして表され、 Barmanは書き込み先行ログWALとバックアップカタログのストレージサーバーとして機能します。バックアップデータはクラウドに保存されているにもかかわらず、 Barmanは、 rsync または postgres バックアップ方法で作成された従来のバックアップと同様にこれらのバックアップを管理します。
注釈
さらに、 Postgresサーバーで barman-cloud-backup コマンドを直接使用することにより、 Barmanサーバーを使用せずにスナップショットバックアップを作成できます。このオプションを適切に使用する方法の詳細については、 barman-cloud-backup セクションを参照してください。
重要
backup_method=snapshot を使用する場合、次の構成オプションと同等のコマンド引数該当する場合は使用できません。
backup_compressionbandwidth_limit--bwlimitparallel_jobs--jobsnetwork_compressionreuse_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でスナップショットバックアップ方法を使用するには、展開が次の要件を満たしている必要があります。
Postgresは、サポートされているクラウドプロバイダーが提供するコンピューティングインスタンスで実行されている必要があります。
PGDATAやテーブルスペースデータを含むすべての重要なデータは、スナップショットをサポートするストレージボリュームに保存する必要があります。
findmntコマンドは、Postgresホストで使用できる必要があります。
重要
PGDATA の外部に保存された構成ファイルは、スナップショットに含まれません。構成管理システムまたはその他のメカニズムを使用して、これらのファイルを個別に管理する必要があります。
Google Cloud Platform#
Barmanで`GCP`のスナップショットバックアップを使用するには、以下を確認してください。
Python Libraries
Barmanが使用するPythonディストリビューションの google-cloud-compute および grpcio ライブラリをインストールします。これらのライブラリはオプショナルであり、デフォルトでは含まれません。
pipを使用してインストールします。
pip3 install grpcio google-cloud-compute
注釈
google-cloud-compute ライブラリには、Python 3.7以降が必要です。 GCPスナップショットは、以前のPythonバージョンと互換性がありません。
Disk Requirements
snapshot バックアップで使用されるディスクは、ゾーン永続ディスクである必要があります。現時点では、リージョン永続ディスクはサポートされていません。
Access Control
Barmanには、特定の権限を持つサービスアカウントが必要です。このアカウントをBarmanを実行しているコンピューティングインスタンスに接続するか、 GOOGLE_APPLICATION_CREDENTIALS 環境変数を使用して資格情報ファイルを指定できます。
重要
サービスアカウントに以下にリストされている権限があることを確認します。
compute.disks.createSnapshotcompute.disks.getcompute.globalOperations.getcompute.instances.getcompute.snapshots.createcompute.snapshots.deletecompute.snapshots.list
For provider specific credentials configurations, refer to the Google authentication methods and service account impersonation.
Specific Configuration
フィールド gcp_project および gcp_zone は、GCPに固有の構成オプションです。
gcp_project = GCP_PROJECT_ID
gcp_zone = ZONE
Microsoft Azure#
Barmanを使用してAzureでスナップショットバックアップを使用するには、以下を確認します。
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バージョンと互換性がありません。
Disk Requirements
スナップショットバックアップに関係するすべてのディスクは、データディスクとしてVMインスタンスに接続されている管理ディスクである必要があります。
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/readMicrosoft.Compute/virtualMachines/readMicrosoft.Compute/snapshots/readMicrosoft.Compute/snapshots/writeMicrosoft.Compute/snapshots/delete
For provider specific credential configurations, refer to the Azure environment variables configurations, Identity Package and DefaultAzureCredential documentation.
Specific Configuration
フィールド azure_subscription_id および azure_resource_group は、Azureに固有の構成オプションです。
azure_subscription_id = AZURE_SUBSCRIPTION_ID
azure_resource_group = AZURE_RESOURCE_GROUP
アマゾン ウェブ サービス#
Barmanで`AWS`のスナップショットバックアップを使用するには、以下を確認してください。
Python Libraries
boto3 ライブラリは、 Barmanが使用するPythonディストリビューションで利用できる必要があります。このライブラリはオプショナルであり、デフォルトでは含まれません。
pipを使用してインストールします。
pip3 install boto3
Disk Requirements
スナップショットバックアップに関係するすべてのディスクは、同じVMインスタンスに接続されている非ルートEBSボリュームである必要があります。
Access Control
BarmanはAWSにアクセスする必要があるため、postgresユーザーとして awscli ツールを使用してAWS資格情報を構成する必要があります、AWSコンソールのIAMセクションで事前に作成する必要があるアクセスキーとシークレットキーを入力します。
重要
以下にリストされている権限があることを確認します。
ec2:CreateSnapshotec2:CreateTagsec2:DeleteSnapshotec2:DescribeSnapshotsec2:DescribeInstancesec2:DescribeVolumes
プロバイダー固有の資格情報構成については、 AWS boto3 configurations を参照してください。
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
Ransomware Protection
ランサムウェア保護は、データを保護し、動作の安定性を維持するために不可欠です。 Amazon EBS Snapshot Lockを使用すると、スナップショットが削除から保護され、ランサムウェア攻撃から保護する不変のバックアップを提供します。スナップショットをロックすることにより、不要な削除が防止され、侵害された場合に信頼できる復旧オプションが保証されます。 Barmanは、バックアップの作成時にスナップショットをロックすることにより、バックアップの不要な削除を防ぐことができます。
注釈
ロックされたバックアップを削除するには、最初にAWSコンソールでロックを手動で削除する必要があります。
バックアップの作成中にスナップショットをロックするには、次のオプションを構成する必要があります。
スナップショットロックモード
complianceまたはgovernanceのいずれかを選択します。ロック期間または有効期限のいずれかを設定します両方ではありません。ロックの期間は1〜36,500の範囲で日単位で指定されます。有効期限を選択する場合、
YYYY-MM-DDTHH:MM:SS.sssZ形式を使用して、スナップショット作成日時の少なくとも1日後である必要があります。オプションで、クールオフ期間時間単位を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 を参照してください。
バックアッププロセス#
次に、スナップショットバックアッププロセスの概要を示します。
- Barmanは、チェックを実行して、スナップショットオプション、インスタンス、ディスクを検証します。
各バックアップの前と
barman checkコマンドの実行中に、次のチェックが実行されます。snapshot_instanceおよびプロバイダ固有の引数で指定されたコンピューティングインスタンスが存在します。snapshot_disksにリストされているディスクは存在します。snapshot_disksにリストされているディスクは、snapshot_instanceに接続されています。snapshot_disksにリストされているディスクは、snapshot_instanceにマウントされています。
Barmanは、PostgresバックアップAPIを使用してバックアップを開始します。
クラウドプロバイダーAPIは、指定された各ディスクのスナップショットを作成するために使用されます。 Barmanは、各スナップショットがアプリケーションの一貫性を保証する状態に到達するまで待機してから、次のディスクに進みます。
各ディスクのデバイス名、各ディスクのマウントポイントとオプションなどの追加プロバイダー固有の詳細は、バックアップメタデータに記録されます。
メタデータ#
コードとしてのインフラストラクチャ、アドホック自動化、または手動でリカバリディスクとインスタンスをプロビジョニングするかどうかに関係なく、 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_idAWSによって割り当てられたスナップショットのID。snapshot_nameスナップショットの名前。