搜索

2.3. Ceph 放置组

download PDF

在集群中存储数百万对象,单独管理是资源密集型。因此,Ceph 使用放置组(PG)更有效地管理大量对象。

PG 是池的一个子集,用于包含一组对象。Ceph 将池分片到一系列 PG 中。然后,CRUSH 算法将集群映射和集群的状态纳入帐户,并将 PG 平均和伪随机分发到集群中的 OSD。

下面是它的运作方式。

当系统管理员创建池时,CRUSH 会为池创建用户定义的 PG 数量。通常,PG 的数量应当是数据的一个合理的细粒度子集。例如,每个池每个 OSD 有 100 个 PG,这意味着每个 PG 大约包含池数据的 1%。

当 Ceph 从一个 OSD 从一个 OSD 移到另一个 OSD 时,PG 的数量会对性能产生影响。如果池中 PG 数量太少,Ceph 将同时迁移大量数据百分比,网络负载会对集群的性能造成负面影响。如果池太多 PG,Ceph 在移动数据的小百分比时将使用过多的 CPU 和 RAM,从而给集群的性能造成负面影响。有关计算用于实现最佳性能的 PG 数量的详情,请参阅 放置组计数

Ceph 通过存储对象的副本或存储对象的纠删代码区块来确保数据丢失。由于 Ceph 将对象或纠删代码区块存储在 PG 中,因此 Ceph 将每个 PG 复制到一组 OSD 中,为对象的每个副本或对象的每个纠删代码区块复制了名为"Acting Set"的 OSD 中。系统管理员可以确定池中 PG 数量以及副本或纠删代码区块的数量。但是,CRUSH 算法会计算用于特定 PG 执行的 OSD。

CRUSH 算法和 PG 使 Ceph 动态化。集群映射或集群状态的更改可能会导致 Ceph 将 PG 从一个 OSD 移动到另一个 OSD。

以下是几个示例:

  • 扩展集群: 在向集群添加新主机及其 OSD 时,集群映射会改变。由于 CRUSH 平均而伪随机地将 PG 分发到整个集群中的 OSD,因此添加新的主机及其 OSD 意味着 CRUSH 会将部分池的 PG 重新分配到这些新 OSD。这意味着系统管理员不必手动重新平衡集群。此外,这意味着新 OSD 包含与其他 OSD 大约包含相同的数据量。这也意味着新 OSD 不包含新编写的 OSD,从而防止集群中的"热点"。
  • 一个 OSD 失败: 当 OSD 出现故障时,集群的状态会改变。Ceph 暂时丢失其中一个副本或纠删代码区块,需要制作另一个副本。如果执行集合中的 Primary OSD 失败,则执行集合中的下一个 OSD 将变为 primary,CRUSH 会计算新的 OSD 以存储额外的副本或纠删代码块。

通过在数百个到数千 PG 的环境中管理数百万个对象,Ceph 存储集群可以有效地从故障中扩大、缩小和恢复。

对于 Ceph 客户端,通过 librados 的 CRUSH 算法使读和编写对象的过程非常简单。Ceph 客户端只是将对象写入池,或者从池中读取对象。执行集合中的 Primary OSD 可以将对象或纠删代码区块的副本写入代表 Ceph 客户端集合的次要 OSD。

如果 cluster map 或集群状态发生变化,则存储 PG 的 CRUSH 计算也会变化。例如,Ceph 客户端可以将对象 foo 写入池 bar。CRUSH 将对象分配到 PG 1.a,并将它存储在 OSD 5 上,分别在 OSD 10OSD 15 上制作副本。如果 OSD 5 失败,集群状态会改变。当 Ceph 客户端从池 bar 中读取对象 foo 时,通过 librados 的客户端将自动从 OSD 10 检索,因为新的 Primary OSD。

通过 librados 的 Ceph 客户端在编写和读取对象时直接连接到该集合内的 Primary OSD。因为 I/O 操作不使用集中式代理,所以网络超额订阅通常不是 Ceph 的问题。

下图显示了 CRUSH 如何分配对象到 PG,并将 PG 分配给 OSD。CRUSH 算法将 PG 分配给 OSD,使得执行集合中的每一 OSD 分配到单独的故障域中,这通常意味着 OSD 始终位于独立的服务器主机上,有时位于单独的机架中。

放置组
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.