「Ceph」- 概念术语:Placement Group(PG)

  CREATED BY JENKINSBOT

解决方案

数据保存在 Pool 中,而 Pool 被分为多个 PG,而 PG 其中包含多个 Object;
最终 PG 将其中的数据存储在 OSD 中;
PG 是若干 Object 的逻辑集合;
PG 会被复制和分布到多个 OSD 上;
Ceph 以 PG 为单位进行数据的复制、副本;

数量配置

建议每个 OSD 配置 50-100 个 PG,目的是:
1)减少 OSD 节点上的资源消耗;

状态类型

集群的总体健康状态主要依赖于 PG;
只有当所有的 PG 都处于 active+clean 状态,集群状态才能保持 HEALTH_OK;
如果 Ceph 集群处于非健康状态,那么非常可能是因为集群中的某个 PG 不是处于 active+ clean 状态;

PG 的状态可能有很多种,甚至可能处于某种混合的状态。

常见状态

Creating(创建中):表示 PG 正在被创建;
当创建 Pool;或 增加 Pool 的 PG 数量时;

Active(活动的): 当 Peering 操作完成之后,PG 会被标记为 Active 状态。如果 PG 处于 Active 状态,那么在其主 PG 和其副本中存储的数据在 IO 操作中都是可用的;

Clean(清洁的): 该状态表示主 OSD 和从 OSD 之间已经 Peering 成功,并且都处于正确的位置。同时,这个状态的 PG 还表示他们的副本个数是正确的;

Backfilling(回填中): 当一个新的 OSD 被加到集群时,Ceph 会把其他 OSD 上的一些 PG 移动到新加入的 OSD 上,来对数据进行重新平衡,这个过程就被称为 Backfilling。完成了 PG 的 Backfilling 之后,新的 OSD 就可以参与客户端 IO 操作了;

Backfill-wait(回填-等待):PG 正待等待开始回填操作;

Peering(对等互联中): 让 存储某个 PG 的全部 OSD 关于 该 PG 内的所有对象(和他们的元数据) 达成一致状态的过程;
注意,一致状态并不等同于它们具有最新的数据。
Peering 完成后,Primary OSD 就能接收 Client 的写入请求。

Replay(重做):某 OSD 崩溃后,PG 正在等待客户端重新发起操作;

Splitting(分割中):PG 正在被分割为多个 PG;当增加 Pool 的 PG 数量,则会出现该状态;

Scrubbing(清理中):PG 正在做不一致性校验;

Down(失效的): 该状态表示包含 PG 必要数据的一个副本不可用,因此该 PG 处于离线状;

Degraded(降级的): 一旦 OSD 处于 DOWN 状态,Ceph 就会把此 OSD 上的所有 PG 改为 Degraded 状态。当 OSD 回到 UP 状态,就要重新进行 Peering 操作,以使 PG 从 Degraded 回到 Clean 状态。如果 OSD 处于 DOWN 状态超过 300 秒,Ceph 会从 被 Degraded 的 PG 的副本 中对其进行恢复,以维持副本数量。即便是 PG 处于 Degraded 状态,客户端也可以进行 IO 操作;

Recovering(恢复中): 当 OSD 变为 DOWN 状态时,该 OSD 上的 PG 中的内容就会滞后于其他 PG 副本中的内容。当 OSD 变为 UP 状态时,Ceph 会激活对 PG 的 Recovery 操作,以使其与其他 OSD 上的 PG 副本保持一致;

Repair(修复):PG 正在被检查。发现任何不一致,都将尽可能地被修复。

Remapped(重映射):如果 PG 的 Acting-Set 有所变动,数据就要从 Old Acting-Set OSD 迁移到 New Acting-Set OSD。该操作会需要花费一些时间,有具体耗时取决于要迁移到新 OSD 的数据量。在这段时间中,旧 Acting-Set 的主 OSD 负责为客户端的请求提供服务。一旦数据迁移操作完成,Ceph 就会使用新 Acting-Set 的 Primary OSD;

Stale(陈旧的): Ceph OSD 每隔 0.5s 向 Ceph MON 报告一次状态统计数据。无论如何,只要 PG Acting-Set 的 Primary OSD 没有向 MON 报告状态统计数据,或者其他 OSD 向 MON 报告 Primary-OSD 已经处于 DOWN 状态,那么 MON 就会将这些 PG 设置为 Stale 状态;
启用新集群后,常常会看到在 Peering 结束前 PG 处于该状态;

Inconsistent(不一致的):PG 的副本出现了不一致。例如,对象大小不正确,或者 Recovery 结束后,某副本出现对象丢失的情形;

查看状态

# ceph pg stat
113 pgs: 113 active+clean; 107 MiB data, 20 GiB used, 160 GiB / 180 GiB avail

// 107 MiB data: 原始数据量;
// 20 GiB used:包含副本在内的总数据量;

# ceph pg dump -f json-pretty

# ceph pg <PG_ID> query

# ceph pg dump_stuck <unclean | inactive | stale>

数量设置

现在我们应该意识到,随着 OSD 数量的增加,选择一个合适的 PG 值将变得更加重要,因为该值将会显著地影响集群的运行行为。

在一个大型集群中增加 PG 值是个昂贵的操作。建议阅读 CHOOSING THE NUMBER OF PLACEMENT GROUPS 文档,以了解 PG 的最新信息。