The cinder-backups service provides a powerful API to manage backups for cinder volumes.
Example commands using the openstack CLI, backup an offline volume:
root@cloudcontrol2001-dev:~# openstack volume list --all-projects +--------------------------------------+--------------------------------------------+-----------+------+---------------------------------------------------------------+ | ID | Name | Status | Size | Attached to | +--------------------------------------+--------------------------------------------+-----------+------+---------------------------------------------------------------+ | 74bf4553-c92e-4fd5-88ef-33fb789ab07a | tlsvol | available | 3 | | | bcde703e-1ad9-40c5-badf-5f5eeae18508 | trove-58ec6fd7-0822-440b-beb5-2581e0edf98f | in-use | 2 | Attached to 3e2b42b3-7b92-4805-9be2-00b2ab5d349b on /dev/vdb | | 468cf670-3f23-483b-9309-2f98d289c5dc | bleh | available | 1 | | | 4a4f04b1-7c27-4d30-9446-479390b29526 | ussurivol | available | 3 | | | 3c82177d-4272-4d63-bef0-edfa3f4a38a5 | | available | 20 | | | fbecb639-216c-4d92-a91f-ace4b87e2b0b | testvolume | available | 8 | | +--------------------------------------+--------------------------------------------+-----------+------+---------------------------------------------------------------+ root@cloudcontrol2001-dev:~# openstack volume backup create 468cf670-3f23-483b-9309-2f98d289c5dc --name "test backup" +-------+--------------------------------------+ | Field | Value | +-------+--------------------------------------+ | id | dd42d300-e1c4-442c-9c6f-fae352e6df9c | | name | test backup | +-------+--------------------------------------+ root@cloudcontrol2001-dev:~# openstack volume backup list +--------------------------------------+-------------+-------------+----------+------+ | ID | Name | Description | Status | Size | +--------------------------------------+-------------+-------------+----------+------+ | dd42d300-e1c4-442c-9c6f-fae352e6df9c | test backup | None | creating | 1 | +--------------------------------------+-------------+-------------+----------+------+ root@cloudcontrol2001-dev:~# openstack volume backup list +--------------------------------------+-------------+-------------+-----------+------+ | ID | Name | Description | Status | Size | +--------------------------------------+-------------+-------------+-----------+------+ | dd42d300-e1c4-442c-9c6f-fae352e6df9c | test backup | None | available | 1 | +--------------------------------------+-------------+-------------+-----------+------+ root@cloudcontrol2001-dev:~# openstack volume backup show dd42d300-e1c4-442c-9c6f-fae352e6df9c +-----------------------+--------------------------------------------+ | Field | Value | +-----------------------+--------------------------------------------+ | availability_zone | None | | container | dd/42/dd42d300-e1c4-442c-9c6f-fae352e6df9c | | created_at | 2021-10-27T10:57:59.000000 | | data_timestamp | 2021-10-27T10:57:59.000000 | | description | None | | fail_reason | None | | has_dependent_backups | False | | id | dd42d300-e1c4-442c-9c6f-fae352e6df9c | | is_incremental | False | | name | test backup | | object_count | 1 | | size | 1 | | snapshot_id | None | | status | available | | updated_at | 2021-10-27T10:58:21.000000 | | volume_id | 468cf670-3f23-483b-9309-2f98d289c5dc | +-----------------------+--------------------------------------------+
Example commands to create a backup from a volume snapshot:
root@cloudcontrol2001-dev:~# openstack volume snapshot create --volume bcde703e-1ad9-40c5-badf-5f5eeae18508 trove-volume-snapshot --force +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | created_at | 2021-10-27T11:24:17.089371 | | description | None | | id | 0d223da6-b5ff-4cb2-a808-3fa089dd49dc | | name | trove-volume-snapshot | | properties | | | size | 2 | | status | creating | | updated_at | None | | volume_id | bcde703e-1ad9-40c5-badf-5f5eeae18508 | +-------------+--------------------------------------+ root@cloudcontrol2001-dev:~# openstack volume snapshot list +--------------------------------------+-----------------------+-------------+-----------+------+ | ID | Name | Description | Status | Size | +--------------------------------------+-----------------------+-------------+-----------+------+ | 0d223da6-b5ff-4cb2-a808-3fa089dd49dc | trove-volume-snapshot | None | available | 2 | +--------------------------------------+-----------------------+-------------+-----------+------+ root@cloudcontrol2001-dev:~# openstack volume backup create --snapshot 0d223da6-b5ff-4cb2-a808-3fa089dd49dc --name "trove-volume-snapshot-backup" bcde703e-1ad9-40c5-badf-5f5eeae18508 +-------+--------------------------------------+ | Field | Value | +-------+--------------------------------------+ | id | 10f85d0a-c403-4352-bcda-b3d4176d2218 | | name | trove-volume-snapshot-backup | +-------+--------------------------------------+ root@cloudcontrol2001-dev:~# openstack volume backup list +--------------------------------------+------------------------------+-------------+-----------+------+ | ID | Name | Description | Status | Size | +--------------------------------------+------------------------------+-------------+-----------+------+ | 10f85d0a-c403-4352-bcda-b3d4176d2218 | trove-volume-snapshot-backup | None | available | 2 | | 74090b3d-f117-4d05-9e08-826d1b3c7e89 | test backup | None | available | 20 | | dd42d300-e1c4-442c-9c6f-fae352e6df9c | test backup | None | available | 1 | +--------------------------------------+------------------------------+-------------+-----------+------+
Example commands to restore a backup:
root@cloudcontrol2001-dev:~# openstack volume backup show dd42d300-e1c4-442c-9c6f-fae352e6df9c +-----------------------+--------------------------------------------+ | Field | Value | +-----------------------+--------------------------------------------+ | availability_zone | None | | container | dd/42/dd42d300-e1c4-442c-9c6f-fae352e6df9c | | created_at | 2021-10-27T10:57:59.000000 | | data_timestamp | 2021-10-27T10:57:59.000000 | | description | None | | fail_reason | None | | has_dependent_backups | False | | id | dd42d300-e1c4-442c-9c6f-fae352e6df9c | | is_incremental | False | | name | test backup | | object_count | 1 | | size | 1 | | snapshot_id | None | | status | available | | updated_at | 2021-10-27T10:58:21.000000 | | volume_id | 468cf670-3f23-483b-9309-2f98d289c5dc | +-----------------------+--------------------------------------------+ root@cloudcontrol2001-dev:~# openstack volume backup restore dd42d300-e1c4-442c-9c6f-fae352e6df9c 468cf670-3f23-483b-9309-2f98d289c5dc +-------------+--------------------------------------+ | Field | Value | +-------------+--------------------------------------+ | backup_id | dd42d300-e1c4-442c-9c6f-fae352e6df9c | | volume_id | 468cf670-3f23-483b-9309-2f98d289c5dc | | volume_name | bleh | +-------------+--------------------------------------+
PROPOSAL
Create a script wmcs-cinder-volume-backup that does the following:
- takes a cinder volume id as argument
- creates a snapshot of the volume
- creates a backup of the snapshot
Create a script wmcs-cinder-volume-restore that does the following:
- takes both a cinder volume id as argument, and a backup id
- restores the backup to the volume (or to a snapshot?) TODO: figure this out
Create a daemon wmcs-cinder-backup-manager that does the following:
- reads a yaml config file. This includes a list of volumes and potentially max quota/policy over copies to store
- does proper quota validation
- runs wmcs-cinder-volume-backup as required
The daemon can be run on one of the cloudcontrol nodes per deployment. The daemon yaml config file can be managed using puppet.