KVM虚拟机差量生产镜像测试

KVM虚拟机差量生成镜像测试

  1. 结论

    通过后备镜像生成差量虚拟机的方法,可以快速生成大量虚拟机,节省磁盘空间,在生产环境中具有重要意义。测试表明,后备镜像的读压力非常小,系统压力主要集中在差量镜像的写操作上。为了达到最佳效果,建议将后备镜像和差量镜像分别存储在不同的物理硬盘上,并确保镜像的安全性。

  2. 后备镜像差量生成虚拟机(backing_file)功能说明

    后备镜像差量生成虚拟机指的是多个虚拟机共享一个后备镜像,每个虚拟机根据需求进行操作:读操作直接从镜像读取,写操作则写入自己的镜像文件,类似于快照的copy on write机制。后备镜像可以是raw或qcow2格式,而差量镜像只能是qcow2格式。

  3. 使用差量方式的好处:

    1. 快速生成虚拟机镜像,只需一条命令即可快速生成虚拟机镜像。
    2. 节省磁盘空间,多个虚拟机共享一个后备镜像,显著节省存储空间。
  4. 使用差量方式的风险

    1. 多台虚拟机启动时,IO压力会非常大,特别是首次启动时。
    2. 对后备镜像的安全性要求极高。
  5. 测试环境

    硬件

    • 联想R510G7
    • CPU: Intel(R) Xeon(R) CPU E5506 @ 2.13GHz
    • 内存: 8G
    • 硬盘: sas 146Gx2 raid0 x2

    软件

    • CentOS 6.3,内核版本:2.6.32-279.19.1.el6.x86_64
  6. 测试方法

    生成差量镜像的命令中,-b参数指定后备镜像。如果生成的镜像和后备镜像不在同一目录下,请使用绝对路径,否则虚拟机无法启动。

    qemu-img create -f qcow2 /datapool/w2k3-test-04 -b /data/win2003ent32chs

    测试过程中,使用脚本不断生成差量镜像,启动虚拟机,5分钟后关闭虚拟机、删除虚拟机,再生成镜像。通过cacti监控平台观察磁盘的IO压力。

  7. 测试结果

    1. 不同操作系统首次启动后占用的空间大小

      系统 空间
      Windows Server 2003 44M
      Windows Server 2008 85M
      CentOS 5.6 18M
      CentOS 6.2 11M
    2. 压力测试

      将后备镜像和差量镜像放置在同一硬盘或raid组时,发现磁盘读写IO非常高。多台Windows Server 2003虚拟机同时启动,启动到第三台时就会蓝屏。由于这种测试方法无法准确测量后备镜像和差量镜像的具体读写压力,因此将它们分开到不同的raid组上进行测试。

      Windows Server 2003系统一台虚拟机重复循环删除、生成、启动时的系统IO压力:

      datavg-datapool是放置差量镜像的逻辑卷,可以看到写压力非常大;data-p_w_picpaths是放置后备镜像的逻辑卷,主要是读压力,非常小,不到一个IOPS。

      Windows Server 2003系统十台虚拟机重复循环删除、生成、启动时的系统IO压力:

      datavg-datapool是放置差量镜像的逻辑卷,可以看到写压力非常大,平均600多IOPS,最高达到5000多IOPS;data-p_w_picpaths是放置后备镜像的逻辑卷,主要是读压力,非常小,不到3 IOPS。

    3. 破坏性测试

      模拟后备镜像被破坏的情况,正在运行的虚拟机不会立即死机,而未启动的虚拟机在启动过程中会蓝屏。

  8. 将差量镜像转换成普通镜像

    使用qemu-img convert命令将差量镜像w2k3-test-01转换为普通镜像w2k3-test-01-10,格式为qcow2:

    qemu-img convert -f qcow2 -O qcow2 w2k3-test-01 w2k3-test-01-10
    qemu-img info w2k3-test-01
    p_w_picpath: w2k3-test-01
    file format: qcow2
    virtual size: 8.0G (8589934592 bytes)
    disk size: 122M
    cluster_size: 65536
    backing file: /data/win2003ent32chs
    
    qemu-img info w2k3-test-01-10
    p_w_picpath: w2k3-test-01-10
    file format: qcow2
    virtual size: 8.0G (8589934592 bytes)
    disk size: 3.3G
    cluster_size: 65536
  9. 更换镜像的后备镜像

    使用-u参数进行非安全方式的镜像更换;不带-u参数时,会比较旧的后备镜像和新的后备镜像的差异,以新的镜像为准:

    qemu-img rebase -u -b w2k3-test-01-10 w2k3-test-01
    qemu-img info w2k3-test-01
    p_w_picpath: w2k3-test-01
    file format: qcow2
    virtual size: 8.0G (8589934592 bytes)
    disk size: 122M
    cluster_size: 65536
    backing file: w2k3-test-01-10