Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第 11 章 使用 QEMU 客户机代理和 SPICE 代理增强虚拟化

可以部署 Red Hat Enterprise Linux 中的代理,如 QEMU 客户机代理和 SPICE 代理,以帮助虚拟化工具在您的系统中运行更加最佳。本章介绍了这些代理。
注意
要进一步优化和调整主机和客户机性能,请参阅 Red Hat Enterprise Linux 7 虚拟化调整和优化指南

11.1. QEMU 客户机代理

QEMU 客户机代理在客户机中运行,并允许主机使用 libvirt 向客户机操作系统发出命令,帮助有 freezing 和 thawing 文件系统等功能。然后,客户端操作系统会异步响应这些命令。在 Red Hat Enterprise Linux 7 中,QEMU 客户机代理软件包 qemu-guest-agent 默认安装。
这部分论述了客户端代理可用的 libvirt 命令和选项。
重要
请注意,只有在受信任的客户机运行时,才安全地依赖 QEMU 客户机代理。不受信任的访客可能会恶意忽略或滥用客户机代理协议,虽然存在内置保护机制以防止对主机上的服务攻击进行拒绝,主机需要客户合作才能正常运行。
请注意,QEMU 客户机代理可用于在客户机运行时启用和禁用虚拟 CPU(vCPU),从而在不使用热插拔和热拔功能的情况下调整 vCPU 数量。如需更多信息,请参阅 第 20.36.6 节 “配置虚拟 CPU 数”

11.1.1. 设置 QEMU 客户机代理和主机之间的通信

主机机器通过主机和客户机机器之间的 VirtIO 串行连接与 QEMU 客户机代理通信。VirtIO 串行通道通过字符设备驱动程序(通常是 Unix 套接字)连接到主机,客户机则侦听此串行通道。
注意
qemu-guest-agent 不会检测主机是否侦听 VirtIO 串行频道。但是,由于此频道的当前用途是侦听主机到客户机事件,因此通过写入没有监听器的频道来出现问题的客户机虚拟机的概率非常低。另外,qemu-guest-agent 协议包含同步标记,它允许主机物理机器在发出命令时强制客户端虚拟机同步,并且 libvirt 已使用这些标记,因此客户机虚拟机能够安全地丢弃任何早期待处理的未发响应。

11.1.1.1. 在 Linux 客户机上配置 QEMU 客户机代理

可在正在运行或关闭虚拟机上配置 QEMU 客户机代理。如果在正在运行的虚拟客户机中配置了,客户机将立即开始使用客户机代理。如果 guest 关闭,则将在下次引导时启用 QEMU 客户机代理。
virshvirt-manager 可用于配置客户机和 QEMU 客户机代理之间的通信。下面的说明描述了如何在 Linux 客户端中配置 QEMU 客户机代理。

过程 11.1. 在关闭 Linux 客户机中使用 virsh 设置客户机代理与主机之间的通信

  1. 关闭虚拟机

    在配置 QEMU 客户机代理前,请确定虚拟机(本例中为 rhel 7)被关闭:
    # virsh shutdown rhel7 
  2. 在客户机 XML 配置中添加 QEMU 客户机代理频道

    编辑客户机的 XML 文件以添加 QEMU 客户机代理详情:
    # virsh edit rhel7
    在客户机的 XML 文件中添加以下内容并保存更改:
    <channel type='unix'>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
  3. 启动虚拟机

    # virsh start rhel7
  4. 在客户端中安装 QEMU 客户机代理

    安装 QEMU 客户机代理(如果尚未在客户机虚拟机中安装):
    # yum install qemu-guest-agent
  5. 在客户机中启动 QEMU 客户机代理

    在客户机中启动 QEMU 客户机代理服务:
    # systemctl start qemu-guest-agent
另外,可以使用以下步骤在运行的客户机中配置 QEMU 客户机代理:

过程 11.2. 在正在运行的 Linux 客户机中设置客户机代理和主机之间的通信

  1. 为 QEMU 客户机代理创建 XML 文件

    # cat agent.xml
    <channel type='unix'>
       <target type='virtio' name='org.qemu.guest_agent.0'/>
    </channel>
  2. 将 QEMU 客户机代理附加到虚拟机

    使用以下命令,将 QEMU 客户机代理附加到正在运行的虚拟机(本例中为 rhel7 ):
    # virsh attach-device rhel7 agent.xml
  3. 在客户端中安装 QEMU 客户机代理

    安装 QEMU 客户机代理(如果尚未在客户机虚拟机中安装):
    # yum install qemu-guest-agent
  4. 在客户机中启动 QEMU 客户机代理

    在客户机中启动 QEMU 客户机代理服务:
    # systemctl start qemu-guest-agent

过程 11.3. 使用 virt-manager在 QEMU 客户机代理和主机间设置通信

  1. 关闭虚拟机

    在配置 QEMU 客户机代理前,确保虚拟机已关闭。
    要关闭虚拟机,请从 Virtual Machine Manager 中的虚拟机列表中选择,然后单击菜单栏中的 light 开关图标。
  2. 将 QEMU 客户机代理频道添加到客户端

    单击 guest 窗口顶部的 lightbulb 图标,打开虚拟机的硬件详细信息。
    点击 Add Hardware 按钮,打开 Add New Virtual Hardware 窗口,然后选择 Channel
    Name 下拉列表中选择 QEMU 客户机代理并点 Finish:

    图 11.1. 选择 QEMU 客户机代理频道设备

    选择 QEMU 客户机代理频道设备
  3. 启动虚拟机

    要启动虚拟机,请从 Virtual Machine Manager 中的虚拟机列表中选择,然后点击
  4. 在客户端中安装 QEMU 客户机代理

    使用 virt-manager 打开客户端,如果尚未在客户机虚拟机中安装 QEMU 客户机代理:
    # yum install qemu-guest-agent
  5. 在客户机中启动 QEMU 客户机代理

    在客户机中启动 QEMU 客户机代理服务:
    # systemctl start qemu-guest-agent
QEMU 客户机代理现在在 rhel7 虚拟机上配置。