Backup on object stores#
EDB CloudNativePG Global Cluster supports online/hot backup of PGD clusters through physical backup and WAL archiving on an object store. This means that the database is always up (no downtime required) and that point-in-time recovery (PITR) is available.
Common object stores#
Multiple object stores are supported, such as AWS S3, Microsoft Azure Blob Storage, Google Cloud Storage, MinIO Gateway, or any S3-compatible provider. Given that EDB CloudNativePG Global Cluster configures the connection with object stores by relying on EDB CloudNativePG Cluster, see the ` EDB CloudNativePG Cluster common object stores for backups <https://www.enterprisedb.com/docs/postgres_for_kubernetes/latest/object_stores/>`_
documentation for more information.
Important
The EDB CloudNativePG Cluster documentation's Cloud Provider configuration section is available at spec.backup.barmanObjectStore . In EDB CloudNativePG Global Cluster examples, the object store section is at a different path: spec.backup.configuration.barmanObjectStore .
WAL archive#
WAL archiving is the process that sends WAL files to the object storage, and it’s essential to execute online/hot backups or PITR. In EDB CloudNativePG Global Cluster, each PGD node is set up to archive WAL files in the object store independently.
The WAL archive is defined in the PGD Group
spec.backup.configuration.barmanObjectStore stanza, and is enabled
as soon as a destination path and cloud credentials are set. You can
choose to compress WAL files before they’re uploaded and you can encrypt
them. You can also enable parallel WAL archiving:
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
backup:
configuration:
barmanObjectStore:
[...]
wal:
compression: gzip
encryption: AES256
maxParallel: 8
For more information, see the :ref:` EDB CloudNativePG Cluster WAL archiving <Backup on object stores>` documentation.
Scheduled backups#
Scheduled backups are the recommended way to configure your backup
strategy in EDB CloudNativePG Global Cluster. When the PGD group
spec.backup.configuration.barmanObjectStore and
.spec.backup.schedulers[].schedule stanza is configured, the
operator selects one of the PGD data nodes as the elected backup node in
which it creates a Scheduled Backup resource.
The .spec.backup.schedulers[].method field allows you to define the
scheduled backup method. Two backup methods are supported:
volumeSnapshotbarmanObjectStore(the default)
You can define more than one scheduler, but each method can be used by only one scheduler. That is, two schedulers aren’t allowed to use the same method.
For object store backups, with the default barmanObjectStore method,
use the stanza spec.backup.configuration.barmanObjectStore to define
the object store information for both backup and WAL archiving. For more
information, see Backup on object stores in the EDB CloudNativePG Cluster
documentation.
To perform volumeSnapshot backups, you can select the volumeSnapshot
method. Use the stanza
spec.backup.configuration.barmanObjectStore.volumeSnapshot to define
the volumeSnapshot configuration. For more information, see
Backup on volume snapshots in the EDB CloudNativePG Cluster documentation.
This example shows how to use the volumeSnapshot method for backup.
WAL archiving is still done onto the Barman object store.
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
For a comparison of these two backup methods, see Object stores or volume snapshots in the EDB CloudNativePG Cluster documentation.
The .spec.backup.schedulers[].schedule field allows you to define a
cron schedule, expressed in the Go `cron package format <https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format>`_ :
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
backup:
schedulers:
- method: barmanObjectStore
schedule: "0 0 0 * * *"
backupOwnerReference: self
suspend: false
immediate: true
If necessary, you can suspend scheduled backups by setting
.spec.backup.schedulers[].suspend to true . This setting
prevents new backups from being scheduled.
If you want to execute a backup as soon as the ScheduledBackup
resource is created, set .spec.backup.schedulers[].immediate to
true .
.spec.backupOwnerReference indicates the ownerReference to use
in the created backup resources. The options are:
none — Doesn’t set an owner reference for created backup objects.
self — Sets the
ScheduledBackupobject as owner of the backup.cluster — Sets the cluster as owner of the backup.
Warning
The .spec.backup.cron field is deprecated. Use .spec.backup.schedulers instead. While you can still use .spec.backup.cron , you can't use it at the same time as .spec.backup.schedulers .
Note
The EDB CloudNativePG Cluster ScheduledBackup object contains the cluster option to specify the cluster to back up. This option currently isn't supported by EDB CloudNativePG Global Cluster and is ignored if specified.
If an elected backup node is deleted, the operator transparently elects
a new backup node and reconciles the ScheduledBackup resource
accordingly.
Retention policies#
EDB CloudNativePG Global Cluster can manage the automated deletion of backup files from the backup object store using retention policies based on the recovery window. This process also takes care of removing unused WAL files and WALs associated with backups that are scheduled for deletion.
You can define your backups with a retention policy of 30 days:
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroup
[...]
spec:
backup:
configuration:
retentionPolicy: "30d"
For more information, see the :ref:` EDB CloudNativePG Cluster retention policies <Backup on object stores>` in the EDB CloudNativePG Cluster documentation.
Important
Currently, the retention policy is applied only for the elected Backup Node backups and WAL files. Given that each other PGD node also archives its own WALs independently, it's your responsibility to manage the lifecycle of those WAL files, for example by leveraging the object storage data retention policy. Also, if you have an object storage data retention policy set up on every PGD node directory, make sure it's not overlapping or interfering with the retention policy managed by the operator.
Compression algorithms#
Backups and WAL files are uncompressed by default. However, multiple compression algorithms are supported. For more information, see the :ref:` EDB CloudNativePG Cluster compression algorithms <Backup on object stores>` documentation.
Tagging of backup objects#
It’s possible to specify tags as key-value pairs for the backup objects, namely base backups, WAL files, and history files. For more information, see the EDB CloudNativePG Cluster documentation about tagging of backup objects .
On-demand backups of a PGD node#
A PGD node is represented as single-instance EDB CloudNativePG Cluster
Cluster object. As such, if you need to, it’s possible to request an
on-demand backup of a specific PGD node by creating a EDB CloudNativePG
Cluster Backup resource. To do that, see :ref:` EDB CloudNativePG Cluster on-demand backups <Backup on object stores>` in the EDB
CloudNativePG Cluster documentation.
Hint
You can retrieve the list of EDB CloudNativePG Cluster clusters that make up your PGD group by running kubectl get cluster -l k8s.pgd.enterprisedb.io/group=my-pgd-group -n my-namespace .