转自: http://www.cnblogs.com/pycode/p/6494848.html

迁移类型:

*非在线迁移 (有时也称之为‘迁移’)。也就是在迁移到另外的计算节点时的这段时间虚拟机实例是处于宕机状态的。在此情况下,实例需要重启才能工作。

*在线迁移 (或 '真正的在线迁移')。实例几乎没有宕机时间。用于当实例需要在迁移时保持运行。在线迁移有下面几种类型:

* 基于共享存储的在线迁移。所有的Hypervisor都可以访问共享存储。

* 块在线迁移。无须共享存储。但诸如CD-ROM之类的只读设备是无法实现的。

* 基于卷的在线迁移。实例都是基于卷的而不是临时的磁盘,无须共享存储,也支持迁移(目前仅支持基于libvirt的hypervisor)。

什么是热迁移

热迁移(Live Migration,又叫动态迁移、实时迁移),即虚拟机保存/恢复(Save/Restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。

openstack热迁移

OpenStack有两种在线迁移类型:live migration和block migration。Livemigration需要实例保存在NFS共享存储中,这种迁移主要是实例的内存状态的迁移,速度应该会很快。Block migration除了实例内存状态要迁移外,还得迁移磁盘文件,速度会慢些,但是它不要求实例存储在共享文件系统中。
NFS允许一个系统在网络上与他人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。

迁移步骤

  • 迁移前的条件检查
    动态迁移要成功执行,一些条件必须满足,所以在执行迁移前必须做一些条件检查。

    • 权限检查,执行迁移的用户是否有足够的权限执行动态迁移。

    • 参数检查,传递给 API 的参数是否足够和正确,如是否指定了 block-migrate 参数。

    • 检查目标物理主机是否存在。

    • 检查被迁移的虚拟机是否是 running 状态。

    • 检查源和目的物理主机上的 nova-compute service 是否正常运行。

    • 检查目的物理主机和源物理主机是否是同一台机器。

    • 检查目的物理主机是否有足够的内存(memory)。

    • 检查目的和源物理主机器 hypervisor 和 hypervisor 的版本是否相同。

  • 迁移前的预处理

在真正执行迁移前,必须做一下热身,做一些准备工作。
* 在目的物理主机上获得和准备虚拟机挂载的块设备(volume)。

* 在目的物理主机上设置虚拟机的网络(networks)。

* 目的物理主机上设置虚拟机的防火墙(fireware)。
  • 迁移
    条件满足并且做完了预处理工作后,就可以执行动态迁移了。主要步骤如下:

    • 调用 libvirt python 接口 migrateToURI,来把源主机迁移到目的主机。
      dom.migrateToURI(CONF.live_migration_uri % dest,logical_sum,None,CONF.live_migration_bandwidth)
      live_migration_uri:这个 URI 就是在 3.2.2 里介绍的 libvirtd 进程定义的。
      live_migration_bandwidth:这个参数定义了迁移过程中所使用的最大的带宽。
    • 以一定的时间间隔(0.5)循环调用 wait_for_live_migration 方法,来检测虚拟机迁移 的状态,一直到虚拟机成功迁移为止。
  • 迁移后的处理
    当虚拟机迁移完成后,要做一些善后工作。
    • 在源物理主机上 detach volume。

    • 在源物理主机上释放 security group ingress rule。

    • 在目的物理主机上更新数据库里虚拟机的状态。

    • 在源物理主机上删除虚拟机。

上面四步正常完成后,虚拟机就成功的从源物理主机成功地迁移到了目的物理主机了

Live Migration 的实现

热迁移条件:

1.计算节点之间可以通过主机名互相访问

2.计算节点和控制节点的nova uid和gid保持一致

3.vncserver_proxyclient_address和vncserver_listen 监听的是本地IP

4.必须有共享存储,实例存放在共享存储中,且每个计算节点都可以访问共享存储。否则只能使用块迁移

配置

  • 添加live_migration_flag

    修改nova的配置文件,在[libvirt] 段下 添加如下字段


live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED"
  • 修改libvirt配置

    配置versh免密码连接,修改/etc/libvirt/libvirtd.conf

添加如下配置



listen_tls = 0

listen_tcp = 1

tcp_port = "16509"

listen_addr = "172.16.201.8"   #根据自己的计算节点IP改写

auth_tcp = "none"

修改/etc/sysconfig/libvirtd 添加如下参数



LIBVIRTD_CONFIG=/etc/libvirt/libvirtd.conf

LIBVIRTD_ARGS="--listen"

重启libvirt


systemctl restart libvirtd.service

查看监听端口:



[root@compute1 ~]# netstat -lnpt | grep libvirtd

tcp        0      0 172.16.206.6:16509      0.0.0.0:*               LISTEN      9852/libvirtd

测试:


在compute1节点上: virsh -c qemu+tcp://compute2/system 在compute2节点上 virsh -c qemu+tcp://compute1/system 如果能无密码连接上去,表示配置没问题

动态迁移

  • 查看所有实例

nova list

  • 查看需要迁移虚拟机实例

nova show f3d749ba-98e1-4624-9782-6da729ad164c

  • 查看可用的计算节点
    nova-manage service list

  • 查看目标节点资源
    nova-manage service describe_resource computer1

  • 开始迁移,正常无任何回显

nova live-migration 8da00f69-05f6-4425-9a8a-df56b79a474f computer1

  • 也可以通过dashboard 节点迁移
    用节点迁移需要使用admin管理员用户执

冷迁移配置

冷迁移需要启动nova账户,并配置ssh 免密码认证


usermod -s /bin/bash nova su - nova ssh-keygen -t rsa #生成密钥 cp -fa id_rsa.pub authorized_keys

将密钥复制到所有计算节点的/var/lib/nova/.ssh下,并设置权限为nova用户

编辑/etc/nova/nova.conf的配置文件,修改下面参数


allow_resize_to_same_host=True scheduler_default_filters=RetryFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter

在计算节点重启nova服务


systemctl restart openstack-nova-compute

在controller节点重启nova 相关服务


systemctl restart openstack-nova-api.service openstack-nova-scheduler.service
 
 
转自: http://www.cnblogs.com/pycode/p/6494848.html

openstack热迁移和冷迁移的更多相关文章

  1. OpenStack之虚机冷迁移代码简析

    OpenStack之虚机冷迁移代码简析 前不久我们看了openstack的热迁移代码,并进行了简单的分析.真的,很简单的分析.现在天气凉了,为了应时令,再简析下虚机冷迁移的代码. 还是老样子,前端的H ...

  2. OpenStack的Resize和冷迁移代码解析及改进

    原文:http://www.hengtianyun.com/download-show-id-79.html OpenStack的Resize(升级)功能,我们可以改变虚拟机的CPU核数.内存及磁盘大 ...

  3. vsphere 虚拟机的迁移,冷迁移,vmotion(热迁移)

    备注:(理论部分参考王春海老师的课程) 一.概述 1.vsphere数据中心当处于某种目的进行维护时,需要将某台主机上运行或关闭的虚拟机,迁移到其他主机上,这个时候就需要使用迁移 2.可以使用冷迁移或 ...

  4. OpenStack虚拟机冷迁移与热迁移

    一.虚拟机迁移分析 openstacvk虚拟机迁移分为冷迁移和热迁移两种方式. 1.1冷迁移: 冷迁移(cold migration),也叫静态迁移.关闭电源的虚拟机进行迁移.通过冷迁移,可以选择将关 ...

  5. 【openstack N版】——云主机调整大小\冷迁移

    一.先决条件 云主机冷迁移,即:将一台云主机从一个计算节点上,迁移到另外一个计算节点上.因为环境原因,所以我们需要准备两个计算节点. 1.1准备环境 在控制节点上,安装一个计算节点 #在控制节点安装n ...

  6. openstack云主机冷迁移

    1:开启nova计算节点之间互信 冷迁移需要nova计算节点之间使用nova用户互相免密码访问 默认nova用户禁止登陆,开启所有计算节点的nova用户登录shell. usermod -s /bin ...

  7. openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主机间能使用nova系统用户经passless登录

    openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主 ...

  8. EF CodeFirs 代码迁移、数据迁移

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    标题叫EF CodeFirs 代码迁移.数据迁移. ...

  9. laravel基础课程---16、数据迁移(数据库迁移是什么)

    laravel基础课程---16.数据迁移(数据库迁移是什么) 一.总结 一句话总结: 是什么:数据库迁移就像是[数据库的版本控制],可以让你的团队轻松修改并共享应用程序的数据库结构. 使用场景:解决 ...

随机推荐

  1. Linux内存管理机制中buffer和cache的区别

    Linux内存管理机制中buffer和cache的区别理解linux内存管理,需要深入了解linux内存的各个参数含义和规则,下面介绍一下Linux操作系统中内存buffer和cache的区别. Fr ...

  2. 分享下今天研究的流量上限DDos攻击分析和解决方式

    分享下今天研究的流量上限DDos攻击分析和解决方式 常常听到或者碰到某个站点被攻击.一般都是流量攻击.今天自己写了个程序測下相关的上限,程序仅仅简单做了个get html操作(不包括图片等资源文件). ...

  3. kindle paperwhite3 连不上WIFI解决方法

    确定能连接上其它的设备比如手机.如果是密码没错,路由器也正常,但是你还是连接不上,那就跟我之前遇到一样了.你先让你的kpw连接一次,不要动,再检查下你路由器连接的客户端列表(我的是在DHCP服务器一栏 ...

  4. 手机防盗之获取手机经纬度(Android)

    获取手机经纬度有gps , network , 基站 三种方式,我们可以根据定位的条件,获取一个最好的定位方式.然后将获取到经纬度信息发送到指定的手机号码中. /* * 单态只允许存在一个实例. * ...

  5. 使用自定义的按钮替换默认的<input type='file'>

    可以通过让默认的input type = 'file'按钮透明度变为0,并且让它刚好覆盖在自定义的按钮上,来实现此效果: 将它写成一个jQuery插件: (function($){ $.fn.brow ...

  6. 这个BUG你遇到过吗

    今天做项目的时候,当我根据文档集成极光推送的时候,需要导入一些framework 然后我用真机iPhone5c调试的时候,出错 程序停止到这里了,而且,点击下一步,程序并没有什么反应,各位大神有知道原 ...

  7. electron 的跳转

    // 测试 正常跳转应该登录成功 // that.timer = setInterval(() => { that.$router.push('/mainChat');//路由跳转mainCha ...

  8. 在ajax post处理文件下载

    我有一个JavaScript应用程序需要使用ajax post请求发送到某个URL,然后后端会根据请求中的参数进行相应的工作,生成一个可下载的压缩包,等待下载.必须使用的ajax的原因是这里需要模拟提 ...

  9. js中的url地址用function函数调用

    url中输入调用函数,函数中调用ajax请求

  10. 接收与发送邮件(XE10.2+WIN764)

    千万不要用QQ邮箱测试,我试了半天,没整明白. 一.设置信息 POP3接收邮件POP3服务器:exchange.grandsoft.com.cn端口:110账号:zhujq-a@glodon.com密 ...