[Pacemaker] KVM live migration and multipath

Sven Arnold sven.arnold at localite.de
Sat Jun 22 13:37:09 UTC 2013


Hi,

I am getting closer... Some updates for those who are interested.

>>> Did you turn caching off for your VMs disks?
>>
>> That's a point. Indeed caching was not explicitely turned off and I just
>> noticed that the default setting of the cache attribute of the device
>> tag in libvirt has changed. [1]
>> I would expect that libvirt flushes all caches before finalizing the
>> migration process. But it is probably best to turn off caches anyway.
>>
>> I have now configured:
>>
>> <disk type='block' device='disk'>
>>        <driver name='qemu' type='raw' cache='none'/>
>
> I would also switch to a native IO (aio) if your kernel/qemu support
> that. Otherwise qemu allocates several dedicated IO threads, and it is
> much slower that aio. There were some problems with aio in the past, but
> it should work ok for recent enough distros.
>

This is interesting. After switching to native io out of curiosity:

<driver name='qemu' type='raw' cache='none' io='native'/>

the situation looked much better - to my surprise I did not experience 
further corruptions with this virtual machine.

Then I added a second and third vm to the setup only to get errors again 
on those machines. I noticed that those additional vms had older qemu 
machine types (pc-0.11 and pc-0.12) set. After upgrading the domains to 
machine type pc-1.0:

<os>
     <type arch='x86_64' machine='pc-1.0'>hvm</type>
     <boot dev='hd'/>
</os>

I did not trigger file system corruptions again. So, at this moment it 
looks like it is important to:
- turn caching off
- use native aio
- *and* use an up-to-date machine type

Failure to meet any of these criteria would result in fs corruption.
Does this make sense at all?

>
> May be that may depend on combination of libvirt/qemu versions and
> migration mode used?

qemu is at 1.0 (1.0+noroms-0ubuntu14.8)
libvirt is at 0.9.8 (0.9.8-2ubuntu17.10)

> And, do you always have fs corruption, independently of IO load?
>

I seems so that I have to create some IO to trigger the corruption.

>
> Did you try to stop all but one iSCSI connection to eliminate multipathing?
>

Not exactly. This would be what I would do next if I have still problems.
What I did, was to use one iSCSI path directly (by using 
/dev/disk/by-path/... as the source of the block device). This seemed to 
work - but it is hard to tell if I just did not trigger a bug in my setup.

That everything worked with a single path (or at least seemed so) is not 
consistent with the observations above. Therefore I still do not trust 
the setup and will do some more long time tests.

May I ask a few more questions?

Do you manage the multipath daemon with pacemaker? In my setup multipath 
is started at boot time and not managed by pacemaker.

Where do you loose the dependencies between targets and initiator?
I use two advisory orders:

order o-iscsitarget_before_iscsiinitiator 0: rg-iscsitarget 
clone-iscsiinitiator

order o-iscsiinitiator_before_libvirt 0: clone-iscsiinitiator 
clone-libvirtd

to have the possibility to restart targets (needed for failover) and to 
restart iscsi initiators (to scan for new targets easily). Is this good 
practice?


Thanks a lot and best regards,

Sven










More information about the Pacemaker mailing list