专栏名称: 细说云计算
关注云平台的网络技术、存储技术,以及少量架构技术。
目录
相关文章推荐
美团技术团队  ·  可信实验白皮书系列04:随机轮转实验 ·  3 天前  
美团技术团队  ·  可信实验白皮书系列03:随机对照实验 ·  3 天前  
架构师之路  ·  爸爸!除了你,沈括,沈万三... ... ·  4 天前  
51好读  ›  专栏  ›  细说云计算

UCloud虚拟化在线迁移优化实践(一):KVM虚拟化跨机迁移原理

细说云计算  · 公众号  · 架构  · 2017-06-26 21:16

正文

请到「今天看啥」查看全文


假设将源物理机 SourceHost 的一个虚拟机 VM 迁移到目标物理机 DestHost,非共享存储虚拟机在线迁移过程的具体步骤如下。

准备阶段

Step.1 选择一台具有足够磁盘和内存资源的物理机 DestHost,并在 DestHost 上创建 VM 对应的系统盘和数据盘,同时选定接收迁移数据的 tcp 端口(如图 1.1 所示),这两个磁盘在 DestHost 和 SourceHost 上的路径必须完全一致。不同的是,DestHost 上初始创建的只是空盘,上面没有真实数据。

图 1.1 在目标端新建虚拟机镜像

Step.2 通过虚拟化管理软件 Libvirt 在 DestHost 上创建一个和 VM 同样配置的虚拟机 VM’,系统盘和数据盘使用 Step.1 中创建的系统盘和数据盘(如图 1.2 所示)。VM’当前是 paused 状态,虚拟机 VM’的 vcpu 处于暂停状态,同时虚拟机 VM’会通过监听一个内网的 tcp 端口来接收迁移数据。

图 1.2 在目标端创建新虚拟机

迁移阶段

Step.3 虚拟化管理层 Libvirt 给 VM 对应的 Qemu 进程发出一个迁移指令,并指定参数,例如指定 DestHost 为目标、需要迁移块设备、最大停机时间、迁移带宽限制等,然后迁移数据就会通过指定 tcp 链路传输给 DestHost 上的 VM’。需要注意,迁移数据的网络包不是经过 vswitch,而是直接从 SourceHost 的 ethx 网卡出,进到 DestHost 的 ethx,因为 VM’对应 Qemu 进程正作为 DestHost 一个用户态进程,监听在 ethx 对应的内网 ip(如图 1.3 所示)。

图 1.3 虚拟机迁移数据

Step.4 经过前面三步,虚拟机的数据就正式开始迁移,剩下的挑战是如何保证数据迁移的一致性,因为此时 VM 处于运行状态,里面时刻发生内存更新、磁盘 io 操作和设备状态变更,而 VM’是 paused 状态,只通过一个线程接收 VM 进程发过来的数据。







请到「今天看啥」查看全文