![超过所需内存对 Ceph BlueStore OSD 有益吗?](https://linux22.com/image/737219/%E8%B6%85%E8%BF%87%E6%89%80%E9%9C%80%E5%86%85%E5%AD%98%E5%AF%B9%20Ceph%20BlueStore%20OSD%20%E6%9C%89%E7%9B%8A%E5%90%97%EF%BC%9F.png)
我有一组服务器,每台服务器都有 128GB 或 RAM 和 6 个 2TB 旋转磁盘,专门用于 BlueStore OSD。这些服务器也像 KVM 主机一样运行,因此它们不是 Ceph 专用的。过去使用 FileStore 时,我们注意到如果服务器的可用内存较低(例如 10-20G),则该主机上的 OSD 开始执行比其他主机更多的 IO,这通常会减慢整个集群的速度。现在使用 BlueStore,我可以看到每个 OSD 守护进程都保留了大约 3-4GB 的内存用于缓存。为了安全起见,我为每个服务器的每个 OSD 保留了 5GB,不会花在虚拟机上。
我的问题是,现在主机有多少可用内存对性能是否重要?我是否需要像以前一样在没有 OSD 的主机上打包大多数虚拟机?或者只要我不遇到 OOM 情况,我就不需要考虑这个问题?
我正在使用 Ceph 14.2.0。
答案1
Linux 清除文件系统缓存的速度比清除匿名或共享内存页面的速度快得多。因此,在内存压力下,您会丢失缓存,并对驱动器执行更多的 IOPS。原始设备访问不使用文件。
https://ceph.com/community/new-luminous-bluestore/
内存使用情况
FileStore 的一个优点是它使用普通的 Linux 文件系统,这意味着内核负责管理用于缓存数据和元数据的内存。具体来说,内核可以使用所有可用的 RAM 作为缓存,然后在需要内存用于其他用途时立即释放。由于 BlueStore 是在用户空间中作为 OSD 的一部分实现的,因此我们可以管理自己的缓存,并且可以使用的内存管理工具更少。
最重要的是,BlueStore 有一个 bluestore_cache_size 配置选项,用于控制每个 OSD 将使用多少内存作为 BlueStore 缓存。默认情况下,对于 HDD 支持的 OSD,该内存为 1 GB;对于 SSD 支持的 OSD,该内存为 3 GB,但您可以将其设置为适合您环境的任何值。(有关更多信息,请参阅 BlueStore 配置指南。)
(相比之下,许多数据库使用文件加上自己的缓存。但绕过它也是一个有效的选择。)
以前,您需要将数十 GB 的大小设置为文件系统缓存。现在,其中大部分已移至固定大小的匿名页面。您仍然需要缓存来降低虚拟机工作负载的 IOPS。如果您有足够的空间来实现这一点,将存储和计算主机分开可能更简单。