O042、Live Migrate 操作
2024-09-05 10:19:38
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 的状态需要从源节点传输到目标节点,整个迁移速度要快很多
最新文章
- ORACLE 数据库 MOD 函数用法
- Matlab 语谱图(时频图)绘制与分析
- draw9的使用说明
- easyui的textbox和validatebox的 赋值区别
- 【GoLang】golang垃圾回收 &; 性能调优
- C string.h 常用函数
- linux下查看磁盘空间 [转]
- MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数
- mysql忘记root密码拯救方法(flush privileges)
- POJ 1836 Alignment 水DP
- AppiumDriver 运行app启动基本参数
- StrokeStart与StrokeEnd动画
- Flex布局摆脱float带来的布局问题
- E - 归并排序 求逆序数
- 基于visual Studio2013解决C语言竞赛题之0805成绩输出
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(七) Exception Handling Application Block
- 【原创】leetCodeOj --- Copy List with Random Pointer 解题报告
- Android特效 五种Toast具体解释
- Linux用户和用户组管理总结
- 使用Github生成燃尽图
热门文章
- matplotlib:plt.rcParams设置画图的分辨率,大小等信息
- 性能优化 | Tomcat和JVM的性能调优总结
- 动态绑定v-model
- 约束布局ConstraintLayout详解
- mybatis之动态SQL操作之插入
- JVM学习笔记之初识JVM(三)
- Linux添加用户/权限/用户主目录等相关
- 小D课堂 - 新版本微服务springcloud+Docker教程_5-02 Netflix开源组件断路器
- Win10上的媒体断开连接错误消息(找不到ip地址)
- PhpSpreadSheet 读写excel文件