2.5. CRUSH Weights


CRUSH 算法为每个 OSD 设备分配一个以 TB 为单位的权重值,用于将新数据对象分配到 PG 和 PG 的写入请求的均匀几率分布到 OSD。因此,作为最佳实践,我们建议使用相同类型和大小的设备创建 CRUSH 层次结构,并分配相同的权重。我们还建议使用具有相同 I/O 和吞吐量特征的设备,以便您也在 CRUSH 层次结构中具有统一的性能特征,即使性能特征不会影响数据分布。

由于使用统一硬件并非始终可行,您可以将 OSD 设备包含不同大小,并使用相对权重,以便 Ceph 会将更多数据分发到更大的设备,减少数据到较小的设备。

2.5.1. 在 Terabytes 中设置 OSD 的 Weight

要在 CRUSH map 内以 Terabytes 为单位设置 OSD CRUSH 权重,请执行以下命令

Copy to Clipboard Toggle word wrap
ceph osd crush reweight {name} {weight}

其中:

name
描述
OSD 的全名。
类型
字符串
必填
示例
osd.0
weight
描述
OSD 的 CRUSH 权重。这应当是以 Terabytes 为单位的 OSD 的大小,其中 1.0 是 1 TB。
类型
必填
示例
2.0

此设置在创建 OSD 时使用,或者在添加 OSD 后立即调整 CRUSH 权重。它通常不会在 OSD 的生命周期内更改。

2.5.2. 设置 Bucket 的 OSD Weights

使用 ceph osd crush reweight 可能会非常耗时。您可以通过执行以下命令在 bucket 下设置(或重置)所有 Ceph OSD 权重(row、rack 和 node 等):

Copy to Clipboard Toggle word wrap
osd crush reweight-subtree <name>

其中,

name 是 CRUSH bucket 的名称。

2.5.3. 在 Weight 中设置 OSD

出于 ceph osd inceph osd out 的目的 OSD 在集群中或集群 。这是监控器记录 OSD 状态的方式。但是,即使 OSD 集群中存在,但可能会遇到故障问题,因此您可能希望在修复前完全依赖它(例如,替换存储驱动器,更改控制器等等)。

您可以通过执行以下命令来增加或减小特定 OSD 的权重 (即,不更改其以 Terabytes 为单位的权重):

Copy to Clipboard Toggle word wrap
ceph osd reweight {id} {weight}

其中:

  • ID 是 OSD 编号。
  • weight 是 0.0-1.0 的范围,其中 0在集群中 (即,它没有任何 PG 分配给它),1.0 则 在集群中 (即,OSD 接收的 PG 数量与其他 OSD 相同)。

2.5.4. 设置 OSD 的 Weight by Utilization

CRUSH 设计为用于写入请求的近似平均度分布,从而将新数据对象 PG 和 PG 分配到 OSD。但是,集群可能会变得不平衡。这样做的原因有很多。例如:

  • 多个池: 您可以将多个池分配到 CRUSH 层次结构,但池可能具有不同的放置组数量、大小(要存储副本数)和对象大小特征。
  • 自定义客户端: Ceph 客户端(如块设备、对象网关和来自其客户端的文件系统分片数据),将数据作为对象分条在集群中,作为统一大小较小的 RADOS 对象。因此,除了上述情景外,CRUSH 通常可实现自己的目标。但是,在另一种情形中,集群可能会变得冲突:即,使用 librados 在不规范对象大小的情况下存储数据。这种情境可能会导致集群的平衡(例如,存储 100 1 MB 对象和 10 4 MB 对象,使得一些 OSD 具有比其他 OSD 更多的数据。
  • 概率: 均匀分布将导致某些 OSD 数量更多,PG 数量较少。对于具有大量 OSD 的集群,统计外围器将进一步展开。

您可以通过执行以下内容来重新加权 OSD:

Copy to Clipboard Toggle word wrap
ceph osd reweight-by-utilization [threshold]  [weight_change_amount] [number_of_OSDs] [--no-increasing]

例如:

Copy to Clipboard Toggle word wrap
ceph osd test-reweight-by-utilization 110 .5 4 --no-increasing

其中:

  • 阈值 是利用率百分比,使得面临更大数据存储负载的 OSD 将获得较低的权重,从而减少分配给它们的 PG。默认值为 120,反映 120%。100+ 中的任何值都是有效的阈值。可选。
  • weight_change_amount 是用于更改权重的数量。有效值大于 0.0 - 1.0。默认值为 0.05。可选。
  • number_of_OSDs 是重新加权 OSD 的最大数量。对于大型集群,将 OSD 数量限制为重新加权可防止大量重新平衡。可选。
  • 默认情况下 不会出现任何增长 。使用 reweight-by-utilization 或 test-reweight-by -utilization 命令时,允许增大 osd 权重。如果将此选项与这些命令搭配使用,它将防止增加 OSD 权重,即使 OSD 利用率不足也是如此。可选。
重要

建议 逐个使用,对于大型集群来说,有时不可避免。随着集群的大小或硬件改变,利用率率可能会随时间而变化,可能需要更新权重来反映变化的利用率。如果选择按利用率重新加权,您可能需要以利用率、硬件或集群大小更改来重新运行该命令。

执行此或其他分配权重的权重命令将覆盖此命令分配的权重(例如,osd reweight-by-utilization、os d crush weight、os d weight、in out)。

2.5.5. 设置 OSD 的 Weight by PG Distribution

在具有数量较少 OSD 的 CRUSH 层次结构中,一些 OSD 可能获得比其他 OSD 更多的 PG,从而导致负载更高。您可以通过执行以下内容,按 PG 分布重新加权 OSD 来解决这种情况:

Copy to Clipboard Toggle word wrap
osd reweight-by-pg <poolname>

其中:

  • poolname 是池的名称。Ceph 将检查池如何分配 PG 到 OSD,并根据这个池的 PG 分布重新加权 OSD。请注意,多个池可以分配到相同的 CRUSH 层次结构。根据一个池的分发重新加权 OSD 可能会对分配到同一 CRUSH 层次结构的其他池产生意外的影响,只要它们的大小(副本数)和 PG 没有相同大小(副本数)和 PG。

2.5.6. 重新计算 CRUSH Tree 的 Weights

CRUSH 树 bucket 应当是其 leaf 权重的总和。如果手动编辑 CRUSH map 权重,您应该执行下列命令,以确保 CRUSH bucket 树准确反映 bucket 下的 leaf OSD 的总和。

Copy to Clipboard Toggle word wrap
osd crush reweight-all
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.