我正在设置 Ceph 集群。客户要求在虚拟机中完成此操作,每个服务器一个虚拟机管理程序/VM。鉴于我之前(少量)使用虚拟机的经验,我想知道这是否会成为一个问题(虚拟机管理程序抽象硬件并使用其内置驱动程序等)。我的担心有道理吗?在硬件和运行 I/O(磁盘和磁盘控制器)和网络密集型应用程序(如 Ceph)的单个虚拟机之间放置 VM 是否可能会降低性能?
答案1
听起来……您的客户不了解 Ceph 的要求。
他们有多少虚拟机主机?
简短回答:
是的,你可以,但不建议这样做。
长答案:
是的,它会起作用。但性能可能会受到负面影响。当我说负面影响时,我的意思是潜在的负面影响。
请阅读硬件建议。
细节:
Ceph 确实希望将其数据写入由存储节点 (OSD) 控制的专用磁盘。在此之上添加另一个虚拟化层可能会严重影响性能。尤其是当它必须与其他 VM 共享该磁盘时。但如果是为了在几个团队成员之间进行测试,为什么不呢?
但对于生产来说。 请不要这样做。
除了 OSD 之外,您至少需要 3 个监视器。理想情况下,这些监视器应该在完全独立的机器上运行。因为如果不是这样,那么当主机断电或发生其他情况时,它们就无法恢复正常运行。如果发生这种情况,您将无法访问 ceph 集群。
另一个原因是,Ceph 在读取/写入 OSD 时需要大量 I/O。同一物理主机上的 OSD 越多,该主机上的网络接口就会变得越拥挤。这就是为什么您需要将负载分散到许多 OSD 和许多服务器之间。
话虽如此,我之前已经在 Xen 上虚拟化了监视器和元数据服务器。但我拥有的虚拟机主机非常强大,我为 ceph 提供了大量资源。所有这些主机上都有很大的可用网络带宽。事实上,它是 56Gbit FDR Infiniband。所以我真的不能说在受限的情况下运行它会是什么样子,我没有注意到这一点。
我也在 Amazon EC2 上启动过它。但同样,我使用了更高规格的设置进行测试。它在那里运行良好,但我们可以看到它受到虚拟化的影响。之前的测试是为了看看我们能否以更低的成本获得比 Amazon 预置的 IOPS 更快的性能。我们没有这样做,但这是一个有趣的测试。
关于半虚拟驱动程序等。是的,它们有帮助,但在我看来,SR-IOV 是更好的选择。
概括:
- 尽管它有效,但我们不推荐它。
- OSD 实际上不应该被虚拟化。
看看 Sage Weil 是否会在这里发表评论,这将会很有趣。如果我没记错的话,他以前做过这样的事情。