我发现我们的一台服务器在 VMWware 虚拟机中运行,并且它有一个软件 RAID。
在接下来的几天内无法联系管理员。
我认为虚拟机中的软件 RAID 没有意义。我认为 RAID 应该由虚拟机管理程序处理,而不是在虚拟机内部处理。
这样做的可行原因是什么?
cat /proc/mdstat
Personalities : [raid10]
md127 : active raid10 sde1[3] sdc1[1] sdb1[0] sdd1[2]
209712128 blocks super 1.0 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 0/2 pages [0KB], 65536KB chunk
unused devices: <none>
答案1
一般而言,大多数时候这样做是没有意义的。
然而,有少数特殊情况确实有意义(这不是一个详尽的清单,只是我能想到的东西):
- 管理员知道如何在 Linux 上设置软件 RAID 阵列,但不知道如何在 VMWare 上设置,因此他将其设置在他知道可以正确管理的地方。鉴于您没有提供有关服务器的太多其他信息,这将是我对您的特定情况的第一个猜测。
- 如果无论如何都必须使用软件 RAID,那么在 VM 内部处理可能比在外部处理更有效率。对于您使用的任何特定 VMWare 产品,情况可能如此,也可能不如此(我怀疑 ESXi 不会如此,但如果是其他一些 VMWare 产品,我也不会感到惊讶)。
- 如果客户机在物理服务器上开始运行,然后您需要对其进行虚拟化,那么在客户机中保持存储堆栈原样更有意义,因为这样简化了转换过程并减少了由于配置不同而导致客户机中某些东西停止工作的可能性。
- 如果虚拟机的目的是测试将在真实硬件上使用的特定软件配置,则虚拟机内部的配置应尽可能接近在真实硬件上实际使用的配置,其中包括使用相同的存储堆栈。
- 这里不是这种情况,但如果在虚拟机内部使用 BTRFS/ZFS 而不在外部使用,则在虚拟机内部进行任何复制和/或奇偶校验更有意义,这样您就可以充分利用 BTRFS/ZFS 提供的块校验和进行错误恢复。如果您在主机上使用 BTRFS 或 ZFS 作为存储后端,但不在客户机内部使用它们,则可以反向应用相同的论点。
- 如果需要将每个副本存储在物理上独立的硬件上,那么通过将 RAID 层放入 VM 中可能更容易实现这一点。这可以通过 Linux 上的 QEMU 和 iSCSI 上的磁盘轻松实现,使用主机上的 RAID 层,您必须通过主机块层内的多个层路由事物,而将 RAID 层放入 VM 中意味着您甚至不必接触主机的块层(因为 QEMU 本身就可以使用 iSCSI)。
- 无论客户操作系统中运行的是什么应用程序,实际上都可能关心复制的细粒度控制或与其相关的详细性能统计信息,如果在主机上处理 RAID 阵列,则这两者都不容易提供。