云计算&虚拟化-kvm-虚拟机迁移(冷迁移&故障迁移)

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

虚拟化,简单来说就是把一台服务器/PC电脑,虚拟成多台独立的虚拟机,每台虚拟机之间相互隔离,每个虚拟机都有自己独立的操作系统,磁盘,网络资源。虚拟化是一个很庞大的系统,我的介绍主要是帮助你入门,让你了解基本技术原理,具备搭建操作虚拟化的能力。由于涉及到内容较多,这里的目录就只是以简单分类介绍和说明,不再针对单个小节进行目录列出,主要涉及的分类包括以下几个方面:

1.虚拟化介绍

2.kvm基本使用

3.kvm进阶使用(本小节属于)

4.kvm技术原理

5.vmware介绍&使用

6.小结

虚拟机的迁移主要分三种:冷迁移,热迁移和故障迁移。冷迁移,主要指的是虚拟机在处于关机状态下的迁移。热迁移则说的是虚拟机在运行中的迁移。故障迁移则说的是虚拟机所在节点故障以后触发的迁移。

由于为了演示热迁移,所以迁移将分两小节来讲解,本小节将主要介绍冷迁移和故障迁移。

通过我们前面几节的学习,我们知道一个虚拟机主要包含配置文件,就是xxx.xml文件,另外一个就是虚拟机的镜像文件,而我们前面演示的虚拟机都是使用的本地文件,配置文件也在本地。那么故障迁移肯定是无法做到的,因为虚拟机因为机器故障已经失联,我们无法操作该虚拟机对应的文件和配置文件。

冷迁移

冷迁移是指在虚拟机关机的状态下进行的迁移。这种迁移通常涉及以下步骤:

  1. 备份虚拟机:包括虚拟机的磁盘文件和配置文件(其实好像也不需要再备份)。

  2. 传输文件:将这些文件复制或移动到新的宿主服务器上。

  3. 重新配置:如果需要的话,更新虚拟机的配置以适应新环境。

  4. 启动虚拟机:在新的宿主服务器上启动虚拟机。

    #其实备份是不需要的,在虚拟机关机状态下直接复制即可 rsync -avz xxx.xml root@1.1.1.1:/etc/libvirt/qemu/

    #文件要和原始路径一致,或者修改xml里面的路径 rsync -avz xxx.qcow2 root@1.1.1.1:/data/image

    #重新定义虚拟机virsh define /etc/libvirt/qemu/xxx.xml

本质上这个迁移和上一小节基于文件复制或者clone虚拟机是一样的操作,只是这个把操作从复制文件到本地变成到另外一台服务器,需要注意的就是复制过去以后,需要确保网络连通性。

另外我们在解释kvm主机的镜像文件的时候,KVM-磁盘格式介绍说过,如果raw格式,即便是空文件,通过网络传输的时候,也会传输定义的大小,如下图。

解决办法,转换成qcow2文件进行传输

csharp 复制代码
[root@localhost raw]# qemu-img convert -c -O qcow2 image_file.img output.qcow2
[root@localhost raw]# ll
total 1220
-rw-r--r-- 1 root root 21474836480 Nov  1 21:41 image_file.img
-rw-r--r-- 1 root root      197120 Nov  1 21:52 output.qcow2
[root@localhost raw]# du -sh image_file.img 
1.0M  image_file.img
[root@localhost raw]# du -sh output.qcow2 
196K  output.qcow2

故障迁移

前面说过,使用本地数据是没有办法故障迁移的,所以故障迁移的前提条件是镜像文件和配置文件都不保存在本地。存储可以使用共享存储,比如分布式存储ceph,配置文件则存储在数据库里面。

那怎么触发故障迁移呢?作者在某头部云厂商工作的经历来说,他们是定义了下面2个条件。

第一个条件是ping不可达,由于是专门的计算服务器,所以在很少干扰的情况下ping不可达确实可以作为判断服务器是否故障的依据,如果真的出现了ping不可达的情况,则管控节点根据自己的逻辑进行故障迁移流程。

第二个条件则是agent上报超时,每个计算节点都有一个专门的agent进程,用于统计或者监控计算服务器的信息,这个agent会定时上报服务器情况,如果服务器未按照预期上报主机状态,则管控节点也会根据自己的逻辑进行故障迁移流程。

故障迁移流程一般包含下面内容(不保证准确,仅供参考)。

  1. 下发故障虚拟机的配置文件和镜像文件到目标主机,供主机拉起。

  2. 下发故障虚拟机对应的路由信息等,确保该主机能正常加入网络,并隔离原有故障网络。

  3. 更新这个虚拟机的状态信息,比如原来在A服务器,现在迁移到了B服务器。

  4. 更新宿主机状态,确保它不会自动恢复可用状态,这个需要等待人工确认以后才会恢复正常状态。

当然,如果大家使用公有云,以目前公有云的体量来说,还是不容易遇到的,作者多年的公有云使用经验到目前为止只遇到过一次,所以我们需要确保自己业务是高可用及自动恢复的。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
bjzhang7533 分钟前
CentOS下安装MySQL详解
linux·mysql·centos
ZHW_AI课题组1 小时前
调用阿里云实现文本翻译功能
阿里云·云计算
Jason_chen2 小时前
Linux 6.2 音频机制深度解析:AI驱动的低延迟音频与零信任音频安全架构
linux
下午写HelloWorld2 小时前
Linux系统及Ubuntu常用指令
linux·ubuntu·操作系统
云计算磊哥@4 小时前
运维开发宝典026-MySQL02数据库表操作
运维·数据库·运维开发
weixin_523185324 小时前
Collections.unmodifiableMap详解:真的不可修改吗?
java·linux·前端
天天进步20154 小时前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
凡人叶枫5 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
云栖梦泽5 小时前
玩转RK3506SDK
linux·嵌入式硬件
极客先躯5 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷