备份KVM虚拟机的方法

如何备份KVM虚拟机

如果你使用由libvirt管理的纯KVM虚拟化管理器,那么你可能仍然需要实施一种无代理的备份解决方案来保护数据。在本文中,我们将简要描述几种可能的情景。

Libvirt的部署差异很大。很难确定什么是“典型”的KVM设置,因此我们将描述一些关于如何处理该平台的数据保护主题的基本情景。

关键的区别在于虚拟机存储。这不仅是因为支持各种存储选项,还因为在虚拟机元数据中,你可以将libvirt指向任何任意文件或设备,用于作为存储。

虽然有存储池的概念,该概念标准化了存储的配置,但我们注意到一般情况下,要么KVM是作为更大解决方案的一部分使用 – 比如OpenStack(这是一个完全不同的主题),要么设置完全由管理员及其想象力决定。

 

让我们专注于几种情况:

  • 基于文件的存储使用RAW/QCOW2文件
  • 基于Ceph RBD的存储
  • 基于LVM的存储

所有这些都可以在无需在KVM主机上安装任何虚拟机的情况下进行保护。

RAW/QCOW2文件

基于文件的存储在KVM部署中得到了广泛应用。它简单,并提供了一些优势,比如薄配置和外部快照。

事实上,后者可以用于进行备份 – 当你想要使用libvirt创建外部快照时 – 无论是RAW还是QCOW2文件 – 结果都将是一个新的QCOW2增量文件,其中将写入VM的当前状态(一个“活动”快照)。

现在,如果你想创建增量备份,你只需要创建一个新的快照,并且只复制从上次“活动”快照开始的增量文件,但不包括当前的“活动”快照。因此,备份操作的最终结果实际上是一系列QCOW2文件的链(RAW文件只能出现在这样的链的基础上,因为即使对于RAW,每个外部快照也是一个QCOW2文件)。如果需要,这样的链可以合并。

在较新的libvirt版本中,你还可以使用dirty-block maps。现在,这是一个可以显着减少快照负担的概念,因为你不再需要旋转快照(如果你需要迁移VM或仅想要删除它们,这可能会很麻烦,因为需要合并数据)。

你可以在QCOW2文件中创建和存储检查点,然后可以使用它们列出自上次检查点以来的更改。因此,与获取增量文件相比,你只需要访问QCOW2文件的当前状态,并仅读取通过dirty-block映射返回的区块作为差异。

这种机制实际上是由oVirt使用的,但它是通过适当的服务进行覆盖的。对于常规独立主机,你还需要通过SSH或其他方法将数据传输到备份存储库。

 

Ceph RBD或其他SDS

Ceph RBD是一种相当流行的软件定义存储解决方案,即使在独立的KVM主机上也可以轻松使用。使用RBD卷时,你将获得两个优势。

首先,你不再需要担心快照链和在Hypervisor侧合并数据 – 因为你只在Ceph中直接创建快照,它们不依赖于彼此。

其次,传输可以发生在Hypervisor之外 – Ceph有一种非常高效的方式,可以直接从监视器导出块,因此你不会影响Hypervisor的性能。

“更改块跟踪”也可以轻松实现 – 你可以在Ceph中保留快照,而不是使用dirty-block映射,当你需要列出两个时间点之间的更改时,你可以请求快照差异。

这种方法对所有其他SDS解决方案都应该适用,但你只需要验证是否支持相应的功能。

 

LVM和磁盘阵列

总的来说,LVM在KVM世界中并不常用,但你可能希望使用磁盘阵列或类似的设备来实施这种策略。思路是在存储后端直接创建快照,而不改变libvirt配置中对当前状态的任何引用。

一旦完成,你可以直接从快照中读取数据。对于磁盘阵列,你需要以某种方式暴露LUN,并通过SAN读取数据。

可能需要注意的一件事是空间分配 – LVM可能需要指定快照大小,以便可以写入当前状态。快照的最大大小可能潜在地是卷本身的大小,因此你需要确保有足够的可用空间。

增量备份也可以使用滚动快照机制来实现,但不应期望CBT/快照差异的现成机制。如果在你的后端中可用,那么你应该使用它。如果没有,你将需要在每次备份时扫描已更改的块 – 尽管它可以节省空间,但这是一个耗时的过程。

 

其他方面

我认为我不需要提到你还需要虚拟机元数据 – libvirt将所有内容都提供为XML,因此你可以轻松地转储它,然后基于其内容定义新的虚拟机。

KVM还支持在创建快照期间冻结客户机文件系统的选项 – 它需要在客户机VM中安装一个代理,但这可能是具有应用一致备份的重要方面。

 

总结

保护KVM虚拟机可以以许多不同的方式实现。在本文中,我们涵盖了根据用于VM的存储类型使用的几种选项。Storware Backup&Recovery自几乎开始支持独立的KVM虚拟化管理器的备份 – 包括运行QCOW2 / RAW文件,Ceph RBD卷和LVM卷的VM。它还允许你执行自定义的快照前/后命令,因此你可以在必要时通过SSH使你的数据库静止。

text written by:

Marcin Kubacki, CSA at Storware