Migrate 操作会先将Instance停掉,也就是所谓的 冷迁移 。而 Live Migrate 是热迁移,也就在线迁移,Instance不会停机,
 
Live Migrate 分两种:
 
    1、源和目标节点没有共享存储,Instance 在迁移的时候需要将其镜像文件从源节点传到目标节点,这叫做Block Migrate (块迁移)
    2、源和目标节点使用共享存储,Instance的镜像文件不需要迁移,只需要将 Instance 的状态迁移到目标节点
 
源和目标节点需要满足一些条件才能支持 Live Migrate :
 
    1、源和目标节点的CPU类型要一致
    2、源和目标节点的Libvirt版本要一致
    3、源和目标节点能互相识别对方的主机名称,比如可以在 /etc/hosts 中加入对方的条目
    4、在源和目标节点的 /etc/nova/nova.conf 中指明在线迁移时使用 TCP 协议
 
[libvirt]
live_migration_uri = qemu+tcp://stack@%s/system
cpu_mode = none
virt_type = kvm
 
    5、Instance 使用config Driver 保存其metadata。在block Migrate过程中,该config driver 也需要迁移到目标节点。由于目前libvirt 只支持 vfat 类型的config driver,所以必须在 /etc/nova/nova.conf 中指明 launch instance 时创建 config driver
 
[DEFAULT]
config_driver_format = vfat
 
    6、源和目标节点的Libvirt TCP 远程监听服务得打开,需要在下面两个配置文件中做一点配置
 
/etc/default/libvirt-bin
 
    start_libvirtd="yes"
    libvirtd_opts="-d -l"
 
 
/etc/libvirt/libvirtd.conf
 
    listen_tls = 0
    listen_tcp = 1
    unix_sock_group = "libvirtd"
    unix_sock_ro_perms = "0777"
    unix_sock_rw_perms = "0770"
    auth_unix_ro = "none"
    auth_unix_rw = "none"
    auth_tcp = "none"
 
然后重启libvirtd 服务  service libvirt-bin restart
 
下面是非共享存储操作流程
 
Web UI 操作
 
 
迁移的时候如果使用的不是共享存储,需要勾选 Block Migrate
还有一个 Disk Over Commit 选项,nova在检查目标接地那磁盘空间是否够用时,按磁盘文件定义的大小计算,否则按照磁盘文件的实际大小计算。
 
在nova-compute上
 
    1、目标节点执行迁移前的准备工作,首先将instance 的数据迁移过来,主要包括镜像文件、虚拟网络等资源,日志见 n-cpu.log
    2、源节点启动迁移操作,暂停instance
    3、在目标节点上Resume instance
    4、在源节点上执行迁移的后处理工作,删除instance
    5、在目标节点上执行迁移的后处理工作,创建XML,在Hypervisor中定义instance ,使之下次能够正常启动
 
在整个迁移过程中,长ping instance,可以发现也就是一个包的延时大了一些,可以在迁移过程中instance不会停机。
 
 
下面是共享存储迁移流程
 
有很多方式可以实现共享存储,比如可以将 instance 的镜像文件放在NFS上,或者使用NAS服务器,或者分布式文件系统。
 
我们可以使用NFS方案进行实验,将NFS路径挂载到 /opt/stack/data/nova/instances 目录
 
共享存储的迁移过程和 Block Migrate 基本上一样,只是几个环境有点区别:
 
    1、向 nova-api 提交请求的时候,不能勾选 Block Migrate
    2、因为源和目标节点都能直接访问instance 的镜像,所以目标节点在准备阶段不需要传输镜像文件,源节点在迁移后的处理阶段也不需要删除instance的目录
    3、只有instance 的状态需要从源节点传输到目标节点,整个迁移速度要快很多
 
 

最新文章

  1. ORACLE 数据库 MOD 函数用法
  2. Matlab 语谱图(时频图)绘制与分析
  3. draw9的使用说明
  4. easyui的textbox和validatebox的 赋值区别
  5. 【GoLang】golang垃圾回收 & 性能调优
  6. C string.h 常用函数
  7. linux下查看磁盘空间 [转]
  8. MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数
  9. mysql忘记root密码拯救方法(flush privileges)
  10. POJ 1836 Alignment 水DP
  11. AppiumDriver 运行app启动基本参数
  12. StrokeStart与StrokeEnd动画
  13. Flex布局摆脱float带来的布局问题
  14. E - 归并排序 求逆序数
  15. 基于visual Studio2013解决C语言竞赛题之0805成绩输出
  16. 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
  17. 【原创】leetCodeOj --- Copy List with Random Pointer 解题报告
  18. Android特效 五种Toast具体解释
  19. Linux用户和用户组管理总结
  20. 使用Github生成燃尽图

热门文章

  1. matplotlib:plt.rcParams设置画图的分辨率,大小等信息
  2. 性能优化 | Tomcat和JVM的性能调优总结
  3. 动态绑定v-model
  4. 约束布局ConstraintLayout详解
  5. mybatis之动态SQL操作之插入
  6. JVM学习笔记之初识JVM(三)
  7. Linux添加用户/权限/用户主目录等相关
  8. 小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
  9. Win10上的媒体断开连接错误消息(找不到ip地址)
  10. PhpSpreadSheet 读写excel文件