Libvirt 简介

Libvirt是一个软件集合,便于使用者管理虚拟机和其他虚拟化功能,比如存储和网络接口管理等等。这些软件包括一个API库、一个daemon(libvirtd)和一个命令行工具(virsh)。Libvirt的主要目标是:提供一种单一的方式管理多种不同的虚拟化提供方式和hypervisor。比如,命令行“virsh list -- all”可以列出所有任何支持的、基于hypervisor的虚拟机,这就避免学习、使用不同hypervisor的特定工具。
“使用libvirt”,意味着使用virsh、virt-manager、virt-install等工具管理虚拟机,这些工具都是围绕着libvirt开发的。人们不再直接使用基于XEN的xm、或是qemu【注1】/qemu-kvm【注2】等二进制工具。
libvirt的主要功能包括:
  • 虚拟机管理:包括不同的领域生命周期操作,比如:启动、停止、暂停、保存、恢复和迁移。支持多种设备类型的热插拔操作,包括:磁盘、网卡、内存和CPU。
  • 远程机器支持:只要机器上运行了libvirt daemon,包括远程机器,所有的libvirt功能就都可以访问和使用。支持多种网络远程传输,使用最简单的SSH,不需要额外配置工作。比如:example.com运行了libvirt,而且允许SSH访问,下面的命令行就可以在远程的主机上使用virsh命令行。 (可参考 http://libvirt.org/remote.html )
virsh --connect qemu+ssh://root@example.com/system
  • 存储管理:任何运行了libvirt daemon的主机都可以用来管理不同类型的存储:创建不同格式的文件映像(qcow2、vmdk、raw等)、挂接NFS共享、列出现有的LVM卷组、创建新的LVM卷组和逻辑卷、对未处理过的磁盘设备分区、挂接iSCSI共享,等等等等。因为libvirt可以远程工作,所有这些都可以通过远程主机使用。(可参考http://libvirt.org/storage.html
  • 网络接口管理:任何运行了libvirt daemon的主机都可以用来管理物理和逻辑的网络接口。可以列出现有的接口卡,配置、创建接口,以及桥接、vlan和关联设备等,通过netcf都可以支持。
  • 虚拟NAT和基于路由的网络:任何运行了libvirt daemon的主机都可以用来管理和创建虚拟网络。Libvirt虚拟网络使用防火墙规则作为路由器,让虚拟机可以透明访问主机的网络。(可参考:http://libvirt.org/archnetwork.html
Libvirt支持的Hypervisor列表: http://libvirt.org/drivers.html
Libvirt基于GNU Lesser General Public License协议。


注1: QEMU 是一种处理器模拟器,依赖于动态二进制翻译机制,在易于移植至新的主机CPU架构的同时,还要获得合理的速度响应。除提供CPU模拟之外,它还提供了一系列设备模型,允许它运行多种未经修改的客户操作系统;因此QEMU可以被看做一个宿主虚拟机监控软件。它还提供了加速模式,以支持(供kernel code的)二进制翻译和原生执行(供user code)的混合方式,这与VMware Workstation和Microsoft VirtualPC相同。
QEMU 也可以用作纯用户级处理的CPU模拟,在这种运作模式下,它类似于Valgrind。
QEMU有一个特有的可移植性功能,虚拟机可以运行在任何PC之上,即使用户只有有限的权限,而且没有管理员访问权限也没有关系,这让“USB优盘上的PC”这一概念变得可行。也有类似的应用,比如MojoPac,但是它们需要管理员权限才能运行。
注2: KVM, Kernel-based Virtual machine 。KVM是一种Linux下的kernel虚拟化基础结构,它自身无法进行任何模拟。需要用户空间的程序使用/dev/kvm接口来设置客户虚拟机的地址空间,像其输入I/O,并将其视频显示映射至主机。QEMU自0.10.0之后可以使用KVM。

 

### 关于Libvirt迁移虚拟机的操作指南 在OpenStack环境中,`libvirt` 是负责执行虚拟机实时迁移的核心组件之一。以下是关于 `libvirt` 实现虚拟机迁移的相关操作以及常见错误解决方案。 #### 虚拟机迁移的基础原理 虚拟机的热迁移主要依赖于 Hypervisor 的功能实现,而 OpenStack Nova 则提供了封装和调度管理的能力。具体来说,在 Libvirt 中,迁移过程涉及以下几个关键步骤: 1. **准备目标主机环境**:确保目标主机上的存储路径可用,并准备好接收来自源主机的数据。 2. **传输内存状态**:通过网络协议(通常是 TCP 或 SSH)将虚拟机的当前内存状态逐步迁移到目标主机。 3. **同步磁盘数据**:如果使用的是共享存储,则无需额外处理;如果是非共享存储,则需要复制磁盘文件至目标主机[^1]。 #### 基于SSH的迁移配置 为了使 Libvirt 使用 SSH 协议进行迁移,需完成以下设置: - 确保两台主机之间可以通过 SSH 密钥认证无密码访问。 - 修改 `/etc/libvirt/qemu.conf` 文件中的参数以启用 SSH 支持: ```bash migrate_uri = "ssh://%s/system" ``` #### 解决迁移失败问题 (Error: Unable to find security driver for model selinux) 当遇到此错误时,通常是因为 SELinux 安全策略未正确加载或者不兼容所选的安全模型。可以尝试以下方法解决问题: 1. **验证SELinux模式** 检查当前系统的 SELinux 是否处于 enforcing 模式。如果不是,请调整为 enforcing 并重启服务: ```bash getenforce setenforce 1 systemctl restart libvirtd.service ``` 2. **安装必要的安全模块** 如果缺少特定的安全驱动程序,可能需要手动安装它们。例如对于 CentOS/RHEL 用户而言,应确认已安装 `selinux-policy-targeted` 和其他关联包。 3. **禁用SELinux测试** 若暂时无法解决冲突,可考虑临时关闭 SELinux 来排除干扰因素: ```bash sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config reboot ``` #### Rsync远程FS驱动的支持 针对某些场景下可能出现的性能瓶颈或复杂需求,社区提出了增强型方案——即利用 rsync 工具作为后台机制来优化文件系统级别的迁移效率。这一特性已被纳入官方蓝图规划之中[^2]。 ```python def enable_rsync_driver(): """ Enable the remote FS driver based on rsync. This function demonstrates enabling a feature via configuration changes. Returns: bool: True if successful, False otherwise. """ try: import subprocess # Example command to configure nova-compute service cmd = ["nova-manage", "config", "--set", "rsync_enabled=True"] result = subprocess.run(cmd, check=True) return True except Exception as e: print(f"Failed to enable rsync driver due to {e}") return False ``` 以上脚本仅为示意用途,实际部署前还需参照文档进一步完善细节。 --- ### Glance镜像服务简介及其作用 Glance 是 OpenStack 生态体系内的一个重要组成部分,专注于提供高效的虚拟机镜像管理和分发能力。它支持众多主流格式(如 QCOW2、RAW、VMDK 等),并且允许管理员轻松创建、修改甚至销毁这些资源实例[^3]。 尽管本文重点讨论了有关 Libvirt 的迁移技术要点及故障排查技巧,但值得注意的是,任何成功的跨节点迁移都离不开高质量基础架构支撑,其中包括但不限于可靠的网络连接质量、充足的计算能力和统一化的存储布局设计等方面考量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值