O042、Live Migrate 操作
参考https://www.cnblogs.com/CloudMan6/p/5554549.html
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 的状态需要从源节点传输到目标节点,整个迁移速度要快很多