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

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

オペレーターは、 `Barman Cloud <https://pgbarman.org>`_ ツールに基づいた継続的なバックアップインフラストラクチャをオーケストレーションできます。多くの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``
を使用できます。

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

バックアップは、\ ``Cluster``
のプライマリまたは指定されたプライマリインスタンスから実行されます
 :ref:`レプリカクラスター <レプリカクラスター>` を参照してください

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

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

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

リテンション ポリシー
---------------------

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

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

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

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

.. code:: yaml

   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"

..  Note "There's more ..."::
   **リカバリウィンドウリテンションポリシー**は、`current time - recovery window` によって決定される移動ポイントである*回復可能ポイント* `PoR` の概念に焦点を当てています。 *最初の有効なバックアップ*は、`PoR` の前に最初に使用可能なバックアップです新しい順に。 CloudNativePGは、最初の有効なバックアップから始めて、`PoR` と最新の正常にアーカイブされたWALファイル間の任意の時点でクラスターを復旧できることを保証する必要があります。最初の有効なバックアップよりも古いベースバックアップは*古い*としてマークされ、次のバックアップが完了した後に完全に削除されます。

圧縮アルゴリズム
----------------

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

-  bzip2

-  gzip

-  きびきびとした

バックアップとWALの圧縮設定は独立しています。
APIリファレンスの :ref:`DataBackupConfiguration {postgresql-cnpg-io-v1-DataBackupConfiguration} <DataBackupConfiguration {postgresql-cnpg-io-v1-DataBackupConfiguration}>` および :ref:`WalBackupConfiguration {postgresql-cnpg-io-v1-WalBackupConfiguration} <WalBackupConfiguration {postgresql-cnpg-io-v1-WalBackupConfiguration}>` セクションを参照してください。

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

Barmanチームは、 Barman
Cloudでサポートされているアルゴリズムのパフォーマンスの評価を実行しました。次の表は、ローカルのMinIO展開でバックアップが作成されるシナリオをまとめています。
Barman GitHubプロジェクトには、 `deeper analysis <https://github.com/EnterpriseDB/barman/issues/344#issuecomment-992547396>`_ が含まれています。

.. csv-table::
  :header: Compression,Backup Time (ms),Restore Time (ms),Uncompressed size (MB),Compressed size (MB),Approx ratio
  :widths: auto
  :align: left
  :class: longtable

  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マニフェストの抜粋は、この機能の使用例を提供します。

.. code:: yaml

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