2.5. CRUSH 权重


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

由于使用统一硬件并非始终实际,因此您可以纳入不同大小的 OSD 设备,并使用相对权重,以便 Ceph 将更多的数据分发到更大的设备,并将较少的数据分发到较小的设备。

2.5.1. 设置 OSD 的 CRUSH 权重

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

ceph osd crush reweight _NAME_ _WEIGHT_
Copy to Clipboard

其中:

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 重新加权 会非常耗时。您可以通过运行 ceph osd crush reweight-subtree 命令,在存储桶下设置(或重置)所有 Ceph OSD 权重(row, rack, node 等)。

语法

ceph osd crush reweight-subtree NAME
Copy to Clipboard

其中,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

其中:

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

2.5.4. 根据利用率设置 OSD 权重

CRUSH 设计为为将新数据对象 PG 和 PG 分配给 OSD 的写入请求大约是一个统一的概率分布。但是,集群可能会变得不平衡。这可能是出于多种原因来实现的。例如:

  • 多个池: 您可以将多个池分配给 CRUSH 层次结构,但池可能具有不同的放置组数量、大小(用于存储的副本数)和对象大小特征。
  • 自定义客户端: 块设备、对象网关和文件系统等 Ceph 客户端从其客户端共享数据,并将数据作为集群中的对象进行分条,以统一化较小的 RADOS 对象。因此,除了伪场景外,CRUSH 通常实现了其目标。但是,在另一个情况下,集群可能会变得 imbalanced: 名称,使用 librados 在不规范化对象大小的情况下存储数据。此场景可能会导致集群平衡(例如,存储 100 1 MB 对象和 10 4 MB 对象将使一些 OSD 比其他 OSD 更多的数据)。
  • Probability: 统一分布将导致一些 OSD 带有更多 PG,一些 OSD 有更少的 PG。对于有大量 OSD 的集群,统计 outliers 将会被进一步注销。

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

语法

ceph osd reweight-by-utilization [THRESHOLD_] [WEIGHT_CHANGE_AMOUNT] [NUMBER_OF_OSDS] [--no-increasing]
Copy to Clipboard

示例

[ceph: root@host01 /]# ceph osd test-reweight-by-utilization 110 .5 4 --no-increasing
Copy to Clipboard

其中:

  • 阈值 是利用率百分比,使得 OSD 面临更高的数据存储负载将收到较低的权重,从而减少分配给它们的 PG。默认值为 120,反映 120%。来自 100+ 的任何值都是一个有效的阈值。可选。
  • weight_change_amount 是更改权重的数量。有效值大于 0.0 - 1.0。默认值为 0.05。可选。
  • number_of_OSDs 是重新加权 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 分发设置 OSD 的 Weight

在具有较少 OSD 的 CRUSH 层次结构中,一些 OSD 可能会得到比其他 OSD 更多的 PG,从而带来更高的负载。您可以通过执行以下内容,通过 PG 分发重新加权 OSD 来解决这个问题:

语法

osd reweight-by-pg POOL_NAME
Copy to Clipboard

其中:

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

2.5.6. 重新计算 CRUSH 树的权重

CRUSH 树存储桶应该是其叶权重的总和。如果手动编辑 CRUSH map 权重,您应该执行下列操作,以确保 CRUSH bucket 树准确反映 bucket 下叶 OSD 的总和。

语法

osd crush reweight-all
Copy to Clipboard

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat