Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18902
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 183
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-11 10:15
文章分类
文章存档

2014年(10)

我的朋友

分类: 云计算

2014-09-15 17:40:18

原文:

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方法


阅读(367) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~