PostgreSQL is min of meer de defacto standaard voor het ondersteunen van OLTP workloads als je opensource tooling wilt gebruiken. Nu kan je PostgreSQL direct installeren op een VM of server maar je kan het tegenwoordig ook prima op Kubernetes draaien en daarmee een gedeelte van het instellen van read-replicas en failover van primaire databases automatiseren.
Hierbij is het belangrijk dat je ook backups buiten het kubernetes cluster hebt mocht het cluster falen of de onderliggende storage volumes problemen vertonen. Een methode voor dit alles is CloudNativePG gebruiken en de bijbehorende backup en Write-Ahead Logging (WAL) files weg te schrijven naar een extern S3 storage account.
Online zijn hier niet gemakkelijk volledig ingevulde voorbeelden te vinden vandaar bij deze.
De CNPG backup config voor WAL files naar Cloudflare:
bash
Backup configuration (optional)
backup:
retentionPolicy: 30d
barmanObjectStore:
endpointURL: https://xxx.r2.cloudflarestorage.com/postgres
destinationPath: "s3://postgres/"
s3Credentials:
accessKeyId:
name: cnpg-s3-creds
key: S3_ACCESS_KEY
secretAccessKey:
name: cnpg-s3-creds
key: S3_ACCESS_SECRET
wal:
compression: gzip
maxParallel: 8
en de backup zelf richting cloudflare:
bash
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: backup-shared-postgres
namespace: cnpg
spec:
schedule: "0 0 0 *" # every day at midnight
backupOwnerReference: self
target: "prefer-standby"
method: "barmanObjectStore"
immediate: true
suspend: false
cluster:
name: shared-postgres
of richting Hetzner object storage:
bash
Backup configuration (optional)
backup:
retentionPolicy: 30d
barmanObjectStore:
endpointURL: https://nbg1.your-objectstorage.com
destinationPath: "s3:///postgres/shared-postgres/"
s3Credentials:
accessKeyId:
name: cnpg-s3-creds
key: ACCESS_KEY
secretAccessKey:
name: cnpg-s3-creds
key: ACCESS_SECRET
wal:
compression: gzip
maxParallel: 8
en zo kan je dit ook doen voor bijvoorbeeld Scaleway als S3 provider:
bash
Backup configuration (optional)
backup:
retentionPolicy: 30d
barmanObjectStore:
endpointURL: https://s3.nl-ams.scw.cloud
destinationPath: s3:///cloudnativepg/
s3Credentials:
accessKeyId:
name: cnpg-secret
key: AWS_ACCESS_KEY_ID
secretAccessKey:
name: cnpg-secret
key: AWS_SECRET_ACCESS_KEY
region:
name: cnpg-secret
key: AWS_S3_REGION_NAME
wal:
compression: gzip
maxParallel: 8
In die overige gevallen blijft de backup zelf identiek want die gebruikt de settings van het cluster. Met deze backups is het ook mogelijk om een nieuw cluster te starten dat zelf de data inlaadt. Handig voor een herstart op een nieuw cluster of het draaien van wat performance tests of een database met dezelfde hoeveelheid data als je productie omgeving.
Zie verder vooral ook: https://cloudnative-pg.io/documentation/1.25/backup_barmanobjectstore/
Terug naar thuis