Pre-requisite: EWC - OpenStack Command-Line client
Foreword
OpenStack recognises two types of resources on their clouds:
- Instances, which correspond to the servers or VMs. These can be image-backed, if the VM was booted from an image, or volume-backed, if it was booted from a volume. Instances are managed via the OS Glance service.
- Volumes, which correspond to storage disks which can be attached to VMs. Root disk are a special case as VMs are booted from them. Volumes are managed by the OS Cinder service.
Before restoring resources in OpenStack, it's important to understand the difference between two primary methods:
- Snapshots: These are delta copies of the root volumes attached to the VM. Snapshots are not full copies and rely on the original volume for restoration, so they are mostly useful for accident recovery. They're managed through the Cinder service.
- Backups: These are point-in-time copies of the volumes attached to VMs. Backups preserve the data within a volume and can be used to restore the volume to the exact state it was in when backed up. They're ideal for data recovery and are also managed through the Cinder service.
Choose the appropriate method based on your recovery needs: snapshots for accident prevention and recovery or backups for full data security and recovery.
Furthermore, there are two different restoration methods, according to whether the restoration replaces an existing resource or not:
- In place restoration: the snapshot or backup replaces an existing resource. This is typically useful when data in the original resource has been corrupted and it is necessary to perform a reset to a past state, as stored in the snapshot or backup.
- New copy restoration: a new resource is created with the snapshot or backup as its base. This method is useful to copy or migrate resources as well as to recover from catastrophic failures.
Restoration of VMs
Instance Snapshots
Image-backed instances
Volume-backed instances
Instance Backups
Image-backed instances
Volume-backed instances
Restoration of Volumes
Volume Snapshots
In-place restoration of volume snapshots can be performed with OpenStack by replacing the root disk of an existing VM with an snapshot.
openstack volume revert <snapshot>
where: <snapshot> : name or id of the snapshot to restore. Since in-place restoration replaces an existing volume, it is necessary to detach the volume from the instance first and reattach it after the restoration. One can detach a volume from an instance with
openstack server remove volume <server> <volume>
with <server> and <volume> the name or id of the instance or volume, respectively. And it can be reattached after restoration with
openstack server add volume <server> <volume>
The instance (server) retains the same configuration as before, as only the underlying disk has been replaced by the snapshot.
To restore a volume snapshot to a new volume, a new volume must be created, with the snapshot as the source. This can be done with the command
openstack volume create --snapshot <snapshot> <volume_name>
with <snapshot> the name or id of the snapshot to restore, and <volume_name> the name of the new volume.
After restoring the snapshot to a new volume, a new instance must be launched with the volume as the root.
openstack server create --volume <volume> --flavor <flavor> <instance_name>
where <volume> is the name or id of the volume just created, <instance_name> the name for the new VM, and <flavor> the flavor of the instance. The configuration details of the VM, such as flavor, networks, etc, can be chosen at the time of restoration or recovered from a previous backup if there was stored, as detailed in EWC OpenStack API access - How to create backups from VMs.
Volume Backups
The restoration of a volume backup can also be done in-place, or by creating a new volume. Irrespective of the method, one can restore a volume backup with the command
openstack volume backup restore [--force] <backup> <volume>
where:
--force: optional argument to force a restoration of an existing volume.<snapshot>: name or id of the backup to restore<volume>: name or id of the existing volume to replace, or the name of a new volume to create
In the case of an in-place restoration, it is necessary to detach the volume first and reattach it after the restoration. Detaching and reattaching the volume to an instance can be done in the same way as for Volume Snapshots.
As above, if the restoration takes place to a new volume, a new instance must be launched with that volume as its root.
Common use cases
These is a list of common configurations of VMs and volumes in the cloud and the recommened procedure to restoring them
Single VM
The simplest way to restore a single VM is to restore the root volume of the VM in-place from a snapshot or backup. To create a copy of the VM, one can restore the snapshot or backup to a new volume, and then launch an instance from that root volume.
Single VM and attached volume(s)
To restore a single VM and it's attached volumes, one must restore the root volume and all other volumes separately, either from snapshots or backups. If restoring the volumes in place, it is necessary to detach all volumes from the VM beforehand, and reattach it later. And if restoring the volumes to new ones, specially the root volume of the VM, a new instance must be launched from the new root volume, and then the rest of the volumes must be attached to it.
Single VM and multiple networks and/or security groups
The network configuration and security groups of VMs are not recorded when backing up the instance. If one is interested in restoring this information, and has stored these values somehwere, e.g. by following the instructions in EWC - How to create backups from VMs, these can be restored simply by adding them to the VM as
openstack server add network <instance> <network> openstack server add security group <instance> <security_group>
for each <network> and <security_group> that one wants to restore to the <instance> .
Single VM and SFS
Shared File Services (SFS) cannot be backed up as they are distributed storage solutions that do not live in the same cloud. Thefore one can restore the VM as above, and then mount the SFS into the new VM. Remember that if restoring the VM in-place, the SFS device must be unmounted before restoring it.
Multiple VMs, volumes, etc
In order to restore multiple VMs at once, with any configuration, one can repeat the steps laid out above multiple times in succession. In case of in-place restorations, make sure to detach all the volumes that are to be restored.
An alternative to repeating all the steps here multiple times is to use the automation script below, where one can set up a configuration file detailing all the VMs and volumes to be restored, and run the script a single time.
Restore automation
The multi-step procedure for restoring VMs can been performed in a single step using the script found in the repository
under the items/openstack_backups directory. A simple configuration YAML file detailing the VMs and volumes to restore, as well as whether to restore in-place or as a new resource, can be used to run the script. Instructions on how to run the script can be found in the README file in the repository itself.