最近在做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 就没有对应显示运行的信息了,现在还不知道是怎么回事。