Migrate 操做会先将Instance停掉,也就是所谓的 冷迁移 。而 Live Migrate 是热迁移,也就在线迁移,Instance不会停机,
Live Migrate 分两种:
一、源和目标节点没有共享存储,Instance 在迁移的时候须要将其镜像文件从源节点传到目标节点,这叫作Block Migrate (块迁移)
二、源和目标节点使用共享存储,Instance的镜像文件不须要迁移,只须要将 Instance 的状态迁移到目标节点
源和目标节点须要知足一些条件才能支持 Live Migrate :
一、源和目标节点的CPU类型要一致
二、源和目标节点的Libvirt版本要一致
三、源和目标节点能互相识别对方的主机名称,好比能够在 /etc/hosts 中加入对方的条目
四、在源和目标节点的 /etc/nova/nova.conf 中指明在线迁移时使用 TCP 协议
[libvirt]
live_migration_uri = qemu+tcp://stack@%s/system
cpu_mode = none
virt_type = kvm
五、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
六、源和目标节点的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上
一、目标节点执行迁移前的准备工做,首先将instance 的数据迁移过来,主要包括镜像文件、虚拟网络等资源,日志见 n-cpu.log
二、源节点启动迁移操做,暂停instance
三、在目标节点上Resume instance
四、在源节点上执行迁移的后处理工做,删除instance
五、在目标节点上执行迁移的后处理工做,建立XML,在Hypervisor中定义instance ,使之下次可以正常启动
在整个迁移过程当中,长ping instance,能够发现也就是一个包的延时大了一些,能够在迁移过程当中instance不会停机。
下面是共享存储迁移流程
有不少方式能够实现共享存储,好比能够将 instance 的镜像文件放在NFS上,或者使用NAS服务器,或者分布式文件系统。
咱们能够使用NFS方案进行实验,将NFS路径挂载到 /opt/stack/data/nova/instances 目录
共享存储的迁移过程和 Block Migrate 基本上同样,只是几个环境有点区别:
一、向 nova-api 提交请求的时候,不能勾选 Block Migrate
二、由于源和目标节点都能直接访问instance 的镜像,因此目标节点在准备阶段不须要传输镜像文件,源节点在迁移后的处理阶段也不须要删除instance的目录
三、只有instance 的状态须要从源节点传输到目标节点,整个迁移速度要快不少