Recovery#
KubernetesのEDB Postgres分散では、 PGDノードの使用可能な物理バックアップから開始して、新しいPGDグループをブートストラップする方法として、リカバリを利用できます。リカバリは、既存のPGDグループでインプレースで実行できません。
KubernetesのEDB Postgres分散は、ポイントインタイムリカバリーPITRもサポートしており、カタログで最初に使用可能なバックアップから最後にアーカイブされたWALまで、任意のポイント・インタイムにPGDグループを復元できます。 PITRにはWALアーカイブがあることが必須です。
前提条件#
バックアップから復元する前に
復旧したクラスターのPostgreSQL構成
.spec.cnp.postgresql.parametersが、物理レプリケーションの観点から元の構成と互換性があることを確認します。新しく作成した名前空間で復旧する場合、復旧したPGDグループを展開する前に、最初にcert-manager CA発行者を設定します。
詳細については、 EDB Postgres for Kubernetesドキュメントの EDB Postgres for Kubernetes recovery - Additional considerations を参照してください。
オブジェクトストアからのリカバリー#
Barman Cloudによって作成され、サポートされているオブジェクトストレージに保存されているPGDノードバックアップから復旧できます。
たとえば、バックアップが使用可能な3つのインスタンスを持つpgdgroup-example
という名前のPGDグループがあると、オブジェクトストレージには各ノードのディレクトリが含まれます。
pgdgroup-example-1 、pgdgroup-example-2
、pgdgroup-example-3
この例では、オブジェクトストアからの完全なリカバリを定義します。オペレーターは、定義されたserverNames
から最新のバックアップを透過的に選択し、最後の使用可能なWALまで再生します。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: pgdgroup-restore
spec:
[...]
restore:
serverNames:
- pgdgroup-backup-1
- pgdgroup-backup-2
- pgdgroup-backup-3
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
重要
ソースクラスターに従って、WALセクションを正しく構成してください。この例では、 pgdgroup-example PGDグループは`compression` および`encryption` を使用しているため、 restore によって作成されているPGDグループでも適切なパラメーターを設定してください。
注釈
この例では、並列WALリストア機能を利用し、最大8つのジョブを専用にアーカイブから必要なWALファイルを同時に取得します。この機能により、復旧時間を大幅に短縮できます。このシナリオを事前に計画し、ご使用の環境に合わせてこのパラメーターの値を調整してください。必要なときに違いを生みます。
オブジェクトストアからのPITR#
ベースバックアップを抽出した後、最新のWALまでのすべてのWALを再生するのではなく、任意の時点でWALの再生を停止するようにPostgreSQLに依頼できます。 PostgreSQLは、この技術を使用してPITRを達成します。 WALアーカイブの存在は必須です。
この例では、リカバリーの時間ベースターゲットを定義します。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: pgdgroup-restore
spec:
[...]
restore:
recoveryTarget:
targetTime: "2023-08-11 11:14:21.00000+02"
serverNames:
- pgdgroup-backup-1
- pgdgroup-backup-2
- pgdgroup-backup-3
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
重要
PITRでは、 リカバリーターゲット で説明するオプションを使用して、 targetTime リカバリターゲットを指定する必要があります。 targetTime または`targetLSN` を使用する場合、オペレーターは、そのターゲットより前に完了した最も近いバックアップを選択します。それ以外の場合、指定された`serverNames` 間で時系列で最後の使用可能なバックアップを選択します。
backupID を指定したオブジェクトストアからのリカバリー#
.spec.restore.recoveryTarget.backupID
オプションを使用すると、リカバリプロセスを開始するベースバックアップを指定できます。デフォルトでは、この値は空です。値を割り当てると、オペレーターはそのバックアップをリカバリのベースとして使用します。値はBarmanバックアップIDの形式である必要があります。
この例では、 pgdgroup-backup-1
PGDノードの特定のバックアップIDから新しいPGDグループを復旧します。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: pgdgroup-restore
spec:
[...]
restore:
recoveryTarget:
backupID: 20230824T133000
serverNames:
- pgdgroup-backup-1
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
重要
backupID が指定される場合、serverNames オプションで関連するPGDノードのみをリストし、他のものはリストしないようにしてください。
注釈
特定の`backupID` の定義は、次のリカバリターゲット targetName 、targetXID 、および`targetImmediate` のいずれかを使用する場合に特に必要です。このような場合、カタログ内の最後の使用可能なバックアップに問題がない場合を除き、 backupID を指定することが重要です。
volumeSnapshotからのリカバリー#
volumeSnapshotバックアップからpgdgroupを復旧することもできます。スタンザ
spec.restore.volumeSnapshots
は、volumeSnapshotsリストア候補の基準を定義するために使用されます。オペレーターは、候補の中から最新のvolumeSnapshotを透過的に選択します。
オペレーターには、volumeSnapshotに次のアノテーション/ラベルが必要です。これらの注釈/ラベルは、オペレーターがvolumeSnapshotを撮影した場合、自動的に追加されます。
注釈
k8s.enterprisedb.io/backupEndTimeは、最新のスナップショットを比較および選択するために使用されます。k8s.enterprisedb.io/pvcRoleは、volumeSnapshotのpvcRoleを表します。サポートされているロールには、PG_WALおよびPG_DATAが含まれます。
ラベル
k8s.enterprisedb.io/clusterは、 volumeSnapshotが取得されるノードを示します。WAL再生のオブジェクトストアでserverNameを取得するために重要です。k8s.enterprisedb.io/backupNameは、 volumeSnapshotのバックアップ名であり、バックアップでより多くのボリュームが定義されている場合に、 volumeSnapshotをグループ化するために使用されます。k8s.enterprisedb.io/tablespaceNameは、 volumeSnapshotロールがPG_TABLESPACEの場合、volumeSnapshotのテーブルスペース名を表します。
次の例は、volumeSnapshotsからの完全なリカバリーを示しています。
volumeSnapshotリカバリーの後、完全なリカバリーのWAL再生はターゲットサーバー
pgdgroup-backup-vs-1 になります。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: pgdgroup-restore
spec:
[...]
restore:
volumeSnapshots:
selector:
matchLabels:
"k8s.enterprisedb.io/cluster": pgdgroup-backup-vs-1
"k8s.pgd.enterprisedb.io/group": pgdgroup-backup-vs
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
詳細については、 EDB Postgres for Kubernetes recovery from volumeSnapshot objects を参照してください。
volumeSnapshotからのPITR#
オブジェクトストアからリカバリを行う場合と同じように、volumeSnapshotリカバリ中の特定の瞬間に、先行書き込みログWALの再生を停止するようにPostgreSQLに指示できます。
この例では、ボリュームスナップショットを使用したリカバリーの時間ベースのターゲットを設定する方法を示しています。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
metadata:
name: pgdgroup-restore
spec:
[...]
restore:
recoveryTarget:
targetTime: "2023-08-11 11:14:21.00000+02"
volumeSnapshots:
selector:
matchLabels:
"k8s.enterprisedb.io/cluster": pgdgroup-backup-vs-1
"k8s.pgd.enterprisedb.io/group": pgdgroup-backup-vs
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
リカバリーターゲット#
PITRを超えて、使用できる他の回復ターゲット基準があります。使用可能なすべてのリカバリターゲットの詳細については、 EDB Postgres for Kubernetesドキュメントの「 」を参照してください。