我的每个 ceph OSD 服务器都有一个单独的驱动器。每个 OSD 主机都有 4 个数据驱动器。一个日志驱动器可以服务这 4 个驱动器吗?日志驱动器是共享的吗?每个数据驱动器都应该有一个分区吗?
答案1
日志/数据分离
如果每个 OSD 主机只有这四个驱动器,并且所有驱动器的性能都相似,那么通常/推荐的设置是每个磁盘有一个 OSD(即每个服务器 4 个),并且每个 OSD 的日志文件都与数据位于同一磁盘上。
另一种流行的(至少在历史上)设置是将日志放在针对写入吞吐量和延迟进行优化的单独驱动器上;通常是 SSD,理想情况下是具有“断电保护”的 SSD,这样它们就可以快速确认“同步”写入,而不必写入闪存阵列(这可能会有点慢)。在这种设置中,通常在多个 OSD(数据)驱动器之间共享一个日志 SSD。例如,我们的 OSD 服务器有 8 或 10 个用于 Ceph OSD 的旋转锈蚀驱动器,日志分布在两个 SSD 上。
分区
如果您的数据和日志位于同一物理磁盘上,我个人会将它们放在同一分区/文件系统上。主要是因为我担心如果它们位于不同的分区上,那么当 OSD/文件系统在日志和(后台)数据写入之间交替时,会有大量磁头移动。我不确定这是否真的是个问题,在 SSD 上肯定不是。通常,单独的分区为您提供了一些优化机会,即不同的文件系统参数甚至文件系统类型,或者根本没有用于日志的文件系统。这是以操作复杂性为代价的,例如,当添加或更改日志的大小时,您需要重新对磁盘进行分区。
在我们的设置中,数据在旋转磁盘上,日志在(较少的)独立 SSD 上,每个旋转磁盘 (OSD) 都有一个分区,每个 SSD 上都有一个专用的“日志”分区;每个分区包含 4-5 个日志文件。我们的日志文件每个大小为 6 GiB,因此日志分区大约为 40 GB。
买者自负
这种设置是基于几年的经验以及对 SSD 寿命和文件系统/SSD 效率(延迟、吞吐量)的考虑而发展起来的。它不一定是最佳的,但它是一个棘手的领域……OSD 日志具有特殊的访问模式:仅写入循环缓冲区,并频繁进行“同步”。并且 SSD 的延迟(尤其是写入延迟)可能会因使用情况(以及控制器和文件系统智能性)而有很大差异;而且延迟峰值可能会因 Ceph 仅在 N(通常为 3)次写入已提交到稳定存储时才确认写入这一事实而加剧。总的来说,我认为这仍然有点(黑暗?)科学,您绝对需要接受预期使用模式因此,请谨慎对待所有建议,尤其是这里的建议。
哦,我所说的一切都是针对“经典” Ceph,其中数据存储在诸如 XFS/ext4/... 之类的文件系统中。随着即将推出的“BlueStore”,这些考虑可能不再(全部)适用。