我刚刚构建了一个基于 KVM/libvirt 的全新虚拟机主机,包含 4 个 SATA II 硬盘,运行 CentOS 5.5 x86_64。
我决定将虚拟机磁盘创建为逻辑卷在作为 libvirt 存储池进行管理的 LVM 卷组中,而不是像通常那样将磁盘创建为 qcow 映像。
我无法决定的事情是我是否应该在 VM 主机的卷组中还是在专用卷组中创建虚拟机逻辑卷。
我应该选择哪种方法?为什么?
方法 1:使用 VM 主机的卷组
执行:
md0
包含/boot
文件系统的小型 RAID1md1
占用剩余空间的大型 RAID10 ,其中包含一个 LVM 卷组vghost
。vghost
包含 VM 主机的根文件系统和交换分区vghost
根据需要创建虚拟机磁盘作为逻辑卷
优点:
- 如果虚拟机主机的根文件系统空间不足,我可以
vghost
相对轻松地分配更多空间 - 系统已经启动并运行(但重新开始也没什么大不了的)
缺点:
尽管这种方法似乎有效,但我还是觉得这是一个坏主意。我觉得:
- 这可能存在安全风险
- 在将来的某个时候,我可能会发现设置存在一些限制,并希望我使用专门的组
- 系统(CentOS、libvirt 等)可能不是专门设计用来这样的,因此在某些时候我可能会意外损坏/丢失 VM 主机的文件和/或文件系统
方法 2:使用专用卷组
执行:
md0
与md1
方法 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