[openstack-dev] [Openstack-operators] [nova][cinder] Is there interest in an admin-api to refresh volume connection info?
Matt Riedemann
mriedemos at gmail.com
Fri Jun 9 04:15:31 UTC 2017
On 6/8/2017 1:39 PM, melanie witt wrote:
> On Thu, 8 Jun 2017 08:58:20 -0500, Matt Riedemann wrote:
>> Nova stores the output of the Cinder os-initialize_connection info API
>> in the Nova block_device_mappings table, and uses that later for
>> making volume connections.
>>
>> This data can get out of whack or need to be refreshed, like if your
>> ceph server IP changes, or you need to recycle some secret uuid for
>> your ceph cluster.
>>
>> I think the only ways to do this on the nova side today are via volume
>> detach/re-attach, reboot, migrations, etc - all of which, except live
>> migration, are disruptive to the running guest.
>
> I believe the only way to work around this currently is by doing a 'nova
> shelve' followed by a 'nova unshelve'. That will end up querying the
> connection_info from Cinder and update the block device mapping record
> for the instance. Maybe detach/re-attach would work too but I can't
> remember trying it.
Shelve has it's own fun set of problems like the fact it doesn't
terminate the connection to the volume backend on shelve. Maybe that's
not a problem for Ceph, I don't know. You do end up on another host
though potentially, and it's a full delete and spawn of the guest on
that other host. Definitely disruptive.
>
>> I've kicked around the idea of adding some sort of admin API interface
>> for refreshing the BDM.connection_info on-demand if needed by an
>> operator. Does anyone see value in this? Are operators doing stuff
>> like this already, but maybe via direct DB updates?
>>
>> We could have something in the compute API which calls down to the
>> compute for an instance and has it refresh the connection_info from
>> Cinder and updates the BDM table in the nova DB. It could be an admin
>> action API, or part of the os-server-external-events API, like what we
>> have for the 'network-changed' event sent from Neutron which nova uses
>> to refresh the network info cache.
>>
>> Other ideas or feedback here?
>
> We've discussed this a few times before and we were thinking it might be
> best to handle this transparently and just do a connection_info refresh
> + record update inline with the request flows that will end up reading
> connection_info from the block device mapping records. That way,
> operators won't have to intervene when connection_info changes.
The thing that sucks about this is if we're going to be refreshing
something that maybe rarely changes for every volume-related operation
on the instance. That seems like a lot of overhead to me (nova/cinder
API interactions, Cinder interactions to the volume backend,
nova-compute round trips to conductor and the DB to update the BDM
table, etc).
>
> At least in the case of Ceph, as long as a guest is running, it will
> continue to work fine if the monitor IPs or secrets change because it
> will continue to use its existing connection to the Ceph cluster. Things
> go wrong when an instance action such as resize, stop/start, or reboot
> is done because when the instance is taken offline and being brought
> back up, the stale connection_info is read from the block_device_mapping
> table and injected into the instance, and so it loses contact with the
> cluster. If we query Cinder and update the block_device_mapping record
> at the beginning of those actions, the instance will get the new
> connection_info.
>
> -melanie
>
>
--
Thanks,
Matt
More information about the OpenStack-dev
mailing list