3.4. 自动扩展 PG
池中的 PG 数量在集群对等点、分发数据和重新平衡方面扮演着重要角色。
自动扩展 PG 数量可以使管理集群变得更加轻松。The pg-autoscaling
命令为扩展 PG 提供建议,或者根据集群使用情况自动缩放 PG。
- 要了解更多有关自动扩展如何工作的信息,请参阅 第 3.4.1 节 “放置组自动扩展”。
- 要启用或禁用自动扩展,请参阅 第 3.4.3 节 “设置放置组自动扩展模式”。
- 要查看放置组自动扩展建议,请参阅 第 3.4.4 节 “查看放置组自动扩展建议”。
- 要设置放置组自动扩展,请参阅 第 3.4.5 节 “设置放置组自动扩展”。
- 要设置目标池大小,请查看 第 3.4.6 节 “指定目标池大小”。
3.4.1. 放置组自动扩展 复制链接链接已复制到粘贴板!
自动缩放器的工作方式
自动扩展器会分析池,并根据每个子树进行调整。由于每个池可以映射到不同的 CRUSH 规则,并且每一规则可以在不同的设备之间分发数据,因此 Ceph 会分别考虑层次结构中各个子树的利用率。例如,map 到类 ssd 的
OSD 的池,以及映射到类 hdd
的 OSD 的池,各自具有依赖于这些对应设备类型的最优 PG 计数。
3.4.2. 放置组分割和合并 复制链接链接已复制到粘贴板!
splitting
红帽 Ceph 存储可以将现有的 PG 分成较小的 PG,这会增加给定池的 PG 总数。拆分现有放置组(PG)使小型红帽 Ceph 存储集群能够在存储要求增加时随着时间而扩展。PG 自动扩展功能可以增加 the pg_num
值,这将导致现有 PG 在存储集群扩展时被分割。如果 PG 自动扩展功能已被禁用,您可以手动提高 pg_num
值,这会触发 PG 分割过程开始。例如,将 the pg_num
值从 4
增加到 16
将分为四个部分:增加 the pg_num
值也会增加 pgp_num
值,但 pgp_num
值会逐步增加。这种逐步增长是为了最大程度降低对存储集群性能和客户端工作负载的影响,因为迁移对象数据会对系统造成大量负载。默认情况下,Ceph 队列且不超过"misplaced"状态的对象数据的 5%。可以使用 target_max_misplaced_ratio
选项调整此默认百分比。
合并
红帽 Ceph 存储还可以将两个现有的 PG 合并到一个较大的 PG 中,这会减少 PG 的总数。将两个 PG 合并到一起可能会很有用,特别是池中对象的相对数量减少或初始选择的 PG 数量过大时。虽然合并 PG 非常有用,但它也是一个复杂的进程。在进行合并时,暂停 I/O 到 PG 时,一次仅合并一个 PG,以最大程度降低对存储集群性能的影响。Ceph 在合并对象数据时缓慢工作,直到达到 new pg_num
值为止。
3.4.3. 设置放置组自动扩展模式 复制链接链接已复制到粘贴板!
红帽 Ceph 存储集群中的每个池都有 PG 的 a pg_autoscale_mode
属性,您可以设置为 off
、on
或 warn
。
-
off
:禁用池的自动扩展。管理员应当要为每个池选择适当的 PG 编号。如需更多信息,请参阅 PG count 部分。 -
on on
:启用对给定池的 PG 计数自动调整。 -
War
n:当 PG 计数需要调整时,发出健康警报。
pg_autoscale_mode
的默认值为 warn
模式。
流程
set
pg_autoscaling_mode
:对于现有池:
ceph osd pool set pool-name pg_autoscale_mode mode
ceph osd pool set pool-name pg_autoscale_mode mode
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要在池
testpool
上启用自动扩展:ceph osd pool set testpool pg_autoscale_mode on
$ ceph osd pool set testpool pg_autoscale_mode on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作为新创建的池的默认值:
ceph config set global osd_pool_default_pg_autoscale_mode <mode>
# ceph config set global osd_pool_default_pg_autoscale_mode <mode>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.4. 查看放置组自动扩展建议 复制链接链接已复制到粘贴板!
流程
您可以使用以下方法查看每个池、其相对利用率以及对 PG 计数的任何推荐更改:
ceph osd pool autoscale-status
ceph osd pool autoscale-status
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出结果类似如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
SIZE
是池中存储的数据量。TARGET SIZE
(如果存在)是管理员所指定的数据量,它们最终预计存储在这个池中。系统将较大的值用于计算。
RATE
是池的倍数,它决定了池使用的原始存储容量。例如,3
个副本池的比例为 3.0
,而 k=4,m=2
纠删代码池则比率为 1.5
。
RAW CAPACITY
是 OSD 上原始存储容量的总量,它们负责存储池的数据。RATIO
是池消耗的总容量的比例,即比率 = 大小 * 速率/原始容量。
TARGET RATIO
(若存在)是管理员指定的存储比率,他们希望池相对于设置了目标比率的其他池使用。如果同时指定了目标大小字节和比率,则比率优先。
EFFECTIVE RATIO
是调整后通过两种方式调整后的目标比率:1. 减去由设置了目标大小的池预期使用的任何容量。2. 规范设置了目标比率的池之间的目标比率,以便它们共同将剩余空间作为目标。例如,4 个 目标比率为
1.0 的池将 有效比率为
0.25。系统使用较大的实际比率和计算的有效比率。
BIAS
是池属性,PG 自动扩展器以 PG 数量比其他池更快地扩展。它基本上是一个倍数,用于向池提供比默认 PG 数量更多的 PG。此属性特别用于元数据池,它们的大小可能很小,但具有大量对象,因此更快地扩展它们对于更好的性能至关重要。BIAS 的默认值为 1.0。您可以通过运行 ceph osd pool set pool-name pg_autoscale_bias 4
命令来设置这个值。接受的值介于 0 到 1000 之间。但是,建议默认为 CephFS 元数据池和 Ceph 对象网关索引池将 BIAS 的值设置为 4.0。
PG_NUM
是池的当前 PG 数量,或者池正在工作的 PG 数量(如果 a pg_num
正在进行更改)。新 PG_NUM
(若存在)是推荐的 PG 数量(pg_num
)。它始终是 2 的幂,且只有建议的值与当前值相差时超过 3 倍。
AUTOSCALE
是 pool pg_autoscale_mode
,是 on
、off
或 warn
。
3.4.5. 设置放置组自动扩展 复制链接链接已复制到粘贴板!
允许集群根据集群使用情况自动扩展 PG 是扩展 PG 最简单的方法。红帽 Ceph 存储提取整个系统的可用存储总数和目标 PG 数量,比较每个池中存储的数据量,并相应地调整 PG。命令仅对当前数量 PG(pg_num
)超过计算或建议的 PG 编号的池进行更改。
每个 OSD 的 PG 的目标数量基于可配置的 mon_target_pg_per_osd
。默认值为 100
。
流程
调整
mon_target_pg_per_osd
:ceph config set global mon_target_pg_per_osd number
ceph config set global mon_target_pg_per_osd number
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
ceph config set global mon_target_pg_per_osd 150
$ ceph config set global mon_target_pg_per_osd 150
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4.6. 指定目标池大小 复制链接链接已复制到粘贴板!
新创建的池消耗集群总容量的一小部分,显示在系统中需要少量 PG。然而,在大多数情况下,集群管理员知道哪些池会随着时间推移消耗大多数系统容量。如果您提供此信息(称为红帽 Ceph 存储 的目标大小
),则这些池可以从开始便使用更合适的 PG 数量(pg_num
)。这种方法可以防止后续的 change pg_num
以及那些调整时移动数据相关的开销。
您可以通过以下方法指定池 的目标大小
:
3.4.6.1. 使用池的绝对大小指定目标大小 复制链接链接已复制到粘贴板!
流程
使用池的绝对
大小(以字节为单位)设置目标
大小:ceph osd pool set pool-name target_size_bytes value
ceph osd pool set pool-name target_size_bytes value
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,指示
mypool 应该
消耗 100T 空间的系统:ceph osd pool set mypool target_size_bytes 100T
$ ceph osd pool set mypool target_size_bytes 100T
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您还可以通过在 ceph osd pool create
命令中添加可选 --target-size-bytes <bytes>
参数来设置池在创建时的目标大小。
3.4.6.2. 使用集群总容量指定目标大小 复制链接链接已复制到粘贴板!
流程
使用集群总容量比率设置
目标大小
:ceph osd pool set pool-name target_size_ratio ratio
ceph osd pool set pool-name target_size_ratio ratio
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
ceph osd pool set mypool target_size_ratio 1.0
$ ceph osd pool set mypool target_size_ratio 1.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 告知系统,池
mypool
应该相对于设置了target_size_ratio
的其他池使用 1.0。如果mypool
是集群中唯一的池,这意味着预期使用总容量的 100%。如果存在target_size_ratio
为 1.0 的第二个池,则两个池都将使用 50% 的群集容量。
您还可以通过在 ceph osd pool create
命令中添加可选 --target-size-ratio <ratio>
参数来设置池在创建时的目标大小。
如果您指定无法达到的目标大小值,例如大于集群总数的容量,或者总和大于 1.0 的比率,集群会引发 POOL_TARGET_SIZE_RATIO_OVERCOMMITTED
或 POOL_TARGET_SIZE_BYTES_OVERCOMMITTED
健康警告。
如果您为池指定了 target_size_ratio
和 target_size_bytes
,集群只考虑这个比例,并引发 POOL_HAS_TARGET_SIZE_BYTES_AND_RATIO
健康警告。