KVM/libvirt 主机和客户机之间共享的 LVM 卷组:这是一个坏主意吗?

KVM/libvirt 主机和客户机之间共享的 LVM 卷组:这是一个坏主意吗?

我刚刚构建了一个基于 KVM/libvirt 的全新虚拟机主机,包含 4 个 SATA II 硬盘,运行 CentOS 5.5 x86_64。

我决定将虚拟机磁盘创建为逻辑卷在作为 libvirt 存储池进行管理的 LVM 卷组中,而不是像通常那样将磁盘创建为 qcow 映像。

我无法决定的事情是我是否应该在 VM 主机的卷组中还是在专用卷组中创建虚拟机逻辑卷。

我应该选择哪种方法?为什么?


方法 1:使用 VM 主机的卷组

执行:

  • md0包含/boot文件系统的小型 RAID1
  • md1占用剩余空间的大型 RAID10 ,其中包含一个 LVM 卷组vghostvghost包含 VM 主机的根文件系统和交换分区
  • vghost根据需要创建虚拟机磁盘作为逻辑卷

优点:

  • 如果虚拟机主机的根文件系统空间不足,我可以vghost相对轻松地分配更多空间
  • 系统已经启动并运行(但重新开始也没什么大不了的)

缺点:

尽管这种方法似乎有效,但我还是觉得这是一个坏主意。我觉得:

  • 这可能存在安全风险
  • 在将来的某个时候,我可能会发现设置存在一些限制,并希望我使用专门的组
  • 系统(CentOS、libvirt 等)可能不是专门设计用来这样的,因此在某些时候我可能会意外损坏/丢失 VM 主机的文件和/或文件系统

方法 2:使用专用卷组

执行:

  • md0md1方法 1相同,但md1大小要刚好足以容纳 VM 主机(例如 5 到 10GB)
  • md2占用剩余空间的大型 RAID10 。md2包含一个 LVM 卷组vgvms,其逻辑卷将由虚拟机独占使用

优点:

  • 我可以随意摆弄,vgvms不用担心破坏主机操作系统
  • 这似乎是一个更优雅和安全的解决方案

缺点:

  • 如果 VM 主机的文件系统空间不足,我将不得不将其文件系统的部分内容(例如 /usr 或 /var)移动到vgvms,这似乎不太好。
  • 我必须重新安装主机操作系统(如前所述,我并不介意这样做)

更新 #1:

我担心方法 2 中 VM 主机磁盘空间不足的原因之一是,我不知道 VM 主机是否足够强大,可以运行虚拟机中的所有服务,即我可能必须将部分/所有服务从虚拟机迁移到主机操作系统。

VM 主机硬件规格:

  • Phenom II 955 X4 Black Edition 处理器(3.2GHz,4 核 CPU)
  • 2x4GB 金士顿 PC3-10600 DDR3 内存
  • 技嘉GA-880GM-USB3主板
  • 4 个 WD Caviar RE3 500GB SATA II 硬盘 (7200rpm)
  • Antec BP500U Basiq 500W ATX 电源
  • CoolerMaster CM 690 机箱

更新 #2:

我认为系统可能没有设计为在方法 1 中使用主机 VG 作为 libvirt 存储池的一个原因是我在 virt-manager 中注意到的一些行为:

  • 添加后,它抱怨无法激活 VG(显然,因为主机操作系统已经激活了它)
  • 删除后,它拒绝这样做,因为它无法停用 VG(显然,因为主机操作系统仍在使用根和交换 LV)

答案1

经过深思熟虑的问题!

我会选择方法 2,但这更多的是个人偏好问题。对我来说,方法 2 的缺点不是什么大问题。我认为主机操作系统不会超出其 5-10GB 分区,除非您开始在其上安装额外的东西,但您真的不应该这样做。为了简单和安全起见,主机操作系统实际上应该是最小安装,除了管理所需的最低限度(例如 sshd)之外不运行任何其他东西。

在我看来,方法 1 的缺点也不是什么大问题。我认为不会有任何额外的安全风险,因为如果根 VM 能够以某种方式突破其分区并感染/损坏其他分区,则将主机操作系统放在单独的 VG 上可能没有任何区别。其他两个缺点不是我能从直接经验中说出来的,但我的直觉告诉我,CentOS、LVM 和 libvirt 足够灵活和强大,不用担心它们。

编辑-对更新 1 的回复

如今,虚拟化对性能的影响非常小,尤其是使用内置支持虚拟化的处理器时,因此我认为将服务从客户虚拟机移至主机操作系统是不值得的。可能通过在“裸机”上运行可获得 10% 的速度提升,但您将失去拥有小型、紧凑、安全的主机操作系统的好处,并可能影响整个服务器的稳定性。在我看来,不值得。

鉴于此,我仍然倾向于方法 2。

对更新 2 的回应

看来 libvirt 假设存储布局的特定方式是支持方法 2 的另一个观点。我的建议是:采用方法 2。

答案2

只要任何时候只有一个系统尝试以读/写模式使用任何给定的 LV,就可以为主机和客户机使用相同的 VG。如果多个系统尝试写入同一个 LV,则会导致文件系统损坏。

答案3

您可能想看看这个,也许修补一下,看看这个项目是如何实现您所谈论的功能的。

ProxmoxVE 是一台裸机 KVM 主机,它使用 libvirt 的 perl 实现,而不是 RHEL 的较重版本。它实现了这两种场景。

虚拟磁盘是.raw且稀疏的,类似于.qcow但速度更快。

qcow 和 vmdk 磁盘映像格式也受支持,但我认为可能涉及 LVM 限制。我不使用它们,所以我对此不能说太多。

LVM 存储在节点上的 VM 之间共享,可以是 DRBD 设备。

至于共享操作系统的 VG 空间,唯一需要关注的限制是备份期间的快照大小。此处可以在配置文件中更改此值,我有时在论坛上看到人们不得不更改它,但默认设置已经为我服务了好几年 - 即使使用巨大的虚拟磁盘也是如此。

PVE的LVM存储细节:

http://pve.proxmox.com/wiki/Storage_Model#LVM_Groups_with_Network_Backing

VG 的布局如下:

使用元数据类型 lvm2 找到卷组“LDatastore1”

使用元数据类型 lvm2 找到卷组“LDatastore0”

使用元数据类型 lvm2 找到卷组“pve”

这些是我的 LV:

ACTIVE '/dev/LDatastore1/vm-9098-disk-1' [4.00 GB] 继承

ACTIVE '/dev/LDatastore1/vm-7060-disk-1' [2.00 GB] 继承

ACTIVE '/dev/LDatastore1/vm-5555-disk-1' [8.00 GB] 继承

ACTIVE '/dev/LDatastore0/vm-4017-disk-1' [8.00 GB] 继承

ACTIVE '/dev/LDatastore0/vm-4017-disk-2' [512.00 GB] 继承

ACTIVE '/dev/LDatastore0/vm-7057-disk-1' [32.00 GB] 继承

ACTIVE '/dev/LDatastore0/vm-7055-disk-1' [32.00 GB] 继承

ACTIVE ‘/dev/LDatastore0/vm-6030-disk-1’ [80.01 GB] 继承

ACTIVE ‘/dev/pve/swap’ [3.62 GB] 继承

ACTIVE'/dev/pve/root' [7.25 GB] 继承

ACTIVE'/dev/pve/data' [14.80 GB] 继承

这是由 6 个 7200 rpm Seagate Barracuda SATA 驱动器组成的 RAID10 上的 LVM:

CPU BOGOMIPS:53199.93

正则表达式/秒:824835

高清大小:19.69 GB (/dev/mapper/LDatastore0-testlv)

缓冲读取:315.17 MB/秒

平均寻道时间:7.18 毫秒

FSYNC/秒:2439.31

这是单个 Intel X25-E SATA SSD 上的 LVM,与前面提到的虚拟机所在的 /dev/pve/data 相同的 VG:

CPU BOGOMIPS:53203.97

正则表达式/秒:825323

高清大小:7.14 GB (/dev/mapper/pve-root)

缓冲读取:198.52 MB/秒

平均寻道时间:0.26 毫秒

FSYNC/秒:1867.56

相关内容