Backup on object stores#

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

共通オブジェクトストア#

AWS S3、Microsoft Azure Blob Storage、Google Cloud Storage、MinIO Gateway、またはS3互換プロバイダーなど、複数のオブジェクトストアがサポートされています。 EDB Postgres Distributed for KubernetesがKubernetesのEDB Postgresに依存してオブジェクトストアとの接続を構成することを考えると、

詳細については、ドキュメントを参照してください。

重要

EDB Postgres for Kubernetesドキュメントのクラウドプロバイダー構成セクションは、 spec.backup.barmanObjectStore で入手できます。 EDB Postgres Distributed for Kubernetesの例では、オブジェクトストアセクションは別のパス`spec.backup.configuration.barmanObjectStore` にあります。

WALアーカイブ#

WALアーカイブは、WALファイルをオブジェクトストレージに送信するプロセスであり、オンライン/ホットバックアップまたはPITRを実行することが重要です。 KubernetesのEDB Postgres分散では、各PGDノードはオブジェクトストアにWALファイルを個別にアーカイブするように設定されます。

WALアーカイブはPGD Group spec.backup.configuration.barmanObjectStore スタンザで定義され、宛先パスとクラウド資格情報が設定されるとすぐに有効になります。 WALファイルはアップロードされる前に圧縮し、暗号化できます。パラレルWALアーカイブを有効にすることもできます。

apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
  backup:
    configuration:
      barmanObjectStore:
        [...]
        wal:
          compression: gzip
          encryption: AES256
          maxParallel: 8

詳細については、 EDB Postgres for Kubernetes WAL archiving ドキュメントを参照してください。

スケジュールされたバックアップ#

スケジュールされたバックアップは、KubernetesのEDB Postgres Distributedでバックアップ戦略を構成するための推奨される方法です。 PGDグループ spec.backup.configuration.barmanObjectStore および.spec.backup.schedulers[].schedule スタンザが構成されている場合、オペレーターはScheduled Backup リソースを作成する選択したバックアップノードとしてPGDデータノードの1つを選択します。

.spec.backup.schedulers[].method フィールドでは、スケジュールされたバックアップ方法を定義できます。 2つのバックアップ方法がサポートされています。

  • volumeSnapshot

  • barmanObjectStore デフォルト

複数のスケジューラーを定義できますが、各メソッドは1つのスケジューラーでのみ使用できます。つまり、2つのスケジューラーが同じメソッドを使用することはできません。

オブジェクトストアのバックアップの場合、デフォルトのbarmanObjectStore 方法では、スタンザ spec.backup.configuration.barmanObjectStore を使用して、バックアップとwalアーカイブの両方のオブジェクトストア情報を定義します。詳細については、 EDB Postgres for Kubernetes Backup on Object Stores を参照してください。

volumeSnapshotバックアップを実行するには、 volumeSnapshot 方法を選択できます。スタンザ spec.backup.configuration.barmanObjectStore.volumeSnapshot は、volumeSnapshot構成を定義するために使用されます。詳細については、 EDB Postgres for Kubernetes Backup on Volume Snapshots を参照してください。

次の例は、バックアップにvolumeSnapshot メソッドを使用する方法を示しています。 WALアーカイブは引き続きbarmanオブジェクトストアで行われます。

apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
  backup:
    configuration:
      volumeSnapshot:
        className: csi-hostpath-snapclass
      barmanObjectStore:
        destinationPath: "<destination path here>"
        s3Credentials:
          accessKeyId:
            name: backup-storage-creds
            key: ID
          secretAccessKey:
            name: backup-storage-creds
            key: KEY
        wal:
          compression: gzip
          encryption: AES256
          maxParallel: 8
    schedulers:
    - method: volumeSnapshot
      schedule: "0 0 0  **  *"
      backupOwnerReference: self
      suspend: false
      immediate: true

2つのバックアップ方法の比較の詳細については、 EDB Postgres for Kubernetes for Object stores or volume snapshots を参照してください。

.spec.backup.schedulers[].schedule フィールドでは、

Go `cron package format <https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format>`_ で表現されるcronスケジュールを定義できます。

apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
  backup:
    schedulers:
    - method: barmanObjectStore
      schedule: "0 0 0  **  *"
      backupOwnerReference: self
      suspend: false
      immediate: true

必要に応じて、.spec.backup.schedulers[].suspend をtrue に設定することにより、スケジュールされたバックアップを一時停止できます。これにより、新しいバックアップがスケジュールされなくなります。

ScheduledBackup リソースが作成されたらすぐにバックアップを実行したい場合は、 .spec.backup.schedulers[].immediate をtrue に設定します。

.spec.backupOwnerReference は、作成したバックアップリソースで使用するownerReference を示します。選択肢は次のとおりです。

  • none — 作成されたバックアップオブジェクトの所有者参照はありません。

  • self — ScheduledBackup オブジェクトをバックアップの所有者として設定します。

  • cluster — クラスターをバックアップの所有者として設定します。

警告

.spec.backup.cron フィールドは非推奨になりました。代わりに`.spec.backup.schedulers` を使用してください。 .spec.backup.cron は引き続き使用できますが、 .spec.backup.schedulers と同時に使用できないことに注意してください。

注釈

EDB Postgres for Kubernetes ScheduledBackup オブジェクトには、バックアップするクラスターを指定する`cluster` オプションが含まれています。このオプションは現在EDB Postgres Distributed for Kubernetesではサポートされておらず、指定されても無視されます。

選択されたバックアップノードが削除される場合、オペレーターは新しいバックアップノードを透過的に選択し、それに応じてScheduledBackup リソースを調整します。

リテンション ポリシー#

KubernetesのEDB Postgres Distributedは、リカバリウィンドウに基づいて保持ポリシーを使用して、バックアップオブジェクトストアからのバックアップファイルの自動削除を管理できます。このプロセスは、未使用のWALファイルと、削除がスケジュールされているバックアップに関連付けられているWALの削除も行います。

30日の保持ポリシーを使用してバックアップを定義できます。

apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
  backup:
    configuration:
      retentionPolicy: "30d"

詳細については、 EDB Postgres for Kubernetesドキュメントの EDB Postgres for Kubernetes retention policies を参照してください。

重要

現在、保持ポリシーは、選択された`Backup Node` バックアップとWALファイルにのみ適用されます。他の各PGDノードも自分のWALを独立してアーカイブすることを考えると、オブジェクトストレージデータ保持ポリシーを活用するなど、これらのWALファイルのライフサイクルを管理するのはあなたの責任です。また、すべてのPGDノードディレクトリにオブジェクトストレージデータ保持ポリシーを設定している場合、オペレーターが管理する保持ポリシーと重複または干渉していないことを確認します。

圧縮アルゴリズム#

バックアップとWALファイルはデフォルトで非圧縮です。ただし、複数の圧縮アルゴリズムがサポートされています。詳細については、 EDB Postgres for Kubernetes compression algorithms ドキュメントを参照してください。

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

バックアップオブジェクト、つまりベースバックアップ、WALファイル、履歴ファイルのキーと値のペアとしてタグを指定できます。詳細については、

tagging of backup objects に関するEDB Postgres for

Kubernetesドキュメントを参照してください。

PGDノードのオンデマンドバックアップ#

PGDノードは、Kubernetes Cluster オブジェクトの単一インスタンスEDB Postgresとして表されます。そのため、必要に応じて、Kubernetes Backup リソースのEDB Postgresを作成することにより、特定のPGDノードのオンデマンドバックアップを要求できます。これを行うには、 EDB Postgres for Kubernetesドキュメントの EDB Postgres for Kubernetes on-demand backups を参照してください。

ヒント

kubectl get cluster -l k8s.pgd.enterprisedb.io/group=my-pgd-group -n my-namespace を実行して、PGDグループを構成するKubernetesクラスターのEDB Postgresのリストを取得できます。