动态集群管理

每个池(pool)都有许多放置组(PG),CRUSH动态地将PGs映射到OSDs。当Ceph客户端存储对象时,CRUSH将每个对象映射到放置组

将对象映射到放置组将在ceph osd守护进程和Ceph客户端之间创建一个间接层。 Ceph存储集群必须能够增长(或收缩),并重新平衡动态存储对象的位置。 如果Ceph客户端“知道”哪个ceph osd守护进程有哪个对象,那么Ceph客户端和ceph osd守护进程之间就会产生一个紧密耦合。 相反,CRUSH算法将每个对象映射到一个放置组,然后将每个放置组映射到一个或多个ceph osd守护进程。 这一间接层允许Ceph在新的ceph osd守护进程和底层OSD设备上线时动态重新平衡。下图描述了CRUSH如何将对象映射到放置组,以及将放置组映射到OSD。

有了集群映射的副本和CRUSH算法,客户端就可以准确地计算出在读写特定对象时应该使用哪个OSD

计算放置组ID

Ceph客户端绑定到Ceph mon时,它将检索集群映射的最新副本。通过集群映射,客户获取集群中的所有monOSDmds信息。但是,它对对象位置一无所知。

计算过程

。这很简单:Ceph将数据存储在命名池中(例如,“liverpool”)。 当客户端想要存储一个命名对象(例如,“john”、“paul”、“george”、“ringo”等)时,它使用对象名、哈希码、池中的PGs数量和池名计算放置组。Ceph客户端使用以下步骤计算PG id

  • 1、客户端输入对象IDpool

  • 2、Ceph获取对象ID并对其进行哈希运算

  • 3、Ceph计算pg数的哈希模,(例如,58)获取PG ID

  • 4、Ceph获取给定池名的池ID(例如,“liverpool”=4)

  • 5、Ceph将池ID前置到PG ID(例如,4.58)。

重新平衡

当你将ceph osd守护进程添加到Ceph存储集群时,集群映射会随着新的OSD更新。再次计算PG id,这将更改集群映射。 下面的图描述了重新平衡的过程(虽然很粗略,因为在大型集群中影响更小), 其中一些(但不是所有)pg从现有OSD (OSD 1和OSD 2)迁移到新的OSD (OSD 3)。即使在重新平衡时,崩溃也是稳定的。 许多放置组保持原来的配置,每个OSD增加了一些容量,因此在重新平衡完成后,新OSD上不会出现负载峰值。

数据一致性

作为维护数据一致性和清洁度的一部分,ceph osd还可以清理放置组中的对象。 也就是说,ceph osd可以将一个放置组中的对象元数据与其存储在其他OSD中的放置组中的副本进行比较。 清理(通常每天执行)捕获OSD错误或文件系统错误。 OSD还可以通过逐位比较对象中的数据来执行更深入的清理。深度清理(通常每周执行一次)会在磁盘上发现在轻度清理时不明显的坏扇区。

Copyright © weiliang 2021 all right reserved,powered by Gitbook本书发布时间: 2024-04-22 16:03:41

results matching ""

    No results matching ""