现在的位置: 首页 > 综合 > 正文

使用python-libvirt API 迁移

2013年09月19日 ⁄ 综合 ⁄ 共 1082字 ⁄ 字号 评论关闭

 目前在研究学习使用pythob-libvirt api 操作vm,几经周折才完成了迁移功能:

代码如下:

import libvirt

# virsh  migrate --live kk qemu+tcp://192.168.4.87/system tcp://192.168.4.87

#conn=libvirt.open('qemu:///system')#

dest_conn=libvirt.open('qemu+tcp://192.168.4.87/system')

vm_domain=conn.lookupByName('kk')

print vm_domain.migrate(dest_conn,1,'k2k',None,0) # 参数说明:第一个是 目的端的 conn,迁移方式(live),目的端 vm的名字, 目的端 uri 可为空,带宽 可写 0

这样运行代码是 肯定还是不成功,libvirt.libvirtError: Unable to resolve address 'xx' service '49170': No address associated with hostname

需要配置source源主机的 /etc/hosts文件:加入"192.168.4.87   xx",即 把目的端的 ip 和 主机名 做一个映射。

在迁移的过程中,运行在目的主机中的libvirtd进程要根据address和port创建一个URI,URI是目的主机用来接收数据和发回数据到源主机的libvirtd进程的。上面帮助libvirtd法解析主机名到IP地址的工作。

使用 virsh 命令迁移 道理是一样的,但为省去配置 /etc/hosts文件 的麻烦,可以使用:

migrate --live kk qemu+tcp://192.168.4.87/system tcp://192.168.4.87

经测试 使用api时 如果 uri 填写 成:

dest_conn=libvirt.open('qemu+tcp://192.168.4.87/system tcp://192.168.4.87‘)

出错,不能达到类似 virsh命令的效果 即不用配置 /etc/hosts文件,如何能避免配置 /etc/hosts文件。

如果总更改/etc/hosts文件,数据同步性比较差,而且比较麻烦,如何不用配置hosts文件呢??

不用配置 /etc/hosts文件 的方法经研究测试,获得成功,类似 virsh的方法,具体代码如下:

print vm_domain.migrate(dest_conn,1,'k2k','tcp://192.168.4.87',0)

参数对比 第一段代码的 相应函数。

抱歉!评论已关闭.