热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

迁移KVM虚拟机的方法

从qemu-kvm-0.12.2版本,引入了BlockMigration(块迁移)的特性。上一小节“基于共享存储的动态迁移”中,为了实现动态迁移,源主机和目的主机需要连接共享存储服务。有了块迁移技术以后,可以在动态迁移过程中,把虚拟磁盘文件从源主机迁移至目的主机。

从 qemu-kvm-0.12.2 版本,引入了 Block Migration (块迁移)的特性。上一小节“基于共享存储的动态迁移”中,为了实现动态迁移,源主机和目的主机需要连接共享存储服务。有了块迁移技术以后,可以在动态迁移过程中,把虚拟磁盘文件从源主机迁移至目的主机。QEMU-KVM 有了这个特性以后,共享存储不再是动态迁移的必要条件,从而降低了动态迁移的难度,扩大了动态迁移的应用范围。SLES11 SP1 集成了 kvm-0.12.3,支持块迁移特性。但是 SLES11 SP1 上的 libvirt-0.7.6、virt-manager-0.8.4 暂时没有引入块迁移的功能。所以本文下面的块迁移实验仅基于 QEMU-KVM 的命令行模式。

块迁移过程中,虚拟机只使用本地存储,因此物理环境非常简单。只需要源主机和目的主机通过以太网连接,如”图 2. 本地存储的动态迁移示意图”所示。

QEMU 的控制终端和迁移命令

QEMU 控制终端的开启,可以在 QEMQ-KVM 的命令中加参数“-monitor”。

-monitor stdio: 输出到文本控制台。

-monitor vc: 输出到图形控制台。

图形控制台和虚拟机 VNC 窗口的切换命令是:

Ctrl+Alt+1: VNC window

Ctrl+Alt+2: monitor console

Ctrl+Alt+3: serial0 console

Ctrl+Alt+4: parallel0 console

QEMU-KVM 提供了的“-incoming”参数在指定的端口监听迁移数据。目的主机上需要此参数接收来自源主机的迁移数据。

(qemu) help migrate migrate [-d] [-b] [-i] uri -- migrate to URI (using -d to not wait for completion) -b for migration without shared storage with full copy of disk -i for migration without shared storage with incremental copy of disk (base image shared between src and destination) 

在源主机上创建和启动虚拟机。

在镜像文件上安装虚拟机。本文在虚拟机中安装了 SLES11SP1 系统。 

victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0, addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0 -drive file=/media/83/software/Distro/SLES-11-SP1-DVD-x86_64-GM-DVD1.iso, if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive,bus=ide.1, unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3 

虚拟机安装完毕后,以下列命令启动虚拟机。添加了“-monitor stdio”是为了开启文本控制台;去掉了虚拟光驱中的 ISO 文件是为了保证迁移时,源主机和目的主机上虚拟设备的一致性。如果你在目的主机的相同路径下存在相同名字的 ISO 文件,则可以在迁移时保留 ISO 文件参数。 

victory3:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/var/lib/kvm/images/sles11.1ga/disk0.qcow2, if=none,id=drive-virtio-disk0,boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4, drive=drive-virtio-disk0,id=virtio-disk0 -drive if=none,media=cdrom, id=drive-ide0-1-0 -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0, id=ide0-1-0 -device virtio-net-pci,vlan=0,id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:3 

在目的主机上创建和启动虚拟机。

使用与源主机上相同的 qemu-kvm 参数,更改镜像文件为目的主机上创建的镜像文件,加上 -incoming 参数指定动态迁移所使用的协议、IP 地址和端口号。因为 -incoming 参数的作用是监听端口,所以目的主机上的虚拟机一启动就处于 paused 状态,等待源主机上虚拟机开始迁移。本例中块迁移使用 TCP 协议,目的主机上的监听端口是 8888 端口。 

victory4:~ # /usr/bin/qemu-kvm -enable-kvm -m 512 -smp 4 -name sles11.1ga -monitor stdio -boot c -drive file=/root/dest.img,if=none,id=drive-virtio-disk0, boot=on -device virtio-blk-pci,bus=pci.0,addr=0x4,drive=drive-virtio-disk0, id=virtio-disk0 -drive if=none,media=cdrom,id=drive-ide0-1-0 -device ide-drive, bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -device virtio-net-pci,vlan=0, id=net0,mac=52:54:00:13:08:96 -net tap -vnc 127.0.0.1:8 -incoming tcp:0:8888 QEMU 0.12.3 monitor - type 'help' for more information (qemu) info status VM status: paused 

迁移源主机上的虚拟机到目的主机。

回到源主机上,在等待迁移的虚拟机中开启一些实时服务以验证动态迁移不会中断服务的运行。本例中在虚拟机的终端窗口中用“top -d 1“命令开启 TOP 服务,每秒刷新一次系统进程的信息。 

 

在源主机的 QEMU 控制台中输入以下迁移命令,迁移开始。 

(qemu) migrate -d -b tcp:victory4:8888 -d 可以在迁移的过程中查询迁移状态,否则只能在迁移结束后查询。 -b 迁移虚拟机存储文件 tcp:ivctory4:8888 数据迁移的协议、目的主机和端口。协议和端口必须和目的主机上虚拟机的 -incoming 参数一致。

动态迁移期间,源主机的虚拟机继续运行,TOP 服务没有中断。同时可以在源主机的 QEMU 控制台查询迁移的状态。目的主机的虚拟机处于 paused 状态,从目的主机的 QEMU 控制台可以看到迁移进度的百分比。 

源主机 QEMU 控制台显示正在迁移的数据 (qemu) info migrate Migration status: active transferred ram: 52 kbytes remaining ram: 541004 kbytes total ram: 541056 kbytes transferred disk: 2600960 kbytes remaining disk: 5787648 kbytes total disk: 8388608 kbytes 目的主机 QEMU 控制台显示迁移完成的百分比 (qemu) Receiving block device images Completed 28 % 

直到动态迁移完成,源主机的虚拟机变成 paused 状态而目的主机上的虚拟机由 paused 状态变成运行状态,TOP 服务继续运行且没有中断。

关闭源主机的虚拟机,所有服务已经迁移到了目的主机,至此迁移完成。

本文实现了在 Suse Linux Enterprise Server 11 SP1 发行版上 KVM 虚拟机的静态迁移和动态迁移,特别是基于数据块的动态迁移,使虚拟机的资源配置更加灵活。在其他支持 KVM 的 Linux 发行版上如 Ubuntu、Fedora 也可以完成类似的迁移操作。KVM 虚拟机在不断的增强和完善中,开源社区和 Linux 的系统集成商也在开发各种各样的基于 KVM 的管理工具,将来的 KVM 迁移工具会在性能,功能,可操作性和自动化程度上大大增强。



推荐阅读
  • 一文详解Linux
    Linuxnetfilter与VRF实验环境如下图所示:配置如下:#!binbashsudoipnetnsaddns1sudoiplinkaddns1veth1typevethpe ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • Ubuntu系统下的GIF动画录制解决方案
    在撰写文章或教程时,GIF动态图能够有效地传达信息。对于Windows用户而言,ScreenToGif是一款非常实用的工具。而在Ubuntu系统中,用户同样拥有多种选择来创建GIF动画,本文将重点介绍两款录屏工具——Byzanz和Peek。 ... [详细]
  • Node.js在服务器上的多种部署策略
    本文探讨了Node.js应用程序在服务器上部署的几种有效方法,包括使用Screen、PM2以及通过宝塔面板进行简易管理。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 16.04 系统上配置 Qt 5.5 的交叉编译环境,特别针对 i.MX6 平台进行了优化设置。内容涵盖从基本的软件安装到高级配置的全过程。 ... [详细]
  • 利用 Calcurse 在 Linux 终端高效管理日程与任务
    对于喜爱使用 Linux 终端进行日常操作的系统管理员来说,Calcurse 提供了一种强大的方式来管理日程安排、待办事项及会议。本文将详细介绍如何在 Linux 上安装和使用 Calcurse,帮助用户更有效地组织工作。 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • 如何在Mozilla Firefox中调整GIF动画的循环次数
    本文介绍了如何通过调整Mozilla Firefox的高级设置来控制GIF动画的播放次数,帮助用户根据个人喜好自定义浏览体验。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
  • 本文详细介绍了在 Ubuntu 16.04 系统上安装和配置 PostgreSQL 数据库的方法,包括如何设置监听地址、启用密码加密、更改默认用户密码以及调整客户端访问控制。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • HTML前端开发:UINavigationController与页面间数据传递详解
    本文详细介绍了如何在HTML前端开发中利用UINavigationController进行页面管理和数据传递,适合初学者和有一定基础的开发者学习。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
author-avatar
nancy_liu_tj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有