2.5. CRUSH Weights


CRUSH 算法为每个 OSD 设备分配一个权重值(按约定),目的是将新数据对象分配给 OSD 的写入请求来应用统一探测分布。因此,作为最佳实践,我们建议使用相同类型和大小的设备创建 CRUSH 层次结构,并分配相同的权重。我们还建议使用具有相同 I/O 和吞吐量的设备,这样您也会在 CRUSH 层次结构中具有统一的性能特征,即使性能特性不会影响数据分发。

由于使用统一的硬件并不总是实际,您可能会合并不同大小的 OSD 设备,并使用相对权重,以便 Ceph 将更多的数据分发到较大的设备,并将较少的数据分发到较小的设备。

2.5.1. 在 Terabytes 中设置 OSD 的 Weight

要在 CRUSH 映射中的 Terabytes 中设置 OSD CRUSH 权重,请执行以下命令

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

其中:

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

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

2.5.2. 设置 Bucket 的 OSD Weights

使用 ceph osd crush reweight 可能非常耗时。您可以通过执行以下内容来设置(或重置)存储桶下的所有 Ceph OSD 权重(row、rack 和 node 等):

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

其中,

name 是 CRUSH bucket 的名称。

2.5.3. 设置 OSD 的 in 权重

对于 ceph osd inceph osd out,一个 OSD 为 in 集群,或 out 集群。这是 monitor 如何记录 OSD 的状态。但是,尽管一个 OSD 为 in 集群,它可能遇到了一个故障情况,在出现这种情况下,您不应该完全依赖它,直到相关的问题被解决(例如,替换存储驱动器、更改控制器等)。

您可以通过执行以下操作为为一个特定的 OSD 增加或减少 in 权重(无需改变它在 Terabytes 中的权重):

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

其中:

  • id 是 OSD 号。
  • weight 是 0.0-1.0 的一个范围,其中 0 代表不是 in 集群(也就是说,没有分配给它的 PG),1.0 代表为 in 集群(即OSD 接收与其他 OSD 相同的 PG 数量)。

2.5.4. 通过 Utilization 设置 OSD 的 Weight

CRUSH 旨在为写入请求分配新数据对象 PG 和 PG 到 OSD 的写入请求提供统一的概率分布。但是,集群可能会变得没有平衡。这可能会因多种原因而发生。例如:

  • 多个池: 您可以将多个池分配给 CRUSH 层次结构,但池可能具有不同的放置组数量、大小(用于存储的副本数)和对象大小特征。
  • 自定义客户端: Ceph 客户端(如块设备、对象网关和文件系统)从其客户端共享数据,并将数据作为统一较小的 RADOS 对象来将数据作为统一化的 RADOS 对象。因此,除了忘记的场景外,libvirtd 通常实现了其目标。但是,在另一个情况下,集群可能会变为 imbalanced:也就是说,使用 librados 存储数据而不对对象大小进行规范化。此方案可能会导致群集失控(例如,存储 100 1 MB 对象和 10 4 MB 对象将使一些 OSD 含有比其他 OSD 更多的数据)。
  • Probability: 统一分布将导致一些 OSD 带有更多 PG,一些 OSD 有更少的 PG。对于有很多 OSD 的集群,统计处理者将进一步耗尽。

您可以通过执行以下命令来重新加权 OSD:

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
Copy to Clipboard Toggle word wrap

其中:

  • 阈值 是利用率百分比,使得 OSD 面临更高数据存储负载将收到较低的权重,从而减少了分配给它们的 PG。默认值为 120,它反映了 120%。100+ 中的任何值都是有效的阈值。可选。
  • weight_change_amount 是更改权重的数量。有效值大于 0.0 - 1.0。默认值为 0.05。可选。
  • number_of_OSD 是重新加权的最大 OSD 数。对于大型集群,限制 OSD 数量以重新加权防止大量重新平衡。可选。
  • no-increasing 默认为 off。在使用 reweight-by-utilizationtest-reweight-utilization 命令时允许增加 osd 权重。如果此选项与这些命令搭配使用,它会防止 OSD 权重增加,即使 OSD 未被充分利用。可选。
重要

建议为大型集群执行 重新加权 使用。利用率可能会随时间变化,随着集群大小或硬件的变化,可能需要更新权重来反映更改的利用率。如果您选择通过使用率重新加权,则可能需要在利用率、硬件或集群大小发生变化时重新运行该命令。

执行这个命令或其他权重命令会覆盖由这个命令分配的权重(例如,osd reweight-by-utilization, osd crush weight, osd weight, inout)。

2.5.5. 设置 PG Distribution 的 OSD 的 Weight

在 CRUSH 层次结构的 OSD 中,一些 OSD 有可能获得比其他 OSD 更多的 PG,从而导致负载更高。您可以通过执行以下操作来重新由 PG 分发来重新加权 OSD 以解决这种情况:

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

其中:

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

2.5.6. 重新计算 CRUSH Tree 的 Weights

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

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat