[Kimchi-devel] [RFC] Live migration backend + API
Aline Manera
alinefm at linux.vnet.ibm.com
Fri Oct 16 18:51:32 UTC 2015
On 16/10/2015 08:40, Daniel Henrique Barboza wrote:
>
>
> On 10/16/2015 08:15 AM, Walter Niklaus wrote:
>>
>>
>> On 15.10.2015 21:18, Daniel Henrique Barboza wrote:
>>> Hi,
>>>
>>> Live migration will be one of the new features for Kimchi 2.0 and
>>> I've been investigating it for a week or so. This is how I'm
>>> planning to implement it:
>>>
>>> - API:
>>>
>>> The API will be similar to the API of the 'cloneGuest', but with
>>> extra parameters:
>>>
>>> url : 'plugins/kimchi/vms/' +'vm_name' + "/migrate"
>>> type: 'POST'
>>> parameters:
>>> * destination: the IP address of the destination host
>>> * (optional, not sure if applicable) password: the password to log
>>> in the destination via ssh tunnel
>>>
>>> In my opinion we can start with a 'migrate' button in the options of
>>> the VM, which will open up a new window to insert the destination IP
>>> address. This of course thinking about the old UI. I believe we can
>>> do whatever it is done with the 'Clone' function in the case of the
>>> new UI, with this extra window.
>>>
>>> As the migration might take a while, we'll need a progress bar or
>>> something to demonstrate that the progress is still ongoing. Again,
>>> the same thing as clone does :)
>> This progress bar may be a little bit tricky because depending on the
>> workload of the VM the amount of dirty pages could increase again at
>> a certain point. But from a user point of view I really would like to
>> get the reality, meaning to see regression as well in order to give
>> me the chance to react.
>
> Note that by 'progress bar' I mean an UI indicator that will simply
> show that the process is still running. I do not believe that the API
> will provide us with a progress status like "27% completed".
>
>>>
>>> - backend and core functionality:
>>>
>>> This is where it gets tricky. Libvirt has *a lot* of ways to do a
>>> live migration between hosts. My approach, at least for this first
>>> attempt, will be focusing in a single way, implement it, stabilize
>>> it and then extend it to the other migration types, if necessary.
>>>
>> Makes a lot of sense.
>>> Same thing goes for the preset up. The only way I managed to do a
>>> live migration was with a NFS storage pool in both hosts, same name
>>> and same NFS server. This shared storage is necessary because the
>>> live migration will *not* copy the disks of the VM, just the RAM
>>> memory. I had to share ssh keys between the hosts to allow for
>>> password less ssh sessions.
>>>
>> From what I remember there is a validation step before starting
>> migration where libvirt is checking if the resources of the VM are
>> available on the remote host as well. I suspect the check is that
>> simple to define and start the domain in listen mode on the remote
>> host by using the domain xml from the target. And I guess this one
>> would already fail if the artifacts specified in the domain xml are
>> not present.
>
> At first the validations we're going to do will be simple (check if
> the VM is already being migrated, check if it's the same
> hypervisor/architecture at source and destination). We can add more
> validations when it's implemented, like trying to see if the
> destination host has the resources (pci devices, available RAM) to
> complete the migration.
>
>> Live migration has an option to perform volume migration as well (
>> it's "copy-storage-all" in virsh I think), but I have never tried it
>> out.
>
> Unfortunately this migration type was deprecated starting in RHEL 7:
>
> https://access.redhat.com/solutions/60034
>
> "Live migration with non-shared storage in RHEL6/RHEV3.* is a
> deprecated functionality, but under certain circunstances and with
> some limitations, it works fine. In RHEL7, this feature has been
> disabled."
>
>
>>
>> Are you planning to support also FCP attached storage ? I guess this
>> one could work:
>> - if both Hosts have access to the LUN
>> - the disk-id used in the domain definition is the same on source
>> and target:
>> - for example by using the multipathing id like
>> 36005076802810d504800000000002c1d
>> - because sda on source could point to a different disk as
>> sda on target.
>
> Any shared storage will do. I gave the NFS example because it was the
> setup I've tested, but
> I am sure it will work with LUN/iSCSI or other types.
>
> The idea is that the VM disk volumes must be accessed by the same path
> in both source and destination. The way that this is implemented it's
> up to the user.
>
>>> At first, I want to relieve this first implementation from this pre
>>> config, which will have to be done entirely by the user. If
>>> everything goes well, I can add a few automation in this process
>>> inside the backend before the 2.0 launch.
>>>
>>> Kimchi internals will be implemented by using async task facilities.
>>>
>>>
>>>
>>> Any questions? Comments?
>>>
>>>
>> Are you planning to offer a "cancel live migration" API and task as
>> well ? I'm thinking of the situation where migration will not
>> converge due to high workload on the VM and the user may decide to
>> stop it ?
>
> Good idea. I'll see if it's viable to be in this first attempt.
>
There is an issue open on github related to that:
https://github.com/kimchi-project/kimchi/issues/78
It is a feature request for Task resource. We need to think about it
carefully as a stop action may trigger a recovery action and affect any
other feature which uses the Task resource.
>> Is this migration going to be supported only from one Kimchi managed
>> host to another or could the target host be also a non Kimchi managed
>> host ?
>
> In theory, if you have libvirt on both sides it would work, even
> without kimchi. The only reason I'm thinking about Kimchi to Kimchi at
> first is because of the facilities that the Kimchi Federation can
> provide to exchange user credentials.
>
>> Are we planning to transfer also Kimchi-template data to the target
>> host in case this one is managed by Kimchi ?
>
> That sounds interesting. If Kimchi has this support in the Federation
> already, why not?
>
IMO It is another feature and not necessarily related to live migration
so we should discuss it separately.
>
> Also, let me clarify that when I say 'first attempt' I am not talking
> about the final backend for the 2.0 release. I am hoping that I will
> be able to release at least 2 versions of this backend before the
> release. Ideas like cancelling an ongoing migration sounds useful and
> I hope we can get it done before 2.0.
>
>
>
> Daniel
>
>>>
>>> Daniel
>>>
>>>
>>> _______________________________________________
>>> Kimchi-devel mailing list
>>> Kimchi-devel at ovirt.org
>>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>>
>>
>> _______________________________________________
>> Kimchi-devel mailing list
>> Kimchi-devel at ovirt.org
>> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>>
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
>
More information about the Kimchi-devel
mailing list