You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* K8SPSMDB-1219: PBM multi storage support
Operator always supported multiple storages but didn't have native
support for having multiple backup storages until v2.6.0. In operator we
were reconfiguring PBM every time user selects a storage for their
backups/restores different than the previous storage. This was causing
long wait periods esp. in storages with lots of backups due to resync
operation.
Another limitation was forcing users to have only 1 backup storage if
they want to enable point-in-time-recovery. In case of multiple
storages, PBM would upload oplog chunks to whatever storage is last used
by a backup/restore and this would make consistent recovery impossible.
PBM v2.6.0 added native support for multiple storages and these changes
introduce it to our operator:
* User can have one main storage in PBM configuration. Any other
storages can be added as profiles.
Main storage can be found in:
```
kubectl exec cluster1-rs0-0 -c backup-agent -- pbm config
```
This commit introduces a new field `main` in storage spec:
```
storages:
s3-us-west:
main: true
type: s3
s3:
bucket: operator-testing
credentialsSecret: cluster1-s3-secrets
region: us-west-2
````
If user only has 1 storage configured in `cr.yaml`, operator will
automatically use it as main storage. If more than 1 storage is
configured, one of them must have `main: true`. User can't have more
than 1 storage with `main: true`.
If user changes main storage in cr.yaml, operator will configure PBM
with the new storage and start resync.
Any other storage in `cr.yaml` will be added to PBM as a profile.
User can see profiles using cli:
```
kubectl exec cluster1-rs0-0 -c backup-agent -- pbm profile list
```
When user adds a new profile to `cr.yaml`, operator will add it to PBM
but won't start resync.
**`pbm config --force-resync` only start resync for the main storage.**
To manually resync a profile:
```
kubectl exec cluster1-rs0-0 -c backup-agent -- pbm profile sync <storage-name>
```
If user starts a restore using a backup in a storage configured as
profile, operator will start resync operation for profile and block
restore until resync finishes.
Note: Profiles are also called external storages in PBM documentation.
If user has multiple storages in `cr.yaml` and changes main storage
between them, operator:
1. configures PBM with the new main storage.
2. adds the old main as a profile.
2. deletes profile for the new main storage.
If user configures `backupSource` in backups/restores:
* if `cr.yaml` has no storages configured, operator configures PBM with
storage data in `backupSource` field. This storage will effectively be
the main storage until user adds a storage to `cr.yaml`. After a
storage is configured PBM configuration will be overwritten and
`backupSource` storage will be gone.
* if `cr.yaml` has a storage configured, operator adds `backupSource`
storage as a profile.
* Oplog chunks will be only be uploaded to main storage.
User can use any backup as base backup for point-in-time-recovery.
* Incremental backup chains all need to be stored in the same storage.
TBD after #1836 merged.
---
Other significant changes in operator behavior:
* Operator now configures automatically configures PBM on a fresh
cluster.
Before this changes, PBM was not configured until user starts a
backup/restore after deploying a fresh cluster. Now, PBM will directly
configured with main storage in `cr.yaml` and resync will be started
in the background.
There's a new field in `PerconaServerMongoDB` status:
`backupConfigHash`. Operator will maintain hash of the current PBM
configuration and reconfigures PBM if hash is changed. Fields in
`spec.backup.pitr` are excluded from hash calculation, they're handled
separately.
* If `PerconaServerMongoDB` is annotated with `percona.com/resync-pbm=true`,
operator will start resync operation both for main storage and
profiles. Resync for profiles are started with the equivalent of `pbm
profile sync --all`. These resync operations will be run in the
background and will not block the reconciliation.
* If a backup that has `percona.com/delete-backup` finalizer is deleted,
operator will only delete oplogs chunks if it's in main storage.
* fix users
* fix repeatedly sending backup commands
* fix users
* address review comments
* assert err in main storage unit test
* don't use break labels
---------
Co-authored-by: Viacheslav Sarzhan <[email protected]>
| egrep -v 'I NETWORK|W NETWORK|F NETWORK|Error saving history file|Percona Server for MongoDB|connecting to:|Unable to reach primary for set|Implicit session:|versions do not match|Error saving history file:' \
0 commit comments