注意

本文档适用于 Ceph 的开发版本。

池是用于存储 RADOS 对象的逻辑分区。

池提供

  • 弹性:可以规划在不丢失数据或数据不可用的情况下并行发生故障的 OSD 数量。如果集群使用复制池,在不丢失数据的情况下可以并行发生故障的 OSD 数量比副本数少一个,而在不导致数据不可用的情况下可以发生故障的 OSD 数量通常是两个。

    例如:典型的配置存储每个 RADOS 对象的三个副本(即:size = 3),但可以按池配置副本数。对于纠删码池,弹性定义为编码(又称奇偶校验)块的数量(例如,默认纠删码配置文件中的 m = 2)。

  • 放置组自动调节器设置池的放置组 (PG) 数量。在典型的配置中,目标 PG 数量约为每 OSD 一百五十个 PG。这提供了合理的平衡,同时不会消耗过多的计算资源。设置多个池时,为每个池和整个集群设置适当的 PG 数量。每个 PG 属于一个特定的池:当多个池使用相同的 OSD 时,请确保每 OSD 的 PG 副本总和在所需的每 OSD PG 目标范围内。有关如何手动设置每池 PG 数量的说明,请参阅设置放置组数量(此过程仅在未使用自动调节器时有效)。PG 计算器提供了一个方便的计算器,用于各种场景和池、副本以及每 OSD 目标 PG 副本的组合。

  • CRUSH 规则:当数据存储在池中时,PG 和对象副本(或块/分片,对于纠删码池)在集群中的放置受 CRUSH 规则的约束。如果默认规则不符合您的用例,可以为池创建自定义 CRUSH 规则。

  • 快照:命令 ceph osd pool mksnap 创建池的快照。

池名称

. 开头的池名称保留用于 Ceph 的内部操作。请勿创建或操作具有这些名称的池。

列出池

有多种方法可以列出集群中的池。

要仅列出集群的池名称(例如,在编写脚本时),请执行

ceph osd pool ls
.rgw.root
default.rgw.log
default.rgw.control
default.rgw.meta

要列出带有池编号的集群池,请运行以下命令

ceph osd lspools
1 .rgw.root
2 default.rgw.log
3 default.rgw.control
4 default.rgw.meta

要列出带有附加信息的集群池,请执行

ceph osd pool ls detail
pool 1 '.rgw.root' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 19 flags hashpspool stripe_width 0 application rgw read_balance_score 4.00
pool 2 'default.rgw.log' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 21 flags hashpspool stripe_width 0 application rgw read_balance_score 4.00
pool 3 'default.rgw.control' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 23 flags hashpspool stripe_width 0 application rgw read_balance_score 4.00
pool 4 'default.rgw.meta' replicated size 3 min_size 1 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode on last_change 25 flags hashpspool stripe_width 0 pg_autoscale_bias 4 application rgw read_balance_score 4.00

要检索更多信息,您可以将此命令与 --format(或 -f)选项以及 jsonjson-prettyxmlxml-pretty 值一起执行。

创建池

在创建池之前,请参阅池、PG 和 CRUSH 配置参考。Ceph 中央配置数据库包含一个默认设置(即 osd_pool_default_pg_num),用于确定如果未指定特定值,则分配给新池的 PG 数量。可以更改此值的默认值。有关设置每池 PG 数量的更多信息,请参阅设置 PG 数量

注意

在 Luminous 及更高版本中,每个池必须与将使用该池的应用程序关联。有关详细信息,请参阅下面的将池与应用程序关联

要创建池,请运行以下命令之一

ceph osd pool create {pool-name} [{pg-num} [{pgp-num}]] [replicated] \
         [crush-rule-name] [expected-num-objects]

ceph osd pool create {pool-name} [{pg-num} [{pgp-num}]] erasure \
         [erasure-code-profile] [crush-rule-name] [expected_num_objects] [--autoscale-mode=<on,off,warn>]

有关上述命令元素的简要说明,请参阅以下内容

{pool-name}

池的名称。它必须是唯一的。

类型:

String

必需:

是。

{pg-num}

池中的 PG 总数。有关计算适当数量的详细信息,请参阅放置组。默认值不适用于大多数系统。

类型:

整数

必需:

是。

默认值:

32

{pgp-num}

用于放置目的的 PG 总数。这应该等于 PG 总数,除了在增加或减少 pg_num 的短暂期间。请注意,在 Nautilus 及更高版本中,通常不会直接更改 pgp_num:当给定池的 pg_num 已调整时,Ceph 会自动逐步扩展该池的 pgp_num。对 pg_num 的调整可以通过 PG 自动调节器进行,或者如果自动调节器被禁用,则通过 CLI 或仪表板手动设置。

类型:

整数

必需:

是。如果在命令中未指定值,则使用默认值(除非在 Ceph 配置中设置了不同的值)。

默认值:

32

{replicated|erasure}

池的数据保护策略。这可以是 replicated(像 RAID1 和 RAID10)erasure (一种 :ref:`通用奇偶校验 RAID <ecpool>` 策略,如 RAID6 但更灵活)。 ``replicated`` 池在给定原始存储量的情况下提供较少可用容量,但适用于所有 Ceph 组件和用例。在给定底层原始存储量的情况下,erasure (EC) 池通常比复制提供更多可用容量,但仅适用于 Ceph 组件和用例的子集。根据工作负载和特定配置文件,EC 通常需要比复制更多的故障域,并提供较低的性能,但可能容忍更多的重叠驱动器或主机故障。

类型:

String

必需:

否。

默认值:

replicated

[crush-rule-name]

用于此池的 CRUSH 规则名称。指定的规则必须已经存在,否则命令将失败。

类型:

String

必需:

否。

默认值:

对于 replicated 池,默认情况下是由 osd_pool_default_crush_rule 配置选项指定的规则。此规则必须存在。对于 erasure 池,如果使用 default 纠删码配置文件,则为 erasure-code 规则,否则为 {pool-name} 规则。如果此规则不存在,它将隐式创建。

[erasure-code-profile=profile]

仅适用于 erasure 池。指示 Ceph 使用指定的纠删码配置文件。此配置文件必须是通过仪表板或调用 osd erasure-code-profile set 定义的现有配置文件。请注意,创建后对池 EC 配置文件的更改会生效。要更改现有池的 EC 配置文件,必须修改池以使用使用所需配置文件定义的另一个 CRUSH 规则。

类型:

String

必需:

否。

--autoscale-mode=<on,off,warn>
  • on:Ceph 集群将根据实际使用情况自动调整池中 PG 数量的变化。

  • warn:Ceph 集群将根据实际使用情况推荐对池中 PG 数量的更改。

  • off:有关详细信息,请参阅放置组

类型:

String

必需:

否。

默认值:

默认行为由 osd_pool_default_pg_autoscale_mode 选项确定。

[expected-num-objects]

此池预期的 RADOS 对象数量。通过设置此值,您可以安排在创建池时进行 PG 分裂,并避免伴随运行时文件夹分裂的延迟影响。

类型:

整数

必需:

否。

默认值:

0,创建池时没有分裂。

将池与应用程序关联

每个池在使用前必须与应用程序关联。旨在用于 CephFS 的池和由 RGW 自动创建的池会自动关联。旨在用于 RBD 的池应通过仪表板或 rbd CLI 工具初始化(有关详细信息,请参阅块设备命令)。

对于不寻常的用例,您可以通过运行以下命令将自由格式的应用程序名称关联到池

ceph osd pool application enable {pool-name} {application-name}

注意

CephFS 使用应用程序名称 cephfs,RBD 使用应用程序名称 rbd,RGW 使用应用程序名称 rgw

设置池配额

要设置每个池的最大字节数或最大 RADOS 对象数的配额,请运行以下形式的命令

ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]

例如

ceph osd pool set-quota data max_objects 10000

要删除配额,请将其值设置为 0。请注意,您可以仅设置字节配额或仅设置 RADOS 对象配额,也可以同时设置两者。

删除池

要删除池,请运行以下形式的命令

ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it]

要删除池,必须在中央配置中将 mon_allow_pool_delete 标志设置为 true,否则 Ceph 监视器将拒绝删除池。

有关详细信息,请参阅监视器配置

如果存在不再使用或需要的自定义 CRUSH 规则,请考虑删除这些规则。

ceph osd pool get {pool-name} crush_rule

例如,如果自定义规则为“123”,请通过运行以下命令检查所有池是否使用该规则

ceph osd dump | grep "^pool" | grep "crush_rule 123"

如果没有池使用此自定义规则,则可以安全地从集群中删除该规则。

同样,如果存在权限受限于不再存在的池的用户,请考虑通过运行以下形式的命令删除这些用户

ceph auth ls | grep -C 5 {pool-name}
ceph auth del {user}

重命名池

要重命名池,请运行以下形式的命令

ceph osd pool rename {current-pool-name} {new-pool-name}

如果您重命名具有每池权限的经过身份验证的用户所使用的池,则必须更新用户的权限(“caps”)以引用新的池名称。有关更新用户权限的说明,请参阅修改用户权限

显示池统计信息

要显示池的利用率统计信息,请运行以下命令

rados df

要获取特定池或所有池的 I/O 信息,请运行以下形式的命令

ceph osd pool stats [{pool-name}]

制作池快照

要制作池快照,请运行以下形式的命令

ceph osd pool mksnap {pool-name} {snap-name}

删除池快照

要删除池快照,请运行以下形式的命令

ceph osd pool rmsnap {pool-name} {snap-name}

设置池值

要为池的配置属性分配值,请运行以下形式的命令

ceph osd pool set {pool-name} {key} {value}

您可以为以下键设置值

compression_algorithm
描述:

设置用于在底层 BlueStore 后端存储数据时使用的内联压缩算法。此键设置会覆盖全局设置 bluestore_compression_algorithm

类型:

String

有效设置:

lz4snappyzlibzstd

compression_mode
描述:

设置用于在底层 BlueStore 后端存储数据时使用的内联压缩策略。此键设置会覆盖全局设置 bluestore_compression_mode

类型:

String

有效设置:

nonepassiveaggressiveforce

compression_min_blob_size
描述:

设置块压缩的最小大小:即,小于此大小的块不被压缩。此键设置会覆盖以下全局设置

类型:

无符号整数

compression_max_blob_size
描述:

设置块的最大大小:即,大于此大小的块在执行压缩之前会分解为不大于此大小的较小 blob。

类型:

无符号整数

注意

可以使用 ceph df detail 查看压缩池统计信息。压缩池中的对象将通过大多数 API 调用或 CLI 命令显示其原始未压缩大小。例如:直接放置在压缩 RADOS 池中的 RGW 存储桶(没有 RGW 级别压缩)将通过 radosgw-admin 报告未压缩的存储桶大小。

大小
描述:

设置池中对象的副本数。有关详细信息,请参阅设置 RADOS 对象副本数。这只能为 replicated 池设置。EC 池将 _报告_等于 K+M 的 size,但此值不能直接_设置_。

类型:

整数

min_size
描述:

设置 PGs 处于活动状态并因此可以进行 I/O 操作所需的最小活动副本数(或分片数)。有关详细信息,请参阅设置 RADOS 对象副本数。对于纠删码池,此值应设置为大于 K 的值。如果只允许 K 个分片进行 I/O,则不会有冗余,并且在发生额外的永久 OSD 故障时会丢失数据。有关详细信息,请参阅纠删码

类型:

整数

版本:

0.54 及以上

pg_num
描述:

指定给定池的 PG 总数。请注意,如果为给定池启用了 PG 自动调节器,它可能会覆盖手动分配的值。

类型:

整数

有效范围:

0mon_max_pool_pg_num。如果设置为 0,将使用 osd_pool_default_pg_num 的值。

pgp_num
描述:

设置计算数据放置时使用的有效 PG 数。当运行 Nautilus 及更高版本的 Ceph 时,管理员通常不会显式设置此值:Ceph 会自动逐步增加或减少它以匹配 pg_num

类型:

整数

有效范围:

介于 1pg_num 的当前值之间。

crush_rule
描述:

设置 Ceph 用于将池的 RADOS 对象映射到相应 OSD 的 CRUSH 规则。

类型:

String

allow_ec_overwrites
描述:

确定是否允许对纠删码池的写入仅更新 RADOS 对象的一部分。这允许 CephFS 和 RBD 对用户数据(而不是元数据)使用 EC(纠删码)池。有关详细信息,请参阅使用覆盖的纠删码

类型:

Boolean

12.2.0 版新增。

allow_ec_optimizations
描述:

为纠删码池启用性能和容量优化。这些优化是为 CephFS 和 RBD 工作负载设计的;具有大量小对象或具有小随机访问读取的 RGW 工作负载也将受益。具有大量顺序读取和写入的 RGW 工作负载几乎不会受益。有关详细信息,请参阅纠删码优化

类型:

Boolean

20.2.0 版新增。

hashpspool
描述:

在给定池上设置或取消设置 HASHPSPOOL 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

nodelete
描述:

在给定池上设置或取消设置 NODELETE 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

版本:

版本 FIXME

nopgchange
描述:

在给定池上设置或取消设置 NOPGCHANGE 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

版本:

版本 FIXME

nosizechange
描述:

在给定池上设置或取消设置 NOSIZECHANGE 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

版本:

版本 FIXME

bulk
描述:

在给定池上设置或取消设置 BULK 标志。

类型:

Boolean

有效范围:

true/1 设置标志,false/0 取消设置标志

write_fadvise_dontneed
描述:

在给定池上设置或取消设置 WRITE_FADVISE_DONTNEED 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

noscrub
描述:

在给定池上设置或取消设置 NOSCRUB 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

nodeep-scrub
描述:

在给定池上设置或取消设置 NODEEP_SCRUB 标志。

类型:

整数

有效范围:

1 设置标志,0 取消设置标志

target_max_bytes
描述:

max_bytes 阈值触发且正在使用已弃用的缓存分层功能时,Ceph 将开始刷新或逐出对象。

类型:

整数

示例:

1000000000000 #1-TB

target_max_objects
描述:

max_objects 阈值触发且正在使用已弃用的缓存分层功能时,Ceph 将开始刷新或逐出对象。

类型:

整数

示例:

1000000 #1M 对象

fast_read
描述:

对于纠删码池,如果此标志设置为 on,则读取请求会向所有分片发出“子读取”,然后等待直到接收到足够的分片进行解码,然后才为客户端提供服务。如果使用 jerasureisa 纠删插件,则在返回前 K 个回复后,立即使用从这些回复解码的数据为客户端请求提供服务。这种方法以牺牲资源为代价来换取更好的性能。此标志仅受纠删码池支持。

类型:

Boolean

默认值:

0

scrub_min_interval
描述:

设置池的 PG 连续浅层(轻度)擦洗之间的最小间隔(以秒为单位)。如果此池属性与其默认值 (0) 保持不变,则使用中央配置中的 osd_scrub_min_interval 值。

类型:

Double

默认值:

0

scrub_max_interval
描述:

设置池的 PG 连续浅层(轻度)擦洗之间的最大间隔(以秒为单位)。影响擦洗调度程序转储中显示的“overdue”属性。如果与其默认值 0 保持不变,则使用中央配置中的 osd_scrub_max_interval 值。

类型:

Double

默认值:

0

deep_scrub_interval
描述:

设置池的 PG 连续深度擦洗的间隔(以秒为单位)。如果与其默认值 0 保持不变,则使用中央配置中的 osd_deep_scrub_interval 值。

类型:

Double

默认值:

0

recovery_priority
描述:

设置此值可调整池的计算保留优先级。此值必须在 -1010 的范围内。分配负值的任何池的优先级都低于任何新池,因此建议用户为低优先级池分配负值。

类型:

整数

默认值:

0

recovery_op_priority
描述:

设置特定池的 PGs 的恢复操作优先级。这会覆盖由 osd_recovery_op_priority 确定的常规优先级。

类型:

整数

默认值:

0

获取池值

要获取给定池键的值,请运行以下形式的命令

ceph osd pool get {pool-name} {key}

您可以获取以下键的值

大小

描述:

请参阅 size

类型:

整数

min_size

描述:

请参阅 min_size

类型:

整数

版本:

0.54 及以上

pg_num

描述:

请参阅 pg_num

类型:

整数

pgp_num

描述:

请参阅 pgp_num

类型:

整数

有效范围:

等于或小于 pg_num

crush_rule

描述:

请参阅 crush_rule

target_max_bytes

描述:

请参阅 target_max_bytes

类型:

整数

target_max_objects

描述:

请参阅 target_max_objects

类型:

整数

fast_read

描述:

请参阅 fast_read

类型:

Boolean

scrub_min_interval

描述:

请参阅 scrub_min_interval

类型:

Double

scrub_max_interval

描述:

请参阅 scrub_max_interval

类型:

Double

deep_scrub_interval

描述:

请参阅 deep_scrub_interval

类型:

Double

allow_ec_overwrites

描述:

请参阅 allow_ec_overwrites

类型:

Boolean

recovery_priority

描述:

请参阅 recovery_priority

类型:

整数

recovery_op_priority

描述:

请参阅 recovery_op_priority

类型:

整数

设置 RADOS 对象副本数

要设置给定复制池要维护的数据副本数,请运行以下形式的命令

ceph osd pool set {poolname} size {num-replicas}

重要

{num-replicas} 参数包括主对象本身。例如,如果您希望对象有两个副本,除了原始对象(总共三个对象实例),请指定 3,运行以下命令

ceph osd pool set data size 3

您可以对每个所需的池独立运行如上所示的命令。

注意

PG 可能在降级模式下接受 I/O,副本数少于 pool size。要设置 I/O 所需的最小副本数,应使用 min_size 设置。例如,您可以运行以下命令

ceph osd pool set data min_size 2

此命令确保如果数据池中的对象副本数少于 min_size(在本例中为两个),则不会接收 I/O。请注意,在生产环境中将 size 设置为 2 或将 min_size 设置为 1 会有数据丢失的风险,应仅在某些紧急情况下临时进行。

获取对象副本数

要获取对象副本数,请运行以下命令

ceph osd dump | grep 'replicated size'

Ceph 将列出池并突出显示 replicated size 属性。默认情况下,Ceph 维护三个副本或拷贝,大小为 3)。

管理标记有 --bulk 的池

请参阅 管理标记有 bulk 的池

设置拉伸池的值

要为拉伸池设置值,请运行以下形式的命令

ceph osd pool stretch set {pool-name} {peering_crush_bucket_count} {peering_crush_bucket_target} {peering_crush_bucket_barrier} {crush_rule} {size} {min_size} [--yes-i-really-mean-it]

以下是参数的细分

{pool-name}

池的名称。它必须是一个现有的池:此命令不创建新池。

类型:

String

必需:

是。

{peering_crush_bucket_count}

此值与 peering_crush_bucket_barrier 一起使用,根据选定的 acting set 中有多少个不同的存储桶,确定所选 acting set 中的 OSD 是否可以相互对等。

类型:

整数

必需:

是。

{peering_crush_bucket_target}

此值与 peering_crush_bucket_barriersize 一起用于计算值 bucket_max,该值限制在 PG 的 acting set 中选择的同一存储桶中的 OSD 数量。

类型:

整数

必需:

是。

{peering_crush_bucket_barrier}

池的 PGs 分布在其中的 CRUSH 存储桶类型,例如 rackrowdatacenter

类型:

String

必需:

是。

{crush_rule}

用于池的 CRUSH 规则。池的类型必须与 CRUSH 规则的类型匹配(replicatederasure)。

类型:

String

必需:

是。

{size}

池中 RADOS 对象(以及 PGs)的副本数。

类型:

整数

必需:

是。

{min_size}

必须处于活动状态才能提供 I/O 操作的最小副本数。

类型:

整数

必需:

是。

{--yes-i-really-mean-it}

需要此标志来确认您确实要绕过安全检查并设置池的值,例如,当您尝试将 peering_crush_bucket_countpeering_crush_bucket_target 设置为大于 crush map 中的存储桶数量时。

类型:

标志

必需:

否。

取消设置拉伸池的值

要将池移回非拉伸状态,请运行以下形式的命令

ceph osd pool stretch unset {pool-name} {crush_rule} {size} {min_size}

以下是参数的细分

{pool-name}

池的名称。它必须是已拉伸的现有池,即已通过命令 ceph osd pool stretch set 设置的池。

类型:

String

必需:

是。

{crush_rule}

退出拉伸池后要使用的 crush rule。池的类型必须与 crush_rule 的类型匹配(replicated 或 erasure)。

类型:

String

必需:

是。

{size}

退出拉伸池后对象的副本数。

类型:

整数

必需:

是。

{min_size}

退出拉伸池后 I/O 所需的最小副本数。

类型:

整数

必需:

是。

显示拉伸池的值

要显示拉伸池的值,请运行以下形式的命令

ceph osd pool stretch show {pool-name}

以下是参数的细分

{pool-name}

池的名称。它必须是已拉伸的现有池,即已通过命令 ceph osd pool stretch set 设置的池。

类型:

String

必需:

是。

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入