I'll share it how to do a live migration with xen.
First, you need to known that to do a live migration for a domU, the back-storage of your virtual machine has to be on a shared storage, like iSCSI , AoE, or any other things…
I explain [here] how to set-up AoE on a Linux Debian, and if you prefer iSCSI, I explain it [here].
Second, to do the live migration between two host, these hosts needs to be on the same subnet, I means on the same layer 2 network, otherwise it won't work.
To let things to be as easier as possible on each host :
- is the host where the vm is at the beginning, I means before the live migration
- is the host where the vm is at the end, I means after the live migration
- is the host running the storage area, it doesn't known anything about the xen or live migration, it only has the data.
- is the virtual machine that we want to migrate from one computer to another.
To summarize these things, we want to migrate host_virtual from host_not_virtual_1 to host_not_virtual_2.
I did choose to share the xen vm on a iSCSI device. The procedure to do it on a AoE device, will be mostly the same. So, in my configuration to do this live migration, there is three host, between two of them we will do the live migration, and the third host run the storage area (iSCSI storage area).
First, be sure to install properly Xen on your system, and set up some option, I explain how to do that [here].
I did suppose too that they were already a vm running on :
So, here are the step that I did follow to do my live migration, I was inspired by the external links provided at the end of this web page.
Enable xen to do a live migration
With a default install of xen on a debian Linux, you won't be able to do a live migration. You have to first set some options in the main configuration file of xen :
You can find this 4 lines :
# (xend-relocation-hosts-allow '')
# (xend-relocation-port 8002)
# (xend-relocation-address '')
# (xend-relocation-server yes)
they are commented, with a :
in front of them. You have to erase the :
character in from of them, to uncomment the lines. This enable [xen] to do a live migration. So, the last 4 lines will become :
You now have to restart the xen daemon :
root@host_not_virtual_1 # xend restart
Create a iSCSI device to be available on the network
On the host :
configure an iSCSI disc to put the data of the vm. I used a debian Linux to do this. You can find [here] how to set up the server and client side.
This boxe doesn't need to known anything about xen and live migration, it only store the data, that's all !
Enable iSCSI storage on the first host running the live migration
Let's use this iSCSI device on
Follow this [link] if you still don't known how to attach an iSCSI device on your host.
On the system, let's say that the iSCSI device got the device block :
I first had to configure this new block device on the system, let's use :
and create one primary partition to be used by LVM, so type number of :
Initialise the partition to be used with LVM :
root@host_not_virtual_1 # pvcreate /dev/sda1
then create the volume group :
root@host_not_virtual_1 # vgcreate vg_xen /dev/sda1
create the logical volume needed for the virutal machine, 3GO1 will be enought for me, and don't forget to create also a swap device :
root@host_not_virtual_1 # lvcreate -L 3G -n lvm-xen vg_xen
root@host_not_virtual_1 # lvcreate -L 1G -n lvm-xen-swap vg_xen
create the file system and enable the swap device :
root@host_not_virtual_1 # mkfs.ext3 /dev/vg_xen/lvm-xen
root@host_not_virtual_1 # mkswap /dev/vg_xen/lvm-xen-swap
root@host_not_virtual_1 # swapon /dev/vg_xen/lvm-xen-swap
Put the vm data on this iSCSI storage area
Work related to block device and file system are finished at this point.
Let's now mount the partition where the data of VM host_virtual was on our local disk :
root@host_not_virtual_1 # mount /dev/disk-1/debian-base-xen /mnt/old-vm
Note that is important that the vm is not actively used. So, shutdown the VM if is currently used or do a snapshot if it is used and on a LVM.
We will now mount the iSCSI volume :
root@host_not_virtual_1 # mount /dev/vg_xen/lvm-xen /mnt/new-vm
And now, copy all the the data of vm from one place to another place :
root@host_not_virtual_1 # cp -ax /mnt/old-vm/* /mnt/new-vm/
When this is done, you can launch your virtual machine through your local disk or through your iSCSI device. You only have to change the relevant line of your vm configuration file, so related to disk parameter.
Configure the first host
You have to edit a line within the xen configuration file of this vm, the line that looks like that one :
disk = ['phy:/dev/disk-1/debian-base-xen,sda1,w', 'phy:/dev/disk-1/debian-base-xen-swap,sda2,w']
As the data of your vm are also place now on (we did a copy at the [last step] ) :
and the swap device on :
change the line to this one :
disk = ['phy:/dev/vg_xen/lvm-xen,sda1,w', 'phy:/dev/vg_xen/lvm-xen-swap,sda2,w']
Now, you can launch your vm on host_not_virtual_1, there won't be any difference, except that the vm host_virtual data are on a shared storage, but you won't notice anything.
Configure the second host
The configuration xen file for host_virtual is :
Let's now put the configuration file done on host_not_virtual_1 on the other host that will run the live migration ( host_not_virtual_2 ) :
root@host_not_virtual_1 # scp /etc/xen/debian-base-xen.cfg root@host_not_virtual_2:/etc/xen/
Let's do some work on this other host ( host_not_virtual_2 ). We first had to add/attach the iSCSI device available for him, you can find [here] how you can do it.
I suppose that the new iSCSI device on host_not_virtual_2 is accessible through the block device :
At this point host_not_virtual_2 still don't known that :
has a logical volume on it, 2 step needs to be done :
root@host_not_virtual_2 # vgscan
root@host_not_virtual_2 # vgchange -a y
Now, if you do on host_not_virtual_host_2 a :
root@host_not_virtual_2 # vgdisplay vg_xen
you will see the logical volume that we did configure on host_not_virtual_1.
Do the live migration
And finally, you can now enjoy doing a live migration. First, find the vm id of the vm that you want to migrate from :
This can be done with :
- xm list
Let's say that the vm id was :
I did this command to migrate the vm :
root@host_not_virtual_1 # xm migrate --live 2 host_not_virtual_2
And after a moment, you won't see anymore this vm on :
but actually, it will be on :
Hope this will help someone.
External links :