免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8552 | 回复: 10
打印 上一主题 下一主题

[KVM] KVM 在线迁移 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-20 19:36 |只看该作者 |倒序浏览
本帖最后由 风影刃 于 2013-03-20 19:36 编辑

最近一个群里的朋友问我KVM迁移的一些问题,之前做迁移都是半年前左右的事了,好多细节都忘掉了,正好趁这次实验整理一份笔记,与大家分享。
本文主要以解决问题的方式给大家一个(在线)迁移虚拟机的方法,可能内容包含的不是很全面,这些只是我在实验的时候遇到的问题,如果遇到的问题没有被包含可以留言回复。。。

废话不多说,直入正题(被迁移的机器成为:sourceVM,所在服务器:source,目标服务器:target,#后是shell命令)
实验环境:
RedHat 6.2
# virsh version
Compiled against library: libvir 0.9.4
Using library: libvir 0.9.4
Using API: QEMU 0.9.4
Running hypervisor: QEMU 0.12.1

主要用两种方式,命令行virsh migrate 和图形界面 virt-mamge
命令行比较简单:
#virsh migrate sourceVM qemu+ssh://target/system --live
(如果ssh的端口不是默认22,可以写为 qemu+ssh://target:port/system)
No.1 Question:
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN

解决办法很简单,因为默认情况下hostname 是 localhost,我们需要把目标的hostname修改一下,临时的也可以。
#hostname target

No.2 Question:
error: internal error Attempt to migrate guest to the same host 00020003-0004-0005-0006-000700080009
这个mail list 里有大牛说是服务器提供商的问题
你可以用#dmidecode -s system-uuid 查看一下这个ID,理论上是#virsh sysinfo | grep uuid 及# virsh capabilities | grep uuid
这三个ID是一样的。(之前看论坛里发的解决方法是需要下载一个dmidecode 命令的文件去替换系统的,达到修改的目的,不过今天我只是修改了libvirt的配置文件就可以了,可能是版本的问题)
我们修改一下libvirtd的配置文件
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\"" /etc/libvirt/libvirtd.conf
重启一下libvirtd 服务
# /etc/init.d/libvirtd restart
然后再查看一下
# virsh capabilities | grep uuid

No.3 Question:
error: unable to set user and group to '107:107' on '/image/sourceVM/disk.img': No such file or directory
如果顺利进入到这步的话,就很简单了,没有directory 直接创建一个就可以
注:创建的磁盘应该和源虚拟机的磁盘是一样的大小(更大应该是可以)和格式(raw还是qcow2)

No.4 Question:
error: Unable to resolve address 'target' service '49155': Name or service not known
《《Name or service not known》》这个相信大家都知道如何解决,/etc/hosts ...略过

再次执行迁移命令的时候,就基本不会报错了,我的实验环境是,如果你还有其他问题,请贴图回复,谢谢

虚拟机迁移和网络的带宽、虚拟机镜像的大小有直接关系,但是在线迁移最关心的应该是宕机时间,我测试的方法是一直ping target 服务器,大概停顿1s。

图形就比较简单了,处理上边所说的相同的FQDN,相同的UUID以外,就是建立连接时的ssh认证问题。




我这边的环境是必须要在使用virt-manage远程连接的时候添加ssh的认证,而且还要在终端登陆一次,使服务器的信息记录到目标机器的~/.ssh/knows 下(其实就是有一个yes/no的界面 输入yes即可)
建立连接以后,选中机器右键有一个Migrate的选项

弹出迁移的目标服务器,选择目标服务器,点击Migrate即可





迁移的问题大概就这么多。
剩下的是一些有关于迁移和其他的小细节:
在设置vnc监听端口时基本上有3种,
127.0.0.1 (默认):只有本机能访问,也就是virt-mange和virt-view
host_ip :除了本机的所有机器都可以访问
0.0.0.0: 以上两种的合集
在迁移时,需要把监听地址改为0.0.0.0,端口为-1 自动分配,因为如果不出意外的话,指定的端口会冲突!!!

我群里那位朋友用的没有.ssh/这个目录,可能做不了免认证(没有真实环境,不知道原因),没关系,我们可以用tcp代替ssh连接到目标服务器上。
方法如下:
1 修改/etc/libvirt/libvirtd.conf中
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
auth_tcp = "sasl"
2 去掉/etc/sysconfig/libvirtd 中LIBVIRTD_ARGS="--listen" 的注释
3 修改/etc/libvirt/qemu.conf 中listen 为0.0.0.0 ,去掉password注释
4 运行以下命令可以添加用户
# saslpasswd2 -a libvirt admin
Password: xxxxxx
Again (for verification): xxxxxx
通过以下命令可以查看已经创建的用户
# sasldblistusers2 -f /etc/libvirt/passwd.db
fred@t60wlan.home.berrange.com: userPassword
5 重启libvirtd 服务 ok!
原文引用:xiaoli110 的BLOG

在的ssh的位置选择tcp,如果端口没有修改可以不填端口
测试连接的时候可以用 #virsh -c qemu+tcp://target/system list

还有一个问题是,迁移的时候可以拉服务器吗?正常的迁移时大多是推过去的,就想scp 和rsync一样,以拉虚拟机的方式迁移是可以的

迁移虚拟机对服务器的要求,之前看必须是两个相同的Cpu才可以,今天我测试的时候是发现可以从source迁移到target,回来就出问题了,发现时sourcce 少了一些指令集,所以可以说不通的cpu也是可以做迁移的,只是目标服务器必须包含源服务器cpu的所有指令集。

最后的部分有点乱,如有纰漏,欢迎指正。也希望大家能加入QQ群:93146027 ,一起交流学习。。。

论坛徽章:
13
技术图书徽章
日期:2014-04-29 14:15:42IT运维版块每日发帖之星
日期:2015-12-12 06:20:00IT运维版块每日发帖之星
日期:2015-08-30 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-08-02 06:20:002015年亚洲杯之澳大利亚
日期:2015-04-03 15:03:12申猴
日期:2015-03-20 09:00:292015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15季节之章:冬
日期:2015-01-20 17:08:47双子座
日期:2014-11-21 16:30:31技术图书徽章
日期:2014-07-11 16:29:08
2 [报告]
发表于 2013-03-20 22:05 |只看该作者
文章不错,学习了

论坛徽章:
0
3 [报告]
发表于 2013-05-12 19:54 |只看该作者
本帖最后由 freeterman 于 2013-05-12 19:55 编辑

这个在线迁移,如果用户一直在用会出现中断吗?
我写了一个脚本迁移的,但是用户在中断,具体中断时间看用户文件的大小
思想是在旧的服务器上把虚拟机undefine,然后拷贝数据到新服务器再define
中断时间就是传数据时间加在新服务器上开机时间。

http://myunix.blog.51cto.com/191254/1198354
这个是今天写的
交流一下,同时加你的群了,但是好像没有给验证通过。
QQ:523755,谢谢,希望一起学习。

论坛徽章:
22
CU大牛徽章
日期:2013-09-18 15:22:06白羊座
日期:2014-04-14 22:56:32午马
日期:2014-05-16 17:18:08巳蛇
日期:2014-05-30 20:53:19寅虎
日期:2014-06-03 10:53:34未羊
日期:2014-08-12 22:15:31神斗士
日期:2015-11-20 17:26:2515-16赛季CBA联赛之浙江
日期:2016-03-15 18:27:4215-16赛季CBA联赛之同曦
日期:2016-03-22 09:21:0115-16赛季CBA联赛之北控
日期:2017-03-26 21:47:12技术图书徽章
日期:2014-04-03 16:47:26摩羯座
日期:2014-03-25 23:51:36
4 [报告]
发表于 2013-05-27 10:03 |只看该作者
freeterman 发表于 2013-05-12 19:54
这个在线迁移,如果用户一直在用会出现中断吗?
我写了一个脚本迁移的,但是用户在中断,具体中断时间看用 ...


现在的虚拟化技术都已经支持了在线迁移功能。
经过很多测试(包括vmware、citrix、rhev),当时是用ping包测迁移内存为4g的机器,发现中断时间大约在20-30S(就是最后切换的那段时间)。
但是如果是用console窗口查看,就只需要等几秒画面就能重新显示了。

论坛徽章:
0
5 [报告]
发表于 2013-05-31 16:52 |只看该作者
你好,这个KVM的在线迁移需要两台服务器用一个共享存储吗?类似于NFS的
回复 1# 风影刃


   

论坛徽章:
0
6 [报告]
发表于 2013-06-03 09:00 |只看该作者
不需要,共享存储的使用大概是需要虚拟机跑在共享存储上,然后迁移时只是copy内存数据
如果没有共享存储,可以先copy虚拟机镜像,不过还需要加一个参数,上边遗漏了--copy-storage-all(或--copy-storage-inc)
回复 5# 心若寒江雪


   

论坛徽章:
0
7 [报告]
发表于 2013-06-03 09:25 |只看该作者
你好,你的意思是不是这样的:
比如说要把VM1迁移成另一份,这里就叫VM2
共享存储:镜像文件时同一份,copy的时候就需要把VM1中内存里的数据迁移到VM2中
不使用共享存储:就像你说的那样,除了迁移镜像文件,内存里面的东西也要通过--copy-storage-all(或--copy-storage-inc)这两个参数来迁移
回复 6# 风影刃


   

论坛徽章:
0
8 [报告]
发表于 2013-06-03 11:16 |只看该作者
使用共享存储因为两端都可以访问到虚拟机的磁盘文件,当然不需要copy了
回复 7# 心若寒江雪


   

论坛徽章:
1
2015七夕节徽章
日期:2015-08-21 17:58:43
9 [报告]
发表于 2013-06-04 09:20 |只看该作者
回复 8# 风影刃
共享存储用什么比较好,我是指软件,最好是分布式的,虚拟机上的应用有一定的IO需求。

   

论坛徽章:
0
10 [报告]
发表于 2013-06-04 11:37 |只看该作者
我对于这些没有实际应用中操作经验,只能说下我的想法
可以借鉴一下openstack的模型,使用gfs(当然mfs也可以,看自己的应用环境和习惯)作为虚拟机系统磁盘文件的存放位置,使用SAN提供块存储作为虚拟机数据的存储,将计算能力和数据分离,保证数据的可用性和计算的持久性,方便迁移,性能上也会有相应的提升。
有问题可以加入到QQ群:523755 互相学习和交流
回复 9# shreychen


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP