mirror of
https://github.com/cloudnative-pg/plugin-barman-cloud.git
synced 2026-01-11 13:23:09 +01:00
Reorganised the content, with a different structure, added license information and instructions for spellchecking. Closes #290 Signed-off-by: Gabriele Bartolini <gabriele.bartolini@enterprisedb.com> Signed-off-by: Marco Nenciarini <marco.nenciarini@enterprisedb.com> Co-authored-by: Marco Nenciarini <marco.nenciarini@enterprisedb.com>
207 lines
5.1 KiB
Markdown
207 lines
5.1 KiB
Markdown
---
|
||
sidebar_position: 30
|
||
---
|
||
|
||
# Using the Barman Cloud Plugin
|
||
|
||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||
|
||
After [installing the plugin](installation.md) in the same namespace as the
|
||
CloudNativePG operator, enabling your PostgreSQL cluster to use the Barman
|
||
Cloud Plugin involves just a few steps:
|
||
|
||
- Defining the object store containing your WAL archive and base backups, using
|
||
your preferred [provider](object_stores.md)
|
||
- Instructing the Postgres cluster to use the Barman Cloud Plugin
|
||
|
||
From that moment, you’ll be able to issue on-demand backups or define a backup
|
||
schedule, as well as rely on the object store for recovery operations.
|
||
|
||
The rest of this page details each step, using MinIO as object store provider.
|
||
|
||
## Defining the `ObjectStore`
|
||
|
||
An `ObjectStore` resource must be created for each object store used in your
|
||
PostgreSQL architecture. Here's an example configuration using MinIO:
|
||
|
||
```yaml
|
||
apiVersion: barmancloud.cnpg.io/v1
|
||
kind: ObjectStore
|
||
metadata:
|
||
name: minio-store
|
||
spec:
|
||
configuration:
|
||
destinationPath: s3://backups/
|
||
endpointURL: http://minio:9000
|
||
s3Credentials:
|
||
accessKeyId:
|
||
name: minio
|
||
key: ACCESS_KEY_ID
|
||
secretAccessKey:
|
||
name: minio
|
||
key: ACCESS_SECRET_KEY
|
||
wal:
|
||
compression: gzip
|
||
```
|
||
|
||
The `.spec.configuration` schema follows the same format as the
|
||
[in-tree barman-cloud support](https://pkg.go.dev/github.com/cloudnative-pg/barman-cloud/pkg/api#BarmanObjectStoreConfiguration).
|
||
Refer to [the CloudNativePG documentation](https://cloudnative-pg.io/documentation/preview/backup_barmanobjectstore/)
|
||
for additional details.
|
||
|
||
## Configuring WAL Archiving
|
||
|
||
Once the `ObjectStore` is defined, you can configure your PostgreSQL cluster
|
||
to archive WALs by referencing the store in the `.spec.plugins` section:
|
||
|
||
```yaml
|
||
apiVersion: postgresql.cnpg.io/v1
|
||
kind: Cluster
|
||
metadata:
|
||
name: cluster-example
|
||
spec:
|
||
instances: 3
|
||
imagePullPolicy: Always
|
||
plugins:
|
||
- name: barman-cloud.cloudnative-pg.io
|
||
isWALArchiver: true
|
||
parameters:
|
||
barmanObjectName: minio-store
|
||
storage:
|
||
size: 1Gi
|
||
```
|
||
|
||
This configuration enables both WAL archiving and data directory backups.
|
||
|
||
## Performing a Base Backup
|
||
|
||
Once WAL archiving is enabled, the cluster is ready for backups. To issue an
|
||
on-demand backup, use the following configuration with the plugin method:
|
||
|
||
```yaml
|
||
apiVersion: postgresql.cnpg.io/v1
|
||
kind: Backup
|
||
metadata:
|
||
name: backup-example
|
||
spec:
|
||
cluster:
|
||
name: cluster-example
|
||
method: plugin
|
||
pluginConfiguration:
|
||
name: barman-cloud.cloudnative-pg.io
|
||
```
|
||
|
||
:::note
|
||
You can apply the same concept to the `ScheduledBackup` resource.
|
||
:::
|
||
|
||
## Restoring a Cluster
|
||
|
||
To restore a cluster from an object store, create a new `Cluster` resource that
|
||
references the store containing the backup. Below is an example configuration:
|
||
|
||
```yaml
|
||
apiVersion: postgresql.cnpg.io/v1
|
||
kind: Cluster
|
||
metadata:
|
||
name: cluster-restore
|
||
spec:
|
||
instances: 3
|
||
imagePullPolicy: IfNotPresent
|
||
bootstrap:
|
||
recovery:
|
||
source: source
|
||
externalClusters:
|
||
- name: source
|
||
plugin:
|
||
name: barman-cloud.cloudnative-pg.io
|
||
parameters:
|
||
barmanObjectName: minio-store
|
||
serverName: cluster-example
|
||
storage:
|
||
size: 1Gi
|
||
```
|
||
|
||
:::important
|
||
The above configuration does **not** enable WAL archiving for the restored cluster.
|
||
:::
|
||
|
||
To enable WAL archiving for the restored cluster, include the `.spec.plugins`
|
||
section alongside the `externalClusters.plugin` section, as shown below:
|
||
|
||
```yaml
|
||
apiVersion: postgresql.cnpg.io/v1
|
||
kind: Cluster
|
||
metadata:
|
||
name: cluster-restore
|
||
spec:
|
||
instances: 3
|
||
imagePullPolicy: IfNotPresent
|
||
bootstrap:
|
||
recovery:
|
||
source: source
|
||
plugins:
|
||
- name: barman-cloud.cloudnative-pg.io
|
||
isWALArchiver: true
|
||
parameters:
|
||
# Backup Object Store (push, read-write)
|
||
barmanObjectName: minio-store-bis
|
||
externalClusters:
|
||
- name: source
|
||
plugin:
|
||
name: barman-cloud.cloudnative-pg.io
|
||
parameters:
|
||
# Recovery Object Store (pull, read-only)
|
||
barmanObjectName: minio-store
|
||
serverName: cluster-example
|
||
storage:
|
||
size: 1Gi
|
||
```
|
||
|
||
The same object store may be used for both transaction log archiving and
|
||
restoring a cluster, or you can configure separate stores for these purposes.
|
||
|
||
## Configuring Replica Clusters
|
||
|
||
You can set up a distributed topology by combining the previously defined
|
||
configurations with the `.spec.replica` section. Below is an example of how to
|
||
define a replica cluster:
|
||
|
||
```yaml
|
||
apiVersion: postgresql.cnpg.io/v1
|
||
kind: Cluster
|
||
metadata:
|
||
name: cluster-dc-a
|
||
spec:
|
||
instances: 3
|
||
primaryUpdateStrategy: unsupervised
|
||
|
||
storage:
|
||
storageClass: csi-hostpath-sc
|
||
size: 1Gi
|
||
|
||
plugins:
|
||
- name: barman-cloud.cloudnative-pg.io
|
||
isWALArchiver: true
|
||
parameters:
|
||
barmanObjectName: minio-store-a
|
||
|
||
replica:
|
||
self: cluster-dc-a
|
||
primary: cluster-dc-a
|
||
source: cluster-dc-b
|
||
|
||
externalClusters:
|
||
- name: cluster-dc-a
|
||
plugin:
|
||
name: barman-cloud.cloudnative-pg.io
|
||
parameters:
|
||
barmanObjectName: minio-store-a
|
||
|
||
- name: cluster-dc-b
|
||
plugin:
|
||
name: barman-cloud.cloudnative-pg.io
|
||
parameters:
|
||
barmanObjectName: minio-store-b
|
||
```
|