11.2. 使用带有 libvirt 的 QEMU 客户机代理
安装 QEMU 客户机代理可让各种 libvirt 命令变得更加强大。客户机代理增强了以下 virsh 命令:
- virsh shutdown --mode=agent - 此关机方法比 virsh shutdown --mode=acpi 可靠,因为 QEMU 客户机代理使用的 virsh shutdown 可以保证以干净状态关闭合作虚拟机。如果代理不存在,libvirt 必须依赖于注入 ACPI 关闭事件,但有些客户机会忽略该事件,因此不会关闭。可与 virsh reboot 相同的语法一起使用。
- virsh snapshot-create --quiesce - 允许客户机在创建快照之前将其 I/O 清空到稳定状态,这允许使用快照而无需执行 fsck 或丢失部分数据库事务。通过提供客户机合作,客户机代理可以实现高级别的磁盘内容稳定性。
- virsh domfsfreeze 和 virsh domfsthaw - 隔离 guest 文件系统.
- virsh domfstrim - 结构 guest 以修剪其文件系统。
- virsh domtime - Queries 或 set the guest 的时钟.
- virsh setvcpus --guest - Instructs the guest 使 CPU 离线。
- virsh domifaddr --source 代理 - 通过客户机代理查询客户机操作系统的 IP 地址。
- virsh domfsinfo - 显示正在运行的客户端中挂载文件系统的列表。
- virsh set-user-password - 在 guest 中设置用户帐户的密码。
11.2.1. 创建客户机磁盘备份
libvirt 可以与 qemu-guest-agent 通信,以确保客户机虚拟机文件系统的快照在内部一致,并可根据需求使用。虚拟客户机系统管理员可编写和安装特定于应用程序的 freeze/thaw hook 脚本。在释放文件系统前,qemu-guest-agent 调用主 hook 脚本(包括在 qemu-guest-agent 软件包中)。freezing 进程临时取消激活所有客户机虚拟机应用程序。
快照过程由以下步骤组成:
- 文件系统应用/数据库将工作缓冲区清空到虚拟磁盘,并停止接受客户端连接
- 应用程序将其数据文件变为一致的状态
- 主 hook 脚本返回
- qemu-guest-agent 冻结文件系统,管理堆栈会拍摄快照
- 已确认快照
- 文件系统功能恢复
Thawing 以相反的顺序发生。
要创建客户端文件系统的快照,请运行 virsh snapshot-create --quiesce --disk-only 命令(此外,运行 virsh snapshot-create-as guest_name --quiesce --disk-only,在 第 20.39.2 节 “为当前客户机虚拟机创建快照”中进一步介绍)。
注意
应用程序特定的 hook 脚本可能需要各种 SELinux 权限才能正确运行,就像需要连接到套接字才能与数据库通信时所执行的操作。通常,应该针对这些目的开发并安装本地 SELinux 策略。访问文件系统节点应该开箱即用,在标记为
/etc/qemu-ga/fsfreeze-hook.d/
的表行中列出的 restorecon -FvvR 命令后。表 11.1 “QEMU 客户机代理软件包内容”
qemu-guest-agent 二进制 RPM 包括以下文件:
文件名 | 描述 |
---|---|
/usr/lib/systemd/system/qemu-guest-agent.service | 用于 QEMU 客户机代理的服务控制脚本(启动/停止)。 |
/etc/sysconfig/qemu-ga | QEMU 客户机代理的配置文件,因为它由 /usr/lib/systemd/system/qemu-guest-agent.service 控制脚本读取。设置记录在 文件中,shell 脚本注释。 |
/usr/bin/qemu-ga | QEMU 客户机代理二进制文件。 |
/etc/qemu-ga | hook 脚本的根目录。 |
/etc/qemu-ga/fsfreeze-hook | 主 hook 脚本。这里不需要修改。 |
/etc/qemu-ga/fsfreeze-hook.d | 单个、特定于应用程序的 hook 脚本的目录。客户机系统管理员应手动将 hook 脚本复制到这个目录中,确保它们的正确文件模式位,然后在该目录中运行 restorecon -FvvR。 |
/usr/share/qemu-kvm/qemu-ga/ | 带有示例脚本的目录(例如,仅用于使用)。此处包含的脚本不会执行。 |
主 hook 脚本
/etc/qemu-ga/fsfreeze-hook
可记录自己的消息,以及特定于应用程序的标准输出和错误消息: /var/log/qemu-ga/fsfreeze-hook.log
。如需更多信息,请参阅 libvirt 上游网站。