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

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

我决定将虚拟机磁盘创build为作为libvirt存储池pipe理的LVM卷组中的逻辑卷,而不是将磁盘创build为qcow映像。

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

我应该select哪种方法,为什么?


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

执行:

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

优点:

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

缺点:

Depsite事实上,这种方法似乎工作,我不能动摇这是一个坏主意的感觉。 我觉得:

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

方法2:使用专用的卷组

执行:

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

优点:

  • 我可以修补vgvms而不用担心打破主机操作系统
  • 这似乎是一个更优雅和安全的解决scheme

缺点:

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

更新#1:

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

VM主机硬件规格:

  • 羿龙II 955 X4黑色版处理器(3.2GHz,4核CPU)
  • 2x4GB金士顿PC3-10600 DDR3内存
  • 技嘉GA-880GM-USB3主板
  • 4倍WD Caviar RE3 500GB SATA II硬盘(7200转)
  • 安titanium克BP500U Basiq 500W ATX电源
  • CoolerMaster CM 690的情况

更新#2:

为什么我觉得这个系统可能没有被devise成在方法1中使用主机VG作为libvirt存储池的一个原因是我在virt-manager中注意到的一些行为:

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

深思熟虑的问题!

我会用方法2,但更多的是个人喜好。 对我来说,方法2的缺点并不是什么大问题。 我没有看到主机操作系统超过了它的5-10GB分区,除非你开始在其上安装额外的东西,你真的不应该这样做。 为了简单和安全起见,主机操作系统应该是最低限度的安装,除了最低限度的pipe理(例如sshd)之外,不能运行任何东西。

方法1缺点也不是真正的问题,国际海事组织。 我不认为会有任何额外的安全风险,因为如果一个根植的虚拟机在某种程度上能够突破其分区并感染/破坏其他分区,那么将主机操作系统放在一个单独的VG上可能没有什么区别。 另外两个缺点我不能直接从经验中得知,但是我的直觉是,CentOS,LVM和libvirt足够灵活和强大,不用担心它们。

编辑 – 对更新1的回应

现在,虚拟化的性能受到很大影响,尤其是使用支持内置处理器的处理器,所以我不认为将客户虚拟机中的服务移动到主机操作系统是值得的。 通过运行“裸机”,速度可能会提升10%,但是您将失去拥有小型,紧凑,安全主机操作系统的好处,并且可能影响整个服务器的稳定性。 不值得,国际海事组织。

鉴于此,我仍然赞成方法2。

对更新2的回应

似乎libvirt假设存储的特定方式是另一个有利于方法2的方面。我的build议是:使用方法2。

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

你可能想看看这个,也许修补,看看这个项目如何做你在说什么。

ProxmoxVE是一个裸机KVM主机,它使用libvirt的perl实现,而不是RHEL的较重对手。 它实现了两种情况。

虚拟磁盘是.raw和稀疏,类似于.qcow但更快。

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

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

至于共享操作系统的VG空间,唯一需要考虑的限制是备份期间的快照大小。 这个值可以在一个configuration文件中改变,有时我会在论坛上看到人们不得不改变它,但是默认情况已经好几年了 – 即使是大型的虚拟磁盘。

PVE的LVM存储细节:

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

这是如何布置VG的:

find使用元数据typeslvm2的卷组“LDatastore1”

find使用元数据typeslvm2的卷组“LDatastore0”

find使用元数据typeslvm2的卷组“pve”

这些是我的LV:

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

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

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

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

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

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

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

ACTIVE'/ dev / LDatastore0 / vm-6030-disk-1'[80.01 GB]inheritance

ACTIVE'/ dev / pve / swap'[3.62 GB]inheritance

ACTIVE'/ dev / pve / root'[7.25 GB]inheritance

ACTIVE'/ dev / pve / data'[14.80 GB]inheritance

这是RAID10上的LVM,由6个7200转的希捷Barracuda SATA硬盘组成:

CPU BOGOMIPS:53199.93

REGEX / SECOND:824835

HD SIZE:19.69 GB(/ dev / mapper / LDatastore0-testlv)

缓冲读取:315.17 MB /秒

平均search时间:7.18毫秒

FSYNCS / SECOND:2439.31

这是单个Intel X25-E SATA SSD上的LVM,与上面提到的/ dev / pve / data中的VM相同的VG:

CPU BOGOMIPS:53203.97

REGEX / SECOND:825323

HD SIZE:7.14 GB(/ dev / mapper / pve-root)

缓冲读取:198.52 MB /秒

平均search时间:0.26毫秒

FSYNCS / SECOND:1867.56