13.3. 优化 libvirt 守护进程
libvirt
虚拟化套件作为 RHEL hypervisor 的管理层,libvirt
配置对您的虚拟化主机有很大影响。值得注意的是,RHEL 9 包含两种不同类型的 libvirt
守护进程,即单体或模块化,您使用的守护进程类型会影响您可以配置单独的虚拟化驱动程序。
13.3.1. libvirt 守护进程的类型
RHEL 9 支持以下 libvirt
守护进程类型:
- 单体 libvirt
传统的
libvirt
守护进程libvirtd
通过使用单个配置文件 -/etc/libvirt/libvirtd.conf
控制各种虚拟化驱动程序。因此,
libvirtd
允许使用集中的虚拟机监控程序配置,但可能会导致对系统资源的使用效率低。因此,libvirtd
在以后的 RHEL 主发行版本中将不被支持。但是,如果您从 RHEL 8 更新至 RHEL 9,您的主机仍然默认使用
libvirtd
。- 模块 libvirt
RHEL 9 中新引入的模块
libvirt
为各个虚拟化驱动程序提供一个特定的守护进程。其中包括:- virtqemud - hypervisor 管理的主要守护进程
- virtinterfaced - 用于主机 NIC 管理的辅助守护进程
- virtnetworkd - 用于虚拟网络管理的辅助守护进程
- virtnodedevd - 主机物理设备管理的辅助守护进程
- virtnwfilterd - 主机防火墙管理的辅助守护进程
- virtsecretd - 用于主机 secret 管理的辅助守护进程
- virtstoraged - 用于存储管理的辅助守护进程
每个守护进程都有单独的配置文件 - 例如
/etc/libvirt/virtqemud.conf
。因此,模块化的libvirt
守护进程可以为调优libvirt
资源管理提供更好的选项。如果您执行了全新的 RHEL 9 安装,则会默认配置模块化的
libvirt
。
后续步骤
-
如果您的 RHEL 9 使用
libvirtd
,红帽建议切换到模块化守护进程。具体步骤请参阅启用模块化 libvirt 守护进程。
13.3.2. 启用模块化 libvirt 守护进程
在 RHEL 9 中,libvirt
库使用 modular 守护进程来处理您主机上的单个虚拟化驱动程序集。例如,virtqemud
守护进程处理 QEMU 驱动程序。
如果您执行了 RHEL 9 主机的全新安装,您的虚拟机监控程序默认使用模块化 libvirt
守护进程。但是,如果您将主机从 RHEL 8 升级到 RHEL 9,您的管理程序将使用单体 libvirtd
守护进程,这是 RHEL 8 中的默认设置。
如果是这种情况,红帽建议改为启用模块 libvirt
守护进程,因为它们为微调 libvirt
资源管理提供了更好的选项。另外,libvirtd
在以后的 RHEL 主发行版本中将不被支持。
先决条件
您的管理程序使用单体的
libvirtd
服务。# systemctl is-active libvirtd.service active
如果这个命令显示
active
,则代表在使用libvirtd
。- 您的虚拟机已关闭。
流程
停止
libvirtd
及其套接字。$ systemctl stop libvirtd.service $ systemctl stop libvirtd{,-ro,-admin,-tcp,-tls}.socket
禁用
libvirtd
以防止它在引导时启动。$ systemctl disable libvirtd.service $ systemctl disable libvirtd{,-ro,-admin,-tcp,-tls}.socket
启用模块
libvirt
守护进程。# for drv in qemu interface network nodedev nwfilter secret storage; do systemctl unmask virt${drv}d.service; systemctl unmask virt${drv}d{,-ro,-admin}.socket; systemctl enable virt${drv}d.service; systemctl enable virt${drv}d{,-ro,-admin}.socket; done
启动模块守护进程的套接字。
# for drv in qemu network nodedev nwfilter secret storage; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
可选:如果您需要从远程主机连接到主机,请启用并启动虚拟化代理守护进程。
检查
libvirtd-tls.socket
服务是否已在系统上启用了。# grep listen_tls /etc/libvirt/libvirtd.conf listen_tls = 0
如果
libvirtd-tls.socket
没启用(listen_tls = 0
),请激活virtproxyd
,如下所示:# systemctl unmask virtproxyd.service # systemctl unmask virtproxyd{,-ro,-admin}.socket # systemctl enable virtproxyd.service # systemctl enable virtproxyd{,-ro,-admin}.socket # systemctl start virtproxyd{,-ro,-admin}.socket
如果
libvirtd-tls.socket
启用了(listen_tls = 1
),请激活virtproxyd
,如下所示:# systemctl unmask virtproxyd.service # systemctl unmask virtproxyd{,-ro,-admin,-tls}.socket # systemctl enable virtproxyd.service # systemctl enable virtproxyd{,-ro,-admin,-tls}.socket # systemctl start virtproxyd{,-ro,-admin,-tls}.socket
要启用
virtproxyd
的 TLS 套接字,您的主机必须配置了 TLS 证书,以与libvirt
一起工作。如需更多信息,请参阅 上游 libvirt 文档。
验证
激活已启用的虚拟化守护进程。
# virsh uri qemu:///system
验证您的主机是否在使用
virtqemud
模块守护进程。# systemctl is-active virtqemud.service active
如果状态是
active
,则您已成功启用了模块libvirt
守护进程。