一.迁移分类

1.冷迁移(cold migration),也叫静态迁移。

在迁移到另外的计算节点时,这段时间虚拟机实例是处于宕机状态的,即关闭电源的虚拟机进行迁移。
     通过冷迁移,可以选择将关联的磁盘从一个数据存储移动到另一个数据存储,实例需要重启才能工作。
     适用于对象系统可用性要求不是很高的时候,迁移过程中会关机, 拷贝 instance 的镜像文件和重建 libvirt.xml (这个配置文件中会涉及网络环境, 存储设备等配置), 并重新在目标主机上启动。

优点:虚拟机不需要位于共享存储器上,数据丢失率小。
缺点:需要关闭电源,业务中断。

2.热迁移(Live Migration),又叫动态迁移、实时迁移。

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

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

  1. 基于共享存储的在线迁移(Live migration): 需要实例保存在NFS共享存储中,所有的Hypervisor都可以访问共享存储,主要是实例的内存状态的迁移,速度会很快。
  2. 块在线迁移(Block migration):不要求实例存储在共享文件系统中,即无须共享存储。当各主机上vm使用的是本地存储, 而不是共享存储时, 要实现迁移, 需要实现镜像文件和内存状态同时迁移,还得迁移磁盘文件,速度会慢些。
  3. 基于卷的在线迁移:实例都是基于卷的而不是临时的磁盘,无须共享存储,也支持迁移(目前仅支持基于libvirt的hypervisor)。

优点:软件和硬件系统的维护升级,不会影响用户的关键服务,提高了服务的高可用性和 用户的满意度。
缺点:过程不可中断,操作复杂。

二. 虚机迁移场景

场景 1:
物理机器硬件系统的维护,故障修复和升级(upgrade),但运行在这台物理机器上的虚拟机不能关机,因为用户重要的服务跑在上面。

场景 2:
物理机器软件系统升级,打补丁(patch),为了不影响上面跑的虚拟机,在升级和打补丁之前,需要把虚拟机迁移到别的物理机器上。

场景 3:
一个物理机器上的负载太重,需要减少一些虚拟机来释放资源。

场景 4:
跨域环境下,有的域里有的物理机上的虚拟机太多,有的域里物理机上虚拟机太少,做一下资源平衡。

三.虚拟机迁移中数据处理

虚拟机的迁移,就是数据的转移,如果计算节点之间没有共享存储,所以要转移的数据包括两部分:

  1. 静态数据:
    存储在本地的虚拟机的镜像文件,包括后端镜像(libvirt Base)和虚拟机单独的增量镜像文件(libvirt instance disks)。
  2. 动态数据:
    内存里虚拟机的运行时数据,内存里的数据是动态变化的数据,虚拟机里运行的负载的大小直接影响迁移的时间长短。

Qemu一般通过数据迁移准备、数据迁移、数据迁移收尾三个步骤来完成
循环调用磁盘和内存迁移函数也是按阶段来分别调用的。
1.数据迁移准备:
循环调用磁盘和内存迁移函数的迁移数据准备功能,即前期准备工作,

把磁盘按block为单位组织成一个数组,并设置记录脏块机制;
把内存所有页全部设置为脏页,并发送开始迁移的标志到VM’的进程。

2.数据迁移:
Qemu在这个阶段调用磁盘和内存迁移函数的第二步骤功能,并且要求必须等磁盘数据迁移完成后才会执行内存数据迁移。
如图所示,Qemu首先会进行磁盘(内存)的全量数据迁移,依次将每个block(页)迁移到目标端DestHost。


然后再通过多次迭代,将迁移过程中虚拟机产生的新数据迁移到目标端DestHost(如图所示)。

这一迭代过程是收敛的,收敛依据与之前设置的带宽、最大停机时间有关
同时,在迭代过程中,Qemu将边迁移边记录剩下的脏数据大小,并与停机时间进行比较。
如果这个值比停机时间大,那么继续迁移,如果比停机时间小,那么源端Qemu进程就会暂停,从而避免产生新的脏数据,以便进行迁移收尾工作。
3.数据迁移收尾:
在虚拟机暂停之后,进入第三步迁移收尾工作,源端Qemu进程会把磁盘、内存脏数据和设备状态一次性同步到目标端,完成时VM和VM’的数据将会一致。
这时,上层管理软件会把VM关闭,并把VM’的vcpu恢复运行状态,整个虚拟机的数据迁移就完成了。

四.虚拟机迁移中存储

  1. 共享存储

    虚拟机的数据存在共享磁盘上(Shared storage-based live migration),迁移只需要完成内存数据的迁移。

  2. 非共享存储
    虚拟机的数据存在本地磁盘(block migration),需要对镜像文件和内存数据同时迁移。

五.迁移步骤

5.1 冷迁移步骤

  1. 关闭虚拟机
  2. 找到虚拟机位于 /var/lib/nova/instances 下文件
  3. 将虚拟机的文件全部 copy 到目标主机的相同位置下
  4. 修改用户组
  5. 更新数据库中 host,node 字段为目标主机的名字
  6. 重启目标主机的 nova-compute服务

操作记录

1. 显示运行的虚机

2.关闭虚机

3.将文件copy到目标主机的对应位置下

4.修改权限

5.修改数据库中的字段

update instances set host='compute15', node='compute15' where uuid='3483d9f1-4015-48d9-9837-b67ca82dd54d';

6.查询虚机所在的主机

7.启动虚机

5.1 热迁移步骤:

  1. 迁移前的条件检查
  2. 迁移前的预处理
  3. 迁移过程
  4. 迁移后的处理

1. 迁移前的条件检查

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

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

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

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

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

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

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

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

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

2.迁移前的预处理

在真正执行迁移前,做一些准备工作

1、在目的物理主机上获得和准备虚拟机挂载的块设备(volume)。

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

3、目的物理主机上设置虚拟机的防火墙(fireware)。

3.迁移过程

条件满足并且做完了预处理工作后,就可以执行动态迁移了。主要步骤如下:

1、调用 libvirt python 接口 migrateToURI,来把源主机迁移到目的主机。

2、以一定的时间间隔(0.5)循环调用 wait_for_live_migration 方法,来检测虚拟机迁移 的状态,一直到虚拟机成功迁移为止。

4.迁移后的处理

当虚拟机迁移完成后,要做一些善后工作。

1、在源物理主机上 detach volume。

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

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

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

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

操作记录

1.热迁移需要libvirt远程登录和传输,所以开启libvirt的TCP连接方式

virsh -c qemu+tcp://172.171.8.14/system

例如:qemu+tcp://172.16.0.15/system,服务端只需要配置。

修改/etc/libvirt/libvirtd.conf:listen_tls = 0         listen_tcp = 1           tcp_port = "16509"      listen_addr = "0.0.0.0"auth_tcp = "none"

2.修改libvirtd的配置文件/etc/default/libvirtd:

# Start libvirtd to handle qemu/kvm:start_libvirtd="yes"# options passed to libvirtd, add "-l" to listen on tcplibvirtd_opts="-d -l --config /etc/libvirt/libvirtd.conf"

3.以上修改后,执行

service libvirt-bin restartnetstat -anpt | grep libvirt

可以看到libvirtd监听在TCP 16509端口。

4.配置nova.conf

计算节点的/etc/nova/nova.conf文件中添加如下的内容,使得compute服务支持热迁移。

live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE

5.重启nova-compute

service nova-compute restart

6.修改用户组

查看目标主机的用户组信息

id nova

7. 修改所有计算节点为相同的用户组id。

usermod -u *** novausermod -u *** libvirt-qemugroupmod -g *** novagroupmod -g *** kvm

8.openstack迁移命令

查看所有实例

nova list

9.查看需要迁移虚拟机实例

nova show [实例id]

10.查看可用的计算节点

nova-manage service list

11.查看目标节点资源

nova-manage service describe_resource computer1

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

nova live-migration  [实例id]  [计算节点] 

操作记录

1.查看虚拟机

2.查看虚拟机所在计算节点

3.迁移

4.查看迁移后的虚拟机所在节点

5.在迁移过程中,dashboard中会出现正在迁移的任务

openstack 热迁移(Live Migration)和冷迁移(Cold Migration)相关推荐

  1. (fuel)openstack 冷迁移+热迁移

    前言:在已经搭建好的openstack上进行虚拟机迁移,在此之前需要先创建一个虚拟机实例,具体创建过程自行百度(随便创建一下就好了,作为demo也不需要这个实例能联网啥的),参考博客openstack ...

  2. KVM虚拟机共享存储动态迁移与冷迁移

    运行环境 一. 配置nfs共享服务器 二. 配置KVM虚拟化 三. 创建桥接网卡 四. 配置kvm服务器并实现动态迁移 五. 配置冷迁移 运行环境 KVM虚拟机两台(linux 7.4) IP地址:1 ...

  3. openstack冷迁移/Resize源码分析(二)

    接上一篇 openstack冷迁移/Resize源码分析(一) 执行冷迁移/Resize /nova_queens/nova/compute/manager.py @wrap_exception()@ ...

  4. 2021 => KVM冷迁移与热迁移

    KVM冷迁移

  5. Nova组件源码分析之冷迁移与Resize

    冷迁移与Resize 1.迁移是指将虚拟机从一个计算节点迁移到另外一个节点上.冷迁移过程中虚拟机是关机或是处于不可用的状态,而热迁移则需要保证虚拟机时刻运行. 2.Resize则是指根据需求调整虚拟机 ...

  6. 云迁移实践:VMware虚拟机迁移到OpenStack

    1.迁移需求分析 VMware虚拟机迁移上云的方法很多,比如冷迁移.VMware虚拟机镜像方式导入OpenStack等,而且OpenStack也支持将VMware的vmdk文件直接导入. 考虑到国内市 ...

  7. Nova冷迁移与Resize

    一 介绍 迁移是指将虚拟机从一个计算节点迁移到另外一个节点上.冷迁移是相对热迁移而言,区别在于冷迁移过程中虚拟机是关机或处于不可用状态,而热迁移则需要保证虚拟机时刻运行. Resize则是根据需求调整 ...

  8. Linux MySQL数据库冷迁移采坑记录

    Linux MySQL数据库冷迁移采坑记录 当前文件系统已满,需要将MySQL默认路径迁移到新文件系统下. MySQL数据库文件原位置:/var/lib/mysql . 要移动至:/mysql/mys ...

  9. mysql2ora datacopy,oracle的clone及冷迁移(直接拷贝数据文件)

    最近做了个oracle 10g数据冷迁移,很简单,但还是写一下基本的操作过程: 首先是准备迁移目标服务器,初始化环境,安装数据软件. 基本的环境初始化.依赖包先安装好.相关目录.用户都需要安装好(目标 ...

最新文章

  1. [zz]GNU C __attribute__ 机制简介
  2. 算法试题 - 找出字符流中第一个不重复的元素
  3. 如何在python官网下载pip_[Python]Pip的安装以及简单的使用
  4. 谭浩强c++程序设计知识点思维导图
  5. php面试 算法,PHP面试之常用算法 - 简庆旺个人博客|PHP教程|PHP学习|Python学习|Python教程|Seo学习|Seo教程...
  6. window7安装MongoDB详细步骤
  7. 微软云 mysql 重启_停止Azure MySQL PaaS数据库
  8. 令人厌恶的错误MSB3721,以及win10,VS2019,YOLO V4 环境搭建
  9. 如何测试网站服务器mysql数据库连接,如何测试网站服务器mysql数据库
  10. eclipse远程连接hive
  11. 第四季-专题4-嵌入式文件系统
  12. 【python】正则表达式re模块
  13. 批量解除文件锁定状态包含子文件夹
  14. java餐饮系统需求总结,基于java的餐饮管理系统的设计与实现开题报告
  15. html 获取header 元素,header标签元素基本介绍
  16. Oracle中TO_NUMBER()函数的用法
  17. DP转HDMI方案|CS5216方案应用|CS5216设计方案
  18. 中国风android,小鱼天气 - 水墨古典中国风 #Android
  19. html知识点总结1
  20. 中国版的Google被阉割掉多少?

热门文章

  1. Android 开发笔记“关闭默认键盘”
  2. Java实现replaceAll 把 \ 替换成 /
  3. 2020CCPC(威海) - Labyrinth(bfs+思维)
  4. 牛客 - 建通道(思维)
  5. HDU - 4685 Prince and Princess(强连通缩点+二分图完备匹配)
  6. PAT (Advanced Level) 1017 Queueing at Bank(模拟)
  7. UVA307 Sticks小木棍
  8. PyTorch-图像分类演示
  9. [SDWC2018 Day1]网格
  10. C语言程序设计 | 结构体内存对齐,位段