Migrating VMs with attached RBDs
From the title, this is obviously a very common scenario that you may want to do. One thing that we rarely think about though is “backends” for the attached volumes when we create volumes.
When you create a volume, the volume is created on a cinder backend and kept attached to this backend until it’s deleted , or migrated to another backend. The backends are defined in cinder configuration and are provided by your host(s) running the cinder-volume service. To find your backends, run the following command
cinder get-pools
When you attach the volume to a VM, the volume keeps its backend. It relies on this backend to do any operations to that volume. This includes migrating the VM from a host to another.
You may run into a scenario where you get this error when trying to migrate a VM with attached RBD
CinderConnectionFailed: Connection to cinder host failed: Unable to establish connection to
But when you go and check, Cinder is working correctly. You are able to create new volumes and attach them to instances. But a particular VM is unable to migrate. You may find also you’r unable to snapshot the volume attached to the VM. The thing to check for here is the RBD backend of the volume
You can find this using
cinder show VOLUME_ID
this will show you alot of details on the volume including the following attribute
| os-vol-host-attr:host | HOSTNAME@ceph#RBD |
HOSTNAME will likely be “one” of your controllers. You will need to go and check that cinder-volume service is running correctly on that controller. If it’s down, you can’t operate that volume for anything (snapshots, attach/detach and migrate)
If you’ve lost your controller forever, or you were testing a new backend that no longer exists, then you might want to migrate the volume from the dead backend. This is detailed in the following manual
https://docs.openstack.org/cinder/pike/admin/blockstorage-volume-migration.html
Happy VM migrations !
Leave a Reply