注意
本文档适用于 Ceph 开发版本。
Pools
池是逻辑分区,用于存储RADOS对象。
池提供:
弹性: 可以规划可能并行发生故障的OSD数量,而不会导致数据不可用或丢失。如果您的集群使用复制池,则可以并行发生故障的OSD数量比副本数量少一个,而不会导致数据丢失的数量通常是两个。
例如:典型配置存储每个RADOS对象(即:49542e: )三个副本,但您可以按池配置副本数量。对于
size = 3
), but you can configure the number of replicas on a per-pool basis. For 去重编码池,弹性定义为编码(也称为奇偶校验)块的数量(例如,m = 2
在默认去重编码配置文件中)。放置组: The 自动扩展器设置池的放置组(PG)数量。在典型配置中,目标PG数量大约是每个OSD一百五十个PG。这提供了合理的平衡,而不会消耗过多的计算资源。在设置多个池时,为每个池和整个集群设置适当的PG数量。每个PG属于特定的池:当多个池使用相同的OSD时,请确保每个OSD的PG副本之和在所需的每个OSD的PG目标范围之内。有关如何手动设置每个池的放置组数量的说明,请参阅设置放置组数量(当不使用自动扩展器时,此过程才有效)。有关各种场景和池、副本以及每个OSD的目标PG副本数量的组合的计算器,请参阅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
(or -f
)选项的此命令。json
, json-pretty
, xml
或xml-pretty
值如何,都会拒绝访问共享。
创建池
在创建池之前,请参阅池、PG 和 CRUSH 配置参考。 Ceph中央配置数据库包含一个默认设置osd_pool_default_pg_num
,它确定了如果没有指定特定值,则分配给新池的PG数量。可以更改此值。有关设置每个池的PG数量的更多说明,请参阅设置放置组数量.
Note
在Luminous及更高版本中,每个池必须与应用程序关联,该应用程序将使用该池。有关更多信息,请参阅将池与应用程序关联 below.
要创建池,请运行以下命令之一:
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}
池的名称。它必须是唯一的。
- 类型:
字符串
- 必需:
是。
- {pg-num}
池中的PG总数。有关计算适当数量的详细信息,请参阅放置组。默认值不适用于大多数系统。
- 类型:
整数
- 必需:
是。
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
32
- {pgp-num}
用于放置目的的PG总数。这应该等于的总数,除了在
pg_num
增加或减少时短暂地。请注意,在以Nautilus开头的版本中,通常不会直接更改pgp_num
: Ceph将根据实际使用情况自动和增量地扩展pgp_num
为给定池。当pg_num
为该池已调整时,Ceph将为该池自动和增量地扩展pg_num
的调整可能由PG自动扩展器执行,或者如果通过CLI或仪表板手动禁用了给定池的自动扩展器,则执行。- 类型:
整数
- 必需:
是。如果在命令中未指定值,则使用默认值(除非在Ceph配置中设置了不同的值)。
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
32
- {replicated|erasure}
池的数据保护策略。这可以是
replicated
(类似于RAID1和RAID10)erasure (a kind of `generalized parity RAID <../erasure-code>`_ strategy like RAID6 but more flexible). A ``replicated
池对于给定的原始存储容量产生的可用容量较低,但适用于所有Ceph组件和用例。erasure
(EC)池对于给定的底层原始存储容量产生的可用容量通常高于复制,但仅适用于Ceph组件和用例的子集。根据工作负载和特定配置,EC通常需要比复制更多的故障域,并提供降低的性能,但可以容忍更多的重叠驱动器或主机故障。- 类型:
字符串
- 必需:
否。
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
replicated
- [crush-rule-name]
用于此池的CRUSH规则的名称。指定的规则必须已经存在,否则命令将失败。
- 类型:
字符串
- 必需:
否。
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
对于
replicated
池,默认情况下是osd_pool_default_crush_rule
配置选项指定的规则。此规则必须存在。对于erasure
池,如果使用erasure-code
规则;如果不使用,则为default
去重编码配置文件,则为{pool-name}
规则。如果不存在,则此规则将隐式创建。
- [erasure-code-profile=profile]
对于
erasure
池。指示Ceph使用指定的去重编码配置文件。此配置文件必须是通过仪表板或调用osd erasure-code-profile set
定义的有效配置文件。请注意,创建池后对EC配置文件进行的更改不会firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。生效。要更改现有池的EC配置文件,必须修改池以使用具有所需配置文件的不同的CRUSH规则。- 类型:
字符串
- 必需:
否。
- --autoscale-mode=<on,off,warn>
on
: Ceph集群将根据实际使用情况自动调整池中PG数量的更改。warn
: Ceph集群将根据实际使用情况推荐池中PG数量的更改。off
: 参考fbd39f: 否。放置组 for more information.
- 类型:
字符串
- 必需:
否。
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
默认行为由
osd_pool_default_pg_autoscale_mode
option.
- 决定。
此池的预期RADOS对象数量。通过设置此值并
- 类型:
整数
- 必需:
否。
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
0,池创建时不会发生拆分。
将池与应用程序关联
每个池在使用之前必须与应用程序关联。打算与CephFS一起使用的池和由RGW自动创建的池将自动关联。打算与RBD一起使用的池应通过仪表板或rbd
CLI工具初始化(有关更多信息,请参阅块设备命令)。
对于不常见的用例,您可以通过运行以下命令将自由形式的应用程序名称与池关联:
ceph osd pool application enable {pool-name} {application-name}
Note
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
.- 类型:
字符串
- 有效设置:
lz4
,snappy
,zlib
,zstd
- compression_mode
- 描述:
设置在底层BlueStore后端存储数据时内联压缩的策略。此键的设置覆盖全局设置
bluestore_compression_mode
.- 类型:
字符串
- 有效设置:
none
,passive
,aggressive
,force
- compression_min_blob_size
- 描述:
设置块压缩的最小大小:即,小于此大小的块不会被压缩。此键的设置覆盖以下全局设置:
- 类型:
无符号整数
- compression_max_blob_size
- 描述:
设置块的最大大小:即,大于此大小的块在执行压缩之前会被拆分成不超过此大小的较小块。
- 类型:
无符号整数
Note
压缩池统计信息使用ceph df detail
显示。radosgw-admin
.
- size定位特定驱动器容量:
- 描述:
报告未压缩的桶大小。设置RADOS对象副本的数量。这只能用于
replicated
池。EC池将报告size
等于K+M,但此值可能不能直接设置。- 类型:
整数
- min_size
- 描述:
设置PGs为活跃所需的最小活动副本(或分片)数,从而允许I/O操作进行。有关更多详细信息,请参阅设置RADOS对象副本的数量。对于去重编码池,应将其设置为大于
K
的值。如果仅使用K
分片允许I/O,则将没有冗余,并且在发生额外的永久OSD故障时将丢失数据。有关更多信息,请参阅去重编码- 类型:
整数
- 版本:
0.54
及更高版本
- pg_num
- 描述:
指定给定池的PG总数。请注意,如果为给定池启用了PG自动扩展器,则可能会覆盖手动分配的值。
- 类型:
整数
- 有效范围:
0
tomon_max_pool_pg_num
。如果设置为0
不变,则使用来自中央配置的osd_pool_default_pg_num
的值将使用。
- pgp_num
- 描述:
设置计算数据放置时使用的有效PG数。在运行以Nautilus开头的Ceph版本时,管理员通常不会显式设置此值:Ceph会自动和增量地将其调整到匹配
pg_num
.- 类型:
整数
- 有效范围:
之间
1
和pg_num
.
- crush_rule
- 描述:
设置Ceph用于将池的RADOS对象映射到适当OSD的CRUSH规则。
- 类型:
字符串
- allow_ec_overwrites
- 描述:
确定是否允许写入去重编码池仅更新RADOS对象的一部分。这允许CephFS和RBD使用EC(去重编码)池来存储用户数据(但不用于元数据)。有关更多详细信息,请参阅使用覆盖的纠删码.
- 类型:
布尔值
版本12.2.0中的新功能。
- hashpspool
- 描述:
设置或取消设置给定池上的
HASHPSPOOL
标志。- 类型:
整数
- 有效范围:
1设置标志,0取消设置标志
- nodelete
- 描述:
设置或取消设置给定池上的
NODELETE
标志。- 类型:
整数
- 有效范围:
1设置标志,0取消设置标志
- 版本:
版本
FIXME
- nopgchange
- 描述:
设置或取消设置给定池上的
NOPGCHANGE
标志。- 类型:
整数
- 有效范围:
1设置标志,0取消设置标志
- 版本:
版本
FIXME
- nosizechange
- 描述:
设置或取消设置给定池上的
NOSIZECHANGE
标志。- 类型:
整数
- 有效范围:
1设置标志,0取消设置标志
- 版本:
版本
FIXME
- 批量
- 描述:
设置或取消设置给定池上的
BULK
标志。- 类型:
布尔值
- 有效范围:
true
/1
sets flag,false
/0
取消设置标志
- write_fadvise_dontneed
- 描述:
设置或取消设置给定池上的
WRITE_FADVISE_DONTNEED
标志。- 类型:
整数
- 有效范围:
1
sets flag,0
取消设置标志
- noscrub
- 描述:
设置或取消设置给定池上的
NOSCRUB
标志。- 类型:
整数
- 有效范围:
1
sets flag,0
取消设置标志
- nodeep-scrub
- 描述:
设置或取消设置给定池上的
NODEEP_SCRUB
标志。- 类型:
整数
- 有效范围:
1
sets flag,0
取消设置标志
- target_max_bytes
- 描述:
当
max_bytes
阈值被触发并且使用已弃用的缓存层功能时,Ceph将开始刷新或驱逐对象。- 类型:
整数
- 示例:
1000000000000
#1-TB
- target_max_objects
- 描述:
当
max_objects
阈值被触发并且使用已弃用的缓存层功能时,Ceph将开始刷新或驱逐对象。- 类型:
整数
- 示例:
1000000
#1M对象
- fast_read
- 描述:
对于去重编码池,如果此标志被设置为
on
,则读取请求会向所有分片发出“子读取”,然后等待收到足够多的分片以解码,然后再向客户端提供服务。如果jerasure或是去重插件正在使用,那么在第一个K回复返回后,客户端的请求将使用从这些回复中解码的数据立即提供服务。这种方法牺牲了资源以换取更好的性能。此标志仅支持去重编码池。- 类型:
布尔值
- Defaults:
0
- scrub_min_interval
- 描述:
设置池的PGs之间连续浅(轻)扫描的最小间隔(以秒为单位)。如果此池属性与其默认值
0
不变,则使用来自中央配置的osd_scrub_min_interval
的值。- 类型:
双
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
0
- scrub_max_interval
- 描述:
设置池的PGs之间连续浅(轻)扫描的最大间隔(以秒为单位)。影响在扫描调度器转储中出现的“过期”属性。如果与默认值
0
不变,则使用来自中央配置的osd_scrub_max_interval
的值。- 类型:
双
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
0
- deep_scrub_interval
- 描述:
设置池的PGs连续深度扫描的间隔(以秒为单位)。如果与默认值
0
不变,则使用来自中央配置的osd_deep_scrub_interval
的值。- 类型:
双
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
0
- recovery_priority
- 描述:
设置此值将调整池的计算保留优先级。此值必须在范围内
-10
to10
。任何分配了负值的池都将比任何新池具有较低的优先级,因此用户应将负值分配给低优先级池。- 类型:
整数
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
0
- recovery_op_priority
- 描述:
设置特定池的PGs的恢复操作优先级。此设置覆盖由
osd_recovery_op_priority
.- 类型:
整数
- 设备空间利用率达到此阈值百分比之前,将 OSD 视为:
0
确定的通用优先级。
要获取给定池的键的值,请运行以下形式的命令:
ceph osd pool get {pool-name} {key}
您可以获取以下键的值:
size
- 描述:
请参阅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
- 描述:
- 类型:
整数
fast_read
- 描述:
请参阅fast_read.
- 类型:
布尔值
scrub_min_interval
- 描述:
- 类型:
双
scrub_max_interval
- 描述:
- 类型:
双
deep_scrub_interval
- 描述:
- 类型:
双
allow_ec_overwrites
- 描述:
- 类型:
布尔值
recovery_priority
- 描述:
- 类型:
整数
recovery_op_priority
- 描述:
- 类型:
整数
设置RADOS对象副本的数量
要为给定复制池维护的数据副本数量设置命令,请运行以下形式的命令:
ceph osd pool set {poolname} size {num-replicas}
重要
The {num-replicas}
参数包括主对象本身。例如,如果您希望除了原始对象外还有两个副本(总共三个对象实例)指定3
:
ceph osd pool set data size 3
您可以独立地为每个所需的池运行上述命令。
Note
PG可能会在副本少于pool
size
的情况下以降级模式接受I/O。要设置I/O所需的最小副本数,您应该使用min_size
设置。例如,您可能会运行以下命令:
ceph osd pool set data min_size 2
此命令确保数据池中的任何对象都不会在副本少于min_size
(在这种情况下,两个)的情况下接收I/O。请注意,在生产环境中设置size
to2
或min_size
to1
风险数据丢失,并且只能在某些紧急情况下,然后只能暂时进行。
获取对象副本的数量
要获取对象副本的数量,请运行以下命令:
ceph osd dump | grep 'replicated size'
Ceph将列出池并突出显示replicated size
属性。默认情况下,Ceph维护三个副本或副本,大小为3
).
管理标记为--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}
池的名称。它必须是现有的池:此命令不会创建新池。
- 类型:
字符串
- 必需:
是。
- {peering_crush_bucket_count}
此值与
peering_crush_bucket_barrier
一起使用,以根据所选行动集中存在的不同桶的数量,确定行动集中的OSDs是否可以相互对等。- 类型:
整数
- 必需:
是。
- {peering_crush_bucket_target}
此值与
peering_crush_bucket_barrier
和size
一起使用,以计算限制同一桶中选择为PG行动集的OSD数量的bucket_max
值。- 类型:
整数
- 必需:
是。
- {peering_crush_bucket_barrier}
池的PGs分布的CRUSH桶类型,例如,
rack
,row
或datacenter
.- 类型:
字符串
- 必需:
是。
- {crush_rule}
用于池的CRUSH规则。池的类型必须与CRUSH规则
replicated
或erasure
).- 类型:
字符串
- 必需:
是。
- {size}
池中RADOS对象(因此PG)的副本数量。
- 类型:
整数
- 必需:
是。
- {min_size}
必须处于活动状态的最小副本数,才能为IO操作提供服务。
- 类型:
整数
- 必需:
是。
- {--yes-i-really-mean-it}
此标志是确认您确实想要绕过安全检查并为池设置值的必需标志,例如,当您尝试将
peering_crush_bucket_count
或peering_crush_bucket_target
设置为比crush map中的桶数量更多的值时。- 类型:
标志
- 必需:
否。
为扩展池取消设置值
要将池恢复为非扩展状态,请运行以下形式的命令:
ceph osd pool stretch unset {pool-name} {crush_rule} {size} {min_size}
以下是参数的分解:
- {pool-name}
池的名称。它必须是现有的已扩展池,即使用命令ceph osd pool stretch set 设置过。.
- 类型:
字符串
- 必需:
是。
- {crush_rule}
退出扩展池后使用的crush规则。池的类型必须与
- 类型:
字符串
- 必需:
是。
- {size}
退出扩展池后对象的数量。
- 类型:
整数
- 必需:
是。
- {min_size}
退出扩展池后为IO所需的最小副本数。
- 类型:
整数
- 必需:
是。
显示扩展池的值
要显示扩展池的值,请运行以下形式的命令:
ceph osd pool stretch show {pool-name}
以下是参数的分解:
- {pool-name}
池的名称。它必须是现有的已扩展池,即它已经使用命令ceph osd pool stretch set 设置过。.
- 类型:
字符串
- 必需:
是。
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.