![我应该如何在同时具有 SSD 和 HDD 且只有一张 RAID 卡的服务器上安装 KVM,以最大限度地利用我的硬件?](https://linux22.com/image/736505/%E6%88%91%E5%BA%94%E8%AF%A5%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%8C%E6%97%B6%E5%85%B7%E6%9C%89%20SSD%20%E5%92%8C%20HDD%20%E4%B8%94%E5%8F%AA%E6%9C%89%E4%B8%80%E5%BC%A0%20RAID%20%E5%8D%A1%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%AE%89%E8%A3%85%20KVM%EF%BC%8C%E4%BB%A5%E6%9C%80%E5%A4%A7%E9%99%90%E5%BA%A6%E5%9C%B0%E5%88%A9%E7%94%A8%E6%88%91%E7%9A%84%E7%A1%AC%E4%BB%B6%EF%BC%9F.png)
我在当地拍卖会上购买了一台戴尔 Poweredge,主要是因为这笔交易太划算了,但我只通过 AWS 和 Linode 使用过虚拟服务器(也就是说我是新手,所以这可能没有多大意义)。
我计划在 ubuntu 上安装 KVM 来启动许多虚拟 Linux 服务器来替换我的许多付费 VPS 实例,但我不确定如何最好地利用服务器硬件的所有资源。具体来说,规格如下:Dell R720、2x E5-2640 12 核(2.5 Ghz)、1 个 RAID 卡(PERC H710P Mini - 嵌入式)、128GB RAM、8.2TB 磁盘空间(2 个 SSD @ 每个 185GB;13 个 HDD @ 每个 558GB)。据我所知,似乎不建议同时使用 SSD 和 HDD 创建虚拟磁盘。我能想到的最佳选择是放弃 2 个 SSD 的性能,只使用所有驱动器来创建单个虚拟驱动器,然后安装并运行单个 ubuntu 实例(任意选择),在其中安装 KVM,然后通过 KVM 启动虚拟服务器。
再说一遍,我不确定我在这里说的是否合理,但如果有人能帮助我找到一个通过 KVM 最大限度利用硬件的好方法,我将非常感激。
编辑:我在 serverfault 上能找到最接近的问题是这个问题:我可以混合使用 SSD 和主轴 HDD 吗
编辑2:或者 KVM 本身提供了发现、连接和/或管理硬件资源的方法?
答案1
存储数量、性能和冗余度完全取决于您的要求。
您可以猜想将多个虚拟驱动器分配给单个 VM 是可能的。VM 将每个虚拟驱动器视为不同的块(如 /dev/vda 和 /dev/vdb)。
假设您的虚拟机应该具有 SSD 性能来进行系统启动和程序执行,并具有速度较慢但更大的存储空间来存储文件(如媒体)。
您可以将两个 SSD 组装成一个 RAID-1 阵列,并在该阵列上安装主机系统。您可以选择:将整个阵列用作主机系统,并将虚拟机 SSD 驱动器存储在一个目录中(不推荐),或者将主机系统安装在一个较小的分区中(尽可能小但要有余量),并将剩余空间用于其他分区,安装在 /mnt/guest-ssd/ 中(推荐)。
您可以将所有 HDD 组装在单个 RAID-10 或 RAID-5 阵列中,在 RAID 阵列上创建一个单独但非常大的分区,并将其安装在 /mnt/guest-hdd/ 中作为示例。
两个 RAID 阵列都将受益于冗余。由 HDD 组成的 RAID-10 或 RAID-5 阵列将获得比单个 HDD 更好的读写性能。
这种架构的第一个优点是:客户机的驱动器作为文件存储在两个分区/目录中,即 /mnt/guests-ssd/ 和 /mnt/guests-hdd/。可以轻松传输映像以进行备份或迁移。第二个优点是可以抽象出实际 HDD 的容量。/mnt/guests-hdd/ 中的虚拟驱动器可以小于或大于 558 GB。
这种方案的一个缺点是:您没有太多的 SSD 容量。如果 SSD 位于 RAID-1 阵列中,您将只能获得 185 GB 的 SSD 存储空间用于主机和客户系统。对于您可以用这么多 RAM 创建的虚拟机数量而言,这并不多。您的资源(RAM、SSD 和 HDD)之间可能存在不平衡,但这取决于您的需求。如果您想创建多个虚拟机进行存储,它们将需要小型 SSD(仅用于 OS + NFS/FTP/...)和大型 HDD。如果您想要许多带有数据库(大量 iops)或其他磁盘密集型应用程序的虚拟机,您应该用更大的 SSD 替换两个 SSD,并且可能用 SSD 替换一些 HDD。或者使用其他人建议的缓存解决方案。
知道您可以将块设备传递给虚拟机,并且 RAID 阵列作为块设备呈现给主机系统,您可以为虚拟机提供对 RAID 阵列的直接访问。虚拟机不会意识到此块背后的 RAID 机制,但这种方法不如前一种方法灵活:块的大小将是 HDD 大小的倍数。
如果一个虚拟机需要中等存储(500 GiB),您可以使用 2 个 HDD 创建一个 RAID-1 阵列,并将该块/阵列传递给虚拟机。
如果一个虚拟机需要大容量存储,您可以构建一个带有 4 个 HDD 的 RAID-10 阵列,这样它将获得一个具有冗余和改进的读/写性能的虚拟 1.1 TiB 驱动器(与单个 HDD 相比快 2 倍)。
如果一个虚拟机需要 XL 存储,您可以构建一个带有 8 个 HDD 的 RAID-10 阵列,这样您将获得具有冗余和改进的 r/w 性能的 2.2 TiB 块(与单个 HDD 相比快 4 倍)
您可以看到,有更多选择和更多配置需要进行。很少有场景需要这种设置。
或者 KVM 本身提供了发现、连接和/或管理硬件资源的方法?
KVM 不管理主机上的存储/驱动器。Libvirt 允许您配置存储池(本地、通过网络……),但它不会配置 RAID(硬件或软件),也不会为您构建架构,也不会代替您决定如何规划存储、网络、节点和其他资源。
您只能通过玩 KVM/libvirt 这个野兽来获得乐趣 ;)
答案2
我同意你不应该在同一个阵列中混合使用 SSD 和 HDD(PERC 控制器不是甚至允许它,如果我没记错的话)。
我将创建两个阵列:一个 SSD 用于操作系统和缓存,一个 HDD 用于原始图像存储。我可以看到两种不同的设置:
- 基于 lvmthin(HDD RAID6 或 10)+ lvmcache(SSD RAID1)的,以经典的 ext4 和/或 xfs 作为文件系统;
- 基于 ZFS 的磁盘阵列,在 SSD 上具有 L2ARC 分区。注意:PERC H710 不支持非 raid/passthrough 磁盘。这意味着与本机磁盘直通情况相比,这种设置会受到一定限制。您可以创建一个用作单个 vdev 的 RAID6/10 主阵列,或创建多个 RAID0 阵列以用于双向镜像 vdev。
无论如何,请仅将以上内容视为一般建议:您可以(并且应该)根据您的特定冗余和性能级别(原始帖子中未描述)调整它们。