オブジェクトストアのバックアップ

CloudNativePGは、オブジェクトストアでの継続的な物理バックアップとWALアーカイブを介して、PostgreSQLクラスターの オンライン/ホットバックアップ をネイティブにサポートしています。これは、データベースが常に稼働しており、ダウンタイムが必要なく、ポイントインタイムリカバリーが利用できることを意味します。

オペレーターは、 Barman Cloud ツールに基づいた継続的なバックアップインフラストラクチャをオーケストレーションできます。多くのPostgreSQLインスタンスをバックアップするBarmanサーバーで古典的なアーキテクチャを使用する代わりに、オペレーターはbarman-cloud-wal-archive 、barman-cloud-check-wal-archive 、barman-cloud-backup 、barman-cloud-backup-list 、およびbarman-cloud-backup-delete ツールに依存します。その結果、ベースバックアップは tarballs になります。ベースバックアップとWALファイルは両方とも圧縮および暗号化できます。

このためには、 barman-cli-cloud が含まれるイメージを使用する必要があります。コミュニティPostgreSQLイメージと最新のbarman-cli-cloud パッケージで構成されているため、このスコープにイメージghcr.io/cloudnative-pg/postgresql を使用できます。

重要

Barmanクラウドで導入された機能強化を利用するため、システムでオペランドの最新バージョンを実行していることを常に確認して、クラスターのセキュリティ面を向上させます。

バックアップは、Cluster のプライマリまたは指定されたプライマリインスタンスから実行されます レプリカクラスターから分散トポロジへ を参照してください

指定されたプライマリインスタンスの詳細については、 スタンバイからのバックアップ 。

共通オブジェクトストア

AWS S3 、 Microsoft Azure Blob Storage 、 Google Cloud Storage 、または MinIOゲートウェイ などの特定のオブジェクトストア、または互換性のあるプロバイダーを探している場合は、 付録A-バックアップ用の共通オブジェクトストア を参照してください。

リテンション ポリシー

重要

現在、保持ポリシーはボリュームスナップショットでは使用できません。

CloudNativePGは、リカバリウィンドウに基づいて リテンションポリシー を使用して、バックアップオブジェクトストアからのバックアップファイルの自動削除を管理できます。

内部的には、保持ポリシー機能はbarman-cloud-backup-delete と--retention-policy “RECOVERY WINDOW OF {{ retention policy value }} {{ retention policy unit }}” を使用します。

たとえば、次のように30日の保持ポリシーを使用してバックアップを定義できます。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
  backup:
    barmanObjectStore:
      destinationPath: "<destination path here>"
      s3Credentials:
        accessKeyId:
          name: aws-creds
          key: ACCESS_KEY_ID
        secretAccessKey:
          name: aws-creds
          key: ACCESS_SECRET_KEY
    retentionPolicy: "30d"

圧縮アルゴリズム

CloudNativePGは、デフォルトでバックアップとWALファイルを非圧縮方法でアーカイブします。ただし、 barman-cloud-backup バックアップ用およびbarman-cloud-wal-archive WALファイル用を介して次の圧縮アルゴリズムもサポートします。

  • bzip2

  • gzip

  • snappy

バックアップとWALの圧縮設定は独立しています。 barman-cloud APIリファレンスの DataBackupConfiguration および WALBackupConfiguration セクションを参照してください。

アーカイブ時間、復元時間、およびサイズはアルゴリズムによって異なるため、ユースケースに応じて圧縮アルゴリズムを選択する必要があることに注意してください。

Barmanチームは、 Barman Cloudでサポートされているアルゴリズムのパフォーマンスの評価を実行しました。次の表は、ローカルのMinIO展開でバックアップが作成されるシナリオをまとめています。 Barman GitHubプロジェクトには、 deeper analysis が含まれています。

Compression

Backup Time (ms)

Restore Time (ms)

Uncompressed size (MB)

Compressed size (MB)

Approx ratio

None

10927

7553

395

395

1:1

bzip2

25404

13886

395

67

5.9:1

gzip

116281

3077

395

91

4.3:1

snappy

8134

8341

395

166

2.4:1

バックアップオブジェクトのタグ付け

Barman 2.18では、 barman-cloud-backup およびbarman-cloud-wal-archive を介してオブジェクトストアに保存する際のバックアップリソースのタグ付けのサポートを導入しました。その結果、PostgreSQLコンテナイメージにバージョン2.18以降のBarmanが含まれる場合、CloudNativePGでは、バックアップオブジェクト、つまりベースバックアップ、WALファイル、履歴ファイルのキーと値のペアとしてタグを指定できます。

.spec.backup.barmanObjectStore 定義では2つのプロパティを使用できます。

  • tags バックアップオブジェクトとバックアップオブジェクトストアのアーカイブされたWALファイルに追加するキーと値のペアタグ

  • historyTags バックアップオブジェクトストアのアーカイブされた履歴ファイルに追加されるキーと値のペアタグ

以下のYAMLマニフェストの抜粋は、この機能の使用例を提供します。

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
  backup:
    barmanObjectStore:
      [...]
      tags:
        backupRetentionPolicy: "expire"
      historyTags:
        backupRetentionPolicy: "keep"

backupおよびWALコマンドの追加オプション

.spec.backup.barmanObjectStore.data および.spec.backup.barmanObjectStore.wal セクションのadditionalCommandArgs プロパティを使用して、 barman-cloud-backup およびbarman-cloud-wal-archive コマンドに追加オプションを追加できます。このプロパティは、 barman-cloud-backup およびbarman-cloud-wal-archive コマンドに追加される文字列のリストです。

たとえば、 --read-timeout=60 を使用して、接続の読み取りタイムアウトをカスタマイズできます。

barman-cloud-backup およびbarman-cloud-wal-archive コマンドでサポートされる追加オプションについては、公式バーマンドキュメント

here を参照してください。

additionalCommandArgs で提供されるオプションが、そのセクション.spec.backup.barmanObjectStore.data または.spec.backup.barmanObjectStore.wal の宣言されたオプションに既に存在する場合、追加のオプションは無視されます。

次に、このプロパティの使用方法の例を示します。

バックアップの場合

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
  backup:
    barmanObjectStore:
      [...]
      data:
        additionalCommandArgs:
        - "--min-chunk-size=5MB"
        - "--read-timeout=60"

WALファイルの場合

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
[...]
spec:
  backup:
    barmanObjectStore:
      [...]
      wal:
        additionalCommandArgs:
        - "--max-concurrency=1"
        - "--read-timeout=60"