让 ceph 最小化文件部分在 OSD 上的传播

让 ceph 最小化文件部分在 OSD 上的传播

我正在考虑将 ceph 作为我自制的 MAID(大量空闲驱动器阵列)的分布式文件系统。

据我所知,Ceph 面向集群使用,将数据均匀分布在 OSD 上(相对于 CRUSH 图),并尝试利用不同节点上的读取操作并行性。

就我而言,我不需要最大化扩展和吞吐量,理想情况下它应该先填充 N 个 OSD(其中 N 是复制因子),然后再开始填充接下来的 N 个 OSD,以最小化相邻数据检索所需的活动驱动器数量。

我可以通过调整放置组数量和 CRUSH 图来实现这种行为吗?或者,如果不可能,我至少可以让 ceph 停止将文件拆分为多个块吗?

答案1

我认为 ceph 无法实现与你想要实现的目标类似的目标。据我所知,ceph 是一个分布式文件系统并且它通过使用复制来确保高容错能力。请阅读:

Ceph 的主要目标是实现完全分布式、无单点故障、可扩展至 EB 级别并且可免费使用。

ceph 的强大之处在于它的可扩展性和高可用性:

可扩展性和高可用性

在传统架构中,客户端与集中式组件(例如网关、代理、API、外观等)通信,该组件充当复杂子系统的单一入口点。这限制了性能和可扩展性,同时引入了单点故障(即,如果集中式组件发生故障,整个系统也会发生故障)。

Ceph 消除了集中式网关,使客户端能够直接与 Ceph OSD 守护进程交互。Ceph OSD 守护进程在其他 Ceph 节点上创建对象副本,以确保数据安全和高可用性。Ceph 还使用监视器集群来确保高可用性。为了消除集中化,Ceph 使用了一种称为 CRUSH 的算法。

我想指出的是,ceph 旨在确保集群环境中物理磁盘的使用,以确保更高的弹性、高可用性和透明度。这并不是你想要的。

如果你担心性能或磁盘 I/O,可以使用这个选项主要亲和力,例如,可以用于优先考虑 SAAS 磁盘而不是 SATA。阅读更多这里这里

主要亲和力

当 Ceph 客户端读取或写入数据时,它始终会联系在职集中的主 OSD。对于集 [2, 3, 4],osd.2 是主 OSD。有时,与其他 OSD 相比,某个 OSD 并不适合充当主 OSD(例如,它的磁盘或控制器速度较慢)。为了防止出现性能瓶颈(尤其是在读取操作时),同时最大限度地利用硬件,您可以设置 Ceph OSD 的主亲和性,以便 CRUSH 不太可能将该 OSD 用作在职集中的主 OSD。

ceph osd primary-affinity <osd-id> <weight>

默认情况下,主关联性为 1(即,OSD 可以充当主 OSD)。您可以将 OSD 主关联性范围设置为 0-1,其中 0 表示 OSD 不能用作主 OSD,1 表示 OSD 可以用作主 OSD。当权重小于 1 时,CRUSH 选择 Ceph OSD 守护进程充当主 OSD 的可能性较小。

我知道这并不能完全回答您的所有问题,但可能会提供一些值得思考的内容。

详情请见此处:http://docs.ceph.com/docs/master/rados/operations/crush-map/#primary-affinity

这里是一个很好的博客,解释 ceph 集群。

相关内容