Xen学习之——使用xl migrate 进行虚拟机域的动态迁移

本文分享了在两台Xen主机间成功迁移虚拟机的经验,包括环境搭建、迁移步骤及常见问题解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做xen上虚拟机的迁移,说实话这个问题已经困扰小编我很久很久了,每次都是以失败告终。今天,就在激动人心的今天终于是迁移成功了,不过最后又发现了一个小问题,最后再说。今天就写下这篇博客以此纪念并记录当时的操作。

以前一直都是自己遇到问题,在网上百度,谷歌查找满天飞的资料,最后发现也没几篇文章能够对得上号,很多问题其实大家都应该遇到过,最后肯定也解决了,不过大家都习惯了搭便车,晒出自己最后怎么解决的却没几个,不是忘记就是太高兴了。希望今天的这篇文章,能够给以后遇到同样问题的你一点帮助。

废话就不多说了,直接上操作,总结吧。

一、实验环境

先说明一下,网上很多迁移的教程都是用三台xen主机做的,一台做共享存储器可以是nfs也可以是isis,其它两台分别是源主机和目的主机。我这边的话由 于种种原因只安装了两台机器,此次实验是基于两台电脑来做的。主机A既是nfs服务器也是xen源主机,主机B是xen目的主机,环境如下:

二、迁移前的准备

1.首先,必须保证你所有实验的机器的体系架构一样(操作系统完全一致,版本,位数什么的),xen版本一样,必须一致,重中之重,小编在这里可栽了不少跟头。

2.下载一个迷你,小型的系统镜像,centos也好,WinXP也好,主要用于一会儿安装domain客户虚拟机用

3.确保源主机和目的主机都有足够的空间。

4.确保两台机器之间能够ping通。

tips:如果ping的时候ping不通,请检查一下,网线是否插好,IP地址是否在同一网段,还有防火墙是否关闭,每台机器的网线是否插在正确的网口(小编之前的台式机有两个网口,插在了亮红灯的上面,一直ping不同,后来换在发萤黄色的网口上,就ping通了)。

5.安装nfs服务

sudo apt-get install nfs-kernel-server

sudo apt-get install nfs-common

安装好后修改vim /etc/exports文件,添加 /share *(rw,sync,no_root_squash)

注意这里的/share 目录就是一会要拿来做共享存储的目录。我们必须在源主机和目的主机都建立这个相同的目录,mkdir /share

启动nfs服务,service nfs-kernel-server start ,然后利用mount命令进行挂载测试即可。

mount -t nfs IP地址:要挂在的路径   本机路径,举个例子 mount -t nfs 169.254.9.88:/share  /share这样我就能在我本机的/share的目录下访问169.254.9.88主机上的/share目录了

6.安装SSH服务

利用xl migrate domainid 目的主机IP地址,其实这里是利用SSH连接的,所以我们要配置ssh。

sudo apt-get install openssh-client

sudo apt-get install openssh-server

启动ssh服务  /etc/init.d/shh start

生成密钥对 ssh-keygen -t rsa

发送公钥 ssh-copy-id  -i  id-rsa.pub  root@对方IP地址,出现提示直接yes即可,一切没问题会让你输入对方目的机器的root用户的密码,如果不知道密码可以利用sudo passwd root 来修改root用户的密码(目的主机上操作)。

tips: root@IP地址,默认连接root用户,当然也可以换成其他用户如songmin@ip地址,这样就会提示你输入songmin用户的密码,或者你直接 ssh-copy-id -i id-rsa.pub ip地址,这样是默认连接root用户的。

一切操作完成后,就可以使用ssh  ip地址去远程连接对方目的主机了,注意这里是默认连接root用户,如果出现错误可能是你的网线没插,或者输入密码错误,又或者是root用户默认不允许远程的登录。如果是第三个原因,请修改目标主机的vim /etc/ssh/sshd_config文件将PermitRootLogin  without-password  这里改为PermitRootLogin yes保存退出后重启ssh服务/etc/init.d/ssh restart  即可生效。

三、迁移步骤

1.创建一个建立在共享存储上的虚拟机域

安装Apache(http)服务,具体的操作请网上自行查阅,篇幅太小不够写,安装好后,我将/var/www作为了根目录。

2.创建存放domainU的文件cd  /share 在/share目录下进行

dd if=/dev/zero of=cen.img oflag=direct seek=102399 bs=1M count=1  这里创建了100G

3.将下载好的iso镜像复制到/share 目录,我用的是centos-6.3.iso  

4. 建立iso目录,mkdir /var/www/iso

  挂载目录 mount -o loop /share/xx.iso  /var/www/iso

  将vmlinuz,initrd.img解压   cp  /var/www/iso/isolinux/{vmlinuz,initrd.img}   /share

5.编写配置文件

 先将工作目录切换到xen下,cd /etc/xen  

 然后vim cen.cfg,写入以下配置信息

注意,我这里的配置文件是安装好之后的了,请大家把kernel和ramdisk前面的注释符去掉,将bootloader那一行前面前面加上注释。然后保存退出。

然后 xl create -c cen.cfg 安装即可。一路根据提示就行了,不清楚可以参考网址:

http://luochen2015.blog.51cto.com/9772274/1751540

创建好之后,xl list 看一下,刚创建的虚拟机是否在运行。

6.在目标主机上挂载共享目录

mount -t nfs 169.154.12.45:/share  /share

7.进行迁移

xl migrate cen 169.254.12.125

出现下图,说明没什么问题啦。

然后在目的主机上 xl list 发现多了一个虚拟机,而源主机上已经找不到刚才迁移的虚拟机了。

四.总结

我之前遇到很多问题,造成我没有迁移成功在这里详细总结一下。

1.virtual-manager不支持xen的迁移

一开始做实验实验的时候,我是利用virtual-manager这个图形化界面创建虚拟机的。它支持xen和KVM+qemu两种连接方式。在上面创建好虚拟机右键,你会发现有一个迁移的选项,但并不能点击。这是因为你没有在virt-manager连接其他主机,所以不能迁移,连接也是用的ssh,配好ssh之后,就可以连接其他的xen主机啦。

当我点击迁移时,报错是这样说的,连接驱动器不支持这个功能。但kvm是可以迁移得,截图如下:

2.迁移时虚拟域配置文件没有,或者格式不正确。

通过virt-manager创建的xen虚拟机的配置文件位于/var/lib/xen下,一般运行时才会有个对应的xml格式配置文件。而通过virt-manager创建的kvm+qemu虚拟机的配置文件放在/etc/libvirt/qemu下。

一开始我还不知到用xl create 配置文件来创建虚拟机,就只有用virt-manager来创建。

于是我就直接用xl migrate IP地址开始迁移,报错提示说缺乏配置文件。

然后我又 xl migrate -C IP地址,还是报错,说的是配置文件的格式不被识别。

后来我发现这样是不行的,于是就放弃了用virt-manager创建虚拟机,也因此开始了漫长的创建虚拟机之路。

3.没有配置SSH

4.创建的虚拟机不对

我尝试使用virt-install,virsh,virt-manager,xen-tools, xl create等创建虚拟机。后来在不断的尝试中我发现使用virt-install和virtual-manager创建是一样的,迁移时会不识别配置文件。而xen-tool创建的虚拟机也没有成功建好。最后在不断的试验中终于利用xl create创建好了虚拟机

5.不会写用 xl create 创建虚拟机的配置文件

一开始我并不知道这个配置文件怎么写,也尝试将xml格式的转化过来,不过最后都失败了,后来查阅了一些资料,慢慢研究才终于懂得了配置文件怎么写。

6.存放虚拟机的文件没有共享或目的主机不存在这个文件

当虚拟机成功建好,ssh配置好,配置文件也没有错之后,我再一次进行迁移实验。最终结果仍然是失败。提示:xx.img no sunch file or direction

决绝办法就是cp 复制到目标主机,这样的结果就是太慢了,耗时,耗力。

拷过去之后,再次迁移又报错说 :message to long ,思考了半天应该是没有用共享存储的问题,而要迁移的虚拟机也应该建立在共享存储上。

7.看源码没突破

遇到上述的那个问题的时候,师兄建议我去分析源码,于是我就分析了好长一段时间的源码,大概1个周,不过最后我也没有分析出个所以然,然后也不知道问题在哪儿,浪费了很长一段时间。

可以参考http://blog.youkuaiyun.com/bearox/article/details/69388926,我还评论交了好久。

虽然源码使用C语言+Python写的,但我觉得看起来还是有点费力,毕竟一开始我都不知道从哪个文件哪个函数开始是迁移相关的代码,也不知道函数中莫名出现的变量是从哪儿来的。毕竟要看懂别人的思想和套路还是要花时间琢磨。

途中还遇到一个:qemu  signature :internal error 这个问题我不知道是为什么,后来直接重新做了一边实验,就没出现这个问题而是其他问题了。

8.系统体系架构问题

经过一段时间分析源代码无果之后,我们导师就让师兄指导我做一下实验。于是我又放弃分析源码,开始从头做一遍实验。

这一次出现的问题是mmap faild

和师兄一起检查讨论了好久,后来发现自己两台机子的操作系统为数竟然不一致,一个是32位,一个是64位。这样迁移肯定是有影响的。于是就决定重新装一遍环境。装成一样的之后,就成功迁移了。

9.最后还有一个很奇怪的现象,就是成功迁移过去的虚拟机,在目的主机上运行一段时间后,竟然莫名奇妙的就消失了,xl list 就没有对应显示运行的信息了,现在还不知道是怎么回事。

 

 

 

 

转载于:https://my.oschina.net/u/3548719/blog/1204691

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值