KVM克隆及在不同物理机下的移植

来源:互联网 发布:卖家开通淘宝达人 编辑:程序博客网 时间:2024/06/06 05:22

KVM 虚拟机的管理工具

  准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具

  • QEMU-KVM

    • 在 Linux 系统中,首先我们可以用 modprobe 系统工具去加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。
    • 加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。
    • 关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU。QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架。比如说在 x86 的 CPU 上虚拟一个 Power 的 CPU,并利用它编译出可运行在 Power 上的程序。
    • KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版中分为 kernel 部分的 KVM 内核模块和 QEMU-KVM 工具。这就是 KVM 和 QEMU 的关系
  • Libvirt、virsh、virt-manager

    • 尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用
    • Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。
    • 使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令—— virsh,可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-manager,它是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt 的 API 实现的

KVM 虚拟机迁移方式

1. 基于共享存储的动态迁移,具体可参考KVM 虚拟机在物理主机之间迁移的实现这篇博文

2. KVM 虚拟机静态迁移,静态迁移由于允许中断虚拟机的运行,所以相对简单。首先在源主机上关闭虚拟机,然后移动虚拟机的存储镜像和配置文件到目的主机,最后在目的主机上启动虚拟机,恢复服务。根据虚拟机镜像存储方式的不同,静态迁移的实现方法稍有不同

  • 虚拟机之间使用共享存储:如果源主机和目的主机都能够访问虚拟机的镜像,则只需要迁移虚拟机配置文件。virt-manager 管理的虚拟机配置文件在 /etc/libvirt/qemu/”your vm name.xml”。拷贝 XML 配置文件到目的主机的相同目录后,进行适当的修改,比如:与源主机相关的文件或路径等。无论你何时在 /etc/libvirt/qemu/ 中修改了虚拟机的 XML 文件,必须重新运行 define 命令,以激活新的虚拟机配置文件

    virsh define /etc/libvirt/qemu/"your vm name.xml"
  • 虚拟机镜像使用本地存储:本地存储是指虚拟机的文件系统建立在本地硬盘上,可以是文件或者磁盘分区

    • 本地文件存储:如果虚拟机是基于镜像文件,直接从源主机拷贝镜像文件和 XML 配置文件到目的主机中,然后对 XML 进行适当的修改并激活。

    • 本地磁盘分区:如果虚拟机使用了磁盘分区(物理分区或者逻辑分区)为存储设备,首先用 dump 工具把磁盘分区转换成镜像文件再拷贝到目的主机。在目的主机恢复虚拟机时,把镜像文件恢复到目的主机的磁盘分区中去。对于虚拟机系统使用了多个磁盘分区的,需要每个分区单独 dump 成镜像文件。例如使用“/dev/VolGroup00/lv001” LVM 逻辑卷作为存储设备,可以使用下面的命令转换逻辑卷为镜像文件,输出成镜像文件:

       dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M

KVM具体迁移步骤

  笔者在实际开发中采用的 KVM 静态迁移,且使用虚拟机镜像本地存储。因为操作简单方便。操作中,虚拟机的运行状态的变化情况?静态迁移虚拟的过程中,虚拟机系统处于关机状态,这样虚拟机关机前的运行状态不会保留。如果希望保留迁移前的系统状态,并且在迁移后能够恢复,需要对虚拟机做快照备份或者以休眠的方式关闭系统
  我们知道,vmware可以直接启动虚拟机文件,因此,拷贝虚拟机文件并用vmware打开即可实现新虚拟机的使用。然后,KVM中的情况不同,主要源于KVM不止需要虚拟机文件还需要关联的XML文件

方案一 (笔者未采用,从网上借鉴的)

  假设通过KVM已经安装虚拟机vHost_1,此机的虚拟机文件存放在/disk4/VM/ 而关关联的xml文件在/etc/libvirt/qemu/vHost_2.xml。创建虚拟机vHost_2,需要如下简单操作:

  1. 拷贝vHost_1
    cp vHost_1 /disk4/VM/vHost_3

  2. 拷贝vHost_1的关联文件
    virsh dumpxml vHost_1 >/etc/libvirt/qemu/vHost_3.xml

  3. 修改vHost_3.xml文件,主要修改UUID和source;

  4. 激活新的虚拟机配置文件

    virsh define /etc/libvirt/qemu/vHost_3.xmlvirsh start vHost_3

    至此,虚拟机vHost_3启动!

方案二(主要利用 virt-manager 图形界面移植)

  • 配置需求分析
主机 IP 镜像配置文件位置 镜像位置 镜像名称 源主机 10.6.2.163 /etc/libvirt/qemu /var/lib/libvirt/images/ qoe_179 目的主机 10.6.2.167 /etc/libvirt/qemu /var/lib/libvirt/images/ qoe_192
  • 先查看当前已安装的虚拟机
virsh list --all

这里写图片描述
说明当前没有安装任何虚拟机

  • 将远程的的虚拟机的xml以及img文件通过scp拷贝到本机下
scp root@10.6.2.163:/opt/qoe_wzf.xml /etc/libvirt/qemuscp root@10.6.2.163:/opt/qoe_wzf.img /var/lib/libvirt/images/
  • 然后打开 virt-manager
virt-manager
  • 在出现的画面中点击 New VM按钮

这里写图片描述

  • 填写虚拟机名称,然后选择导入已经存在的镜像文件

这里写图片描述

  • 选择复制的镜像img文件,kvm默认显示的是在 /var/lib/libvirt/images/ 下已有的img文件

这里写图片描述

  • 选择好虚拟内存和虚拟CPU核数

这里写图片描述

  • 这里的步骤2是保证新建虚拟机依旧是处在网桥br0中

这里写图片描述

  • 当遇到下列情况时: 新的虚拟机名为 qoe_192。且它的配置文件就是以虚拟机名为命名的xml文件,即
    qoe_192.xml。但是它的镜像文件却是其他

这里写图片描述
接下来就是慢慢地等待了….

这里写图片描述

然后就出现如上了,就是这么简单… ^_^

  • 因为虚拟机在不同物理机上的移植,所以其 MAC地址一定会自动改变,这点无需我们操心,但是原有以 MAC
    为基础的网络配置却失效了,故需要重新配置下网络

这里写图片描述

  • 先进入超级用户模式下,然后查看本机的 MAC 地址
ifconfig eth0
  • eth0 是虚拟机的默认以太网卡,实际中当然是虚拟的,并不是都取名为 eth0,根据实际情况而定。这里务必记住新的 MAC 地址,即图中的 52:54:00:f6:bf:e7。补充一句,如果找不到eth0网卡,请参考这篇博文《KVM虚拟机克隆Linux系统后找不到eth0网卡》
  • 然后编辑网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
  • 将HWADDR后面的地址改为实际的地址(52:54:00:f6:bf:e7),旧的已经被笔者我注释了,然后其余步骤就是配置IP,这里就不多解释了,因为笔者的虚拟机是 Centos7 并非 Centos6.5,所以具体的语句有一点点不同,仅此而已!

这里写图片描述

  • 接着就是重启虚拟里的网络
service network restart

OK,大功告成了,配置完毕!

克隆虚拟机

需求分析:克隆qoe_192虚拟机为新的虚拟机 qoe_193

  • 克隆已有的虚拟机,首先需要将被复制的虚拟机 power off,然后再右击,选择 clone, 在弹出的界面中

  • 首先在 Name一栏中,填入所需的新虚拟机名称,默认就是 xx-clone(暂不改,等等教后续如何修改,当然改了是最直接方便的)。

    这里写图片描述

  • 其次在 Storage一栏中选择 Details一项,在弹出的下面界面中,可以看到克隆的磁盘位置在 /var/lib/libvirt/images/qoe_192.img

  • 而新的虚拟机的磁盘位置为该目录下的 qoe_192-clone,这里建议直接改为需求的qoe_193.img。然而为了说明当忘记修改后续如何调整,现暂不动
  • 选择的过程也可以点击 Browse一栏(图中4),然后选择 Browse Local(图中5),最终在 (图中6)处选择你要的磁盘文件,然后点击 Choose Volume

这里写图片描述
可以看到已经克隆出了新的虚拟机了,现在返回修改虚拟机的名称以及镜像文件的名称。

  • 首先进入 /var/lib/libvirt/images 中,修改 镜像文件的名称

    cd /var/lib/libvirt/imagesmv qoe_192-clone.img qoe_193.img
  • 然后右击关闭着的 qoe_192-clone,选择 open,然后点击位置1 的修改虚拟机硬件位置的地方

这里写图片描述

  • 点击位置2 “Overview”, 在右栏中位置3 “Name” 中编辑你想修改的新名称即可
  • 点击位置4 “VirlO Disk”,就突然弹出 5的报错信息,因为先前已经将qoe_192-clone.img 重新命名为 qoe_193.img了,不报错才怪~,这时将右击位置4 ,选择 “Remove Hardware”,删除它!
  • 点击位置6 “Add Hardware”
    -这里写图片描述

    • 点击位置 1 “Storage”,选择 “Select managed or other existing storage”,点击 “Browse”
    • 选择之前更名后的 qoe_193.img,选择 Choose Volume
    • 将 “Device type” 更改为 “Virtio Disk” 类型
  • 接着就是将修改后的 qoe_193 启动 “Run” 就OK了,完毕!但别忘了网络配置还是要改的… -_-!

这里写图片描述

0 0