转自恒天云:http://www.hengtianyun.com/download-show-id-7.html
1.概述
热迁移(Live Migration,又叫动态迁移、实时迁移),即虚拟机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。
openstack热迁移
OpenStack有两种在线迁移类型:live migration和block migration。
-
Live migration需要实例保存在共享存储中,这种迁移主要是实例的内存状态的迁移,速度会很快。
-
Block migration除了实例内存状态要迁移外,还得迁移磁盘文件,速度会慢些,但是它不要求实例存储在共享文件系统中。
2.总体需求
目前,openstack的horizon中并没有实现热迁移的用户接口。我们需要在horizon中实现下面的功能。
- 实现基于本地存储的热迁移
- 前台可指定目标机器
1). 前台功能描述
在云主机列表中,更多下拉框中包含迁移操作,点击【迁移】时,弹出目标机器列表,可供选择。
2). 后台功能描述
注意os-migrateLive是“热迁移”,虚拟机不会停机。migrate操作会先将虚拟机停掉,也就是所谓的“冷迁移”(H版本的horizon中有类似功能“移植”),live-migration是在虚拟机active状态下的操作,且不允许热迁移到本机。
live-migration允许用户指定block_migration参数,表示是否进行块迁移。有几种情况:
- block_migration=True,但系统使用了共享存储,抛异常;
- block_migration=False,但系统没有使用共享存储且虚拟机没有使用后端系统卷,抛异常;
注意事项:
需要配置计算节点的/etc/hosts文件,使相互之间能够用主机名访问。
如果在virt driver层失败,虚拟机状态会重置为active,所以当调用live-migration后,但查询虚拟机发现没有发生迁移,且状态仍是active,则很有可能是在计算节点出现异常。
在线迁移过程中,会有几秒左右的停顿现象,然后恢复正常。
3.技术设计
1). 系统配置
修改 /etc/libvirt/libvirtd.conf:
before : #listen_tls = 0
after : listen_tls = 0
before : #listen_tcp = 1
after : listen_tcp = 1
add: auth_tcp = "none"
修改 /etc/init/libvirt-bin.conf
before : exec /usr/sbin/libvirtd -d
after : exec /usr/sbin/libvirtd -d –l
修改 /etc/default/libvirt-bin
before :libvirtd_opts=" -d"
after :libvirtd_opts=" -d -l"
重启服务:
$ stop libvirt-bin && start libvirt-bin
$ ps -ef | grep libvirt
/etc/nova/nova.conf增加:
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE
2). Web设计
/openstack_dashboard/dashboards/admin/instances/view.py
添加MigrateView方法,获取主机列表并过滤当前虚拟机所在的主机
/openstack_dashboard/dashboards/admin/instances/workflow/migrate_instance.py
获取前台传递的参数,调用server_migrate方法