> 文章列表 > Ceph入门与精通-Ceph Pools(存储池)

Ceph入门与精通-Ceph Pools(存储池)

Ceph入门与精通-Ceph Pools(存储池)

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

当您首次部署集群而不创建池时,Ceph 使用默认池来存储数据。池为您提供:

  • 弹性:您可以设置允许多少 OSD 失败而不会丢失数据。对于复制池,它是对象的所需副本/副本数。典型配置存储一个对象和一个附加副本(即size = 2),但您可以确定副本/副本的数量。对于纠删码池,它是编码块的数量(即在纠删码配置文件中m=2)

  • Placement Groups:您可以为池设置归置组的数量。典型的配置为每个 OSD 使用大约 100 个归置组来提供最佳平衡,而不会占用太多计算资源。设置多个池时,请注意确保为池和整个集群设置合理数量的归置组。

  • CRUSH 规则:当您将数据存储在池中时,对象及其副本(或用于纠删码池的块)在集群中的放置由 CRUSH 规则控制。如果默认规则不适合您的用例,您可以为您的池创建自定义 CRUSH 规则。

  • 快照:当您使用 ceph osd pool mksnap 创建快照时,您可以有效地拍摄特定池的快照。

要将数据组织到池中,您可以列出、创建和删除池。您还可以查看每个池的利用率统计信息。

列出池

要列出集群的池,请执行:

ceph osd lspools

创建一个池

在创建池之前,请参阅Pool、PG 和 CRUSH 配置参考。理想情况下,您应该覆盖 Ceph 配置文件中归置组数量的默认值,因为默认值并不理想。有关归置组编号的详细信息,请参阅设置归置组编号

笔记: 从 Luminous 开始,所有池都需要与使用该池的应用程序相关联。有关更多信息,请参阅下面的将池关联到应用程序。

例如:

osd pool default pg num = 100
osd pool default pgp num = 100

要创建池,请执行:

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>]

在哪里:

描述:池的名称。它必须是独一无二的。
类型:String
必需:是的。

描述:池的归置组总数。 有关计算合适数量的详细信息,请参阅归置组。默认值8不适用于大多数系统。
类型:整数
必需:是的。
默认:8

描述:用于放置目的的放置组总数。这 应该等于归置组的总数,除了归置组拆分场景。
类型:整数
必需:是的。如果未指定,则获取默认值或 Ceph 配置值。
默认:8

描述:池类型可以被复制以通过保留对象的多个副本从丢失的 OSD 中恢复,也可以通过擦除来获得一种通用的 RAID5功能。复制池需要更多的原始存储,但会实现所有 Ceph 操作。擦除池需要较少的原始存储,但只实现可用操作的子集。
类型:字符串
必需:否
默认:replicated

  • [crush-rule-name]

描述:用于此池的 CRUSH 规则的名称。指定的规则必须存在。
类型:字符串
必需:否
默认:对于复制池,它是配置变量osd pool default crush rule指定的规则。这条规则必须存在。对于纠删池,是否使用纠删码配置文件。如果此规则尚不存在,则将隐式创建此规则。

  • [erasure-code-profile=profile]

描述:仅适用于擦除池。使用纠删码配置文件。它必须是osd erasure-code-profile set定义的现有配置 文件。
类型:字符串
必需:否

  • --autoscale-mode=<on,off,warn>

描述:自动缩放模式
类型:字符串
必需:否
默认:默认行为由 osd pool default pg autoscale mode 选项控制。

如果您将自动缩放模式设置为on或warn,您可以让系统自动调整或根据实际使用情况建议更改池中的归置组数量。如果您不使用它,那么您应该参考归置组以获取更多信息。

  • [expected-num-objects]

描述:此池的预期对象数。通过设置此值(连同负文件存储合并阈值),PG 文件夹拆分将在池创建时发生,以避免执行运行时文件夹拆分的延迟影响。
类型:整数
必需:否
默认:0,在创建池时不拆分。

将池关联到应用程序

池需要在使用前与应用程序关联。将与 CephFS 一起使用的池或由 RGW 自动创建的池会自动关联。应使用该rbd工具初始化旨在与 RBD 一起使用的池(有关更多信息,请参阅块设备命令)。

对于其他情况,您可以手动将自由格式的应用程序名称关联到池。:

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

笔记: CephFS 使用应用程序名称cephfs,RBD 使用应用程序名称rbd,RGW 使用应用程序名称rgw。

设置池配额

您可以为每个池的最大字节数和/或最大对象数设置池配额。

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

例如:

ceph osd pool set-quota data max_objects 10000

要删除配额,请将其值设置为0。

删除池

要删除池,请执行:

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

要删除池,mon_allow_pool_delete 标志必须在 Monitor 的配置中设置为 true。否则他们将拒绝移除池。

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

如果您为创建的池创建了自己的规则,则应考虑在不再需要池时删除它们:

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

描述:比这更小的块永远不会被压缩。此设置覆盖 bluestore compression min blob * 的全局设置。
类型:无符号整数

  • compression_max_blob_size

描述:compression_max_blob_size比这更大的块在被压缩之前被分成更小的块大小 。
类型:无符号整数

  • size

描述:设置池中对象的副本数。有关详细信息,请参阅设置对象副本数。仅限复制池。
类型:整数

  • min_size

描述:设置 I/O 所需的最小副本数。有关详细信息,请参阅设置对象副本数。在纠删码池的情况下,这应该设置为大于“k”的值,因为如果我们允许 IO 为“k”值,则没有冗余,并且在永久 OSD 故障的情况下数据将丢失。有关更多信息,请参阅纠删码
类型:整数
版本:0.54以上

  • pg_num

描述:计算数据放置时使用的有效放置组数。
类型:整数
有效范围:优于pg_num当前值。

  • pgp_num

描述:计算数据放置时要使用的放置组的有效数量。
类型:整数
有效范围:等于或小于pg_num。

  • crush_rule

描述:用于在集群中映射对象放置的规则。
类型:字符串

  • allow_ec_overwrites

描述:写入纠删码池是否可以更新对象的一部分,因此 cephfs 和 rbd 可以使用它。有关更多详细信息,请参阅带有覆盖的擦除编码。
类型:布尔值
版本:12.2.0以上

  • hashpspool

描述:在给定池上设置/取消设置 HASHPSPOOL 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志

  • nodelete

描述:在给定池上设置/取消设置 NODELETE 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志
版本:版本FIXME

  • nopgchange

描述:在给定池上设置/取消设置 NOPGCHANGE 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志
版本:版本FIXME

  • nosizechange

描述:在给定池上设置/取消设置 NOSIZECHANE 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志
版本:版本FIXME

  • bulk

描述:在给定池上设置/取消设置批量标志。
类型:布尔值
有效范围:true/1 设置标志,false/0 取消设置标志

  • write_fadvise_dontneed

描述:在给定池上设置/取消设置 WRITE_FADVISE_DONTNEED 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志

  • noscrub

描述:在给定池上设置/取消设置 NOSCRUB 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志

  • nodeep-scrub

描述:在给定池上设置/取消设置 NODEEP_SCRUB 标志。
类型:整数
有效范围:1 设置标志,0 取消设置标志

  • hit_set_type

描述:启用缓存池的命中集跟踪。有关其他信息,请参阅布隆过滤器。
类型:字符串
有效设置:bloom, explicit_hash,explicit_object
默认:bloom. 其他值用于测试。

  • hit_set_count

描述:为缓存池存储的命中集数。ceph-osd数字越大,守护程序消耗的 RAM 越多。
类型:整数
有效范围:1. 代理尚未处理 > 1。

  • hit_set_period

描述:缓存池的命中集持续时间(以秒为单位)。ceph-osd数字越大,守护程序消耗的 RAM 越多 。
类型:整数
例子:3600 1hr

  • hit_set_fpp

描述:bloom命中集类型的误报概率。有关其他信息,请参阅布隆过滤器。
类型:Double
有效范围:0.0 - 1.0
默认:0.05

  • cache_target_dirty_ratio

描述:在缓存分层代理将它们刷新到后备存储池之前,缓存池中包含修改(脏)对象的百分比。
类型:Double
默认:.4

  • cache_target_dirty_high_ratio

描述:在缓存分层代理之前缓存池中包含修改(脏)对象的百分比将以更高的速度将它们刷新到后备存储池。
类型:Double
默认:.6

  • cache_target_full_ratio

描述:在缓存分层代理将它们从缓存池中逐出之前,缓存池中包含未修改(干净)对象的百分比。
类型:Double
默认:.8

  • target_max_bytes

描述:Ceph 将在触发 max_bytes 阈值时开始刷新或驱逐对象 。
类型:整数
例子:1000000000000 #1-TB

  • target_max_objects

描述:Ceph 将在触发max_objects阈值时开始刷新或驱逐对象 。
类型:整数
例子:1000000 #1M 对象

  • hit_set_grade_decay_rate

描述:两个连续命中集之间的热度衰减率
类型:整数
有效范围:0 - 100
默认:20

  • hit_set_search_last_n

描述:在 hit_sets 中最多计数 N 次出现以进行热度计算
类型:整数
有效范围:0 - hit_set_count
默认:1

  • cache_min_flush_age

描述:缓存分层代理将对象从缓存池刷新到存储池之前的时间(以秒为单位)。
类型:整数
例子:600 10min

  • cache_min_evict_age

描述:缓存分层代理从缓存池中逐出对象之前的时间(以秒为单位)。
类型:整数
例子:1800 30min

  • fast_read

描述:在纠删码池上,如果打开此标志,读取请求将向所有分片发出子读取,并等待直到它收到足够的分片来解码以服务客户端。在 jerasure 和 isa 擦除插件的情况下,一旦第一个 K 回复返回,客户端的请求将立即使用从这些回复中解码的数据提供服务。这有助于权衡一些资源以获得更好的性能。目前此标志仅支持纠删码池。
类型:布尔值
默认值:0

  • scrub_min_interval

描述:负载低时池清理的最小时间间隔(以秒为单位)。如果为 0,则使用 config 中的值 osd_scrub_min_interval。
类型:Double
默认:0

  • scrub_max_interval

描述:池清理的最大间隔(以秒为单位),与集群负载无关。如果为 0,则使用 config 中的值 osd_scrub_max_interval。
类型:Double
默认:0

  • deep_scrub_interval

描述:池“深度”清理的时间间隔(以秒为单位)。如果为 0,则使用 config 中的值 osd_deep_scrub_interval。
类型:Double
默认:0

  • recovery_priority

描述:当设置一个值时,它将增加或减少计算的预留优先级。此值必须在 -10 到 10 的范围内。对不太重要的池使用负优先级,以便它们的优先级低于任何新池。
类型:整数
默认:0

  • recovery_op_priority

描述:指定此池的恢复操作优先级而不是osd_recovery_op_priority。
类型:整数
默认: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

  • hit_set_type

描述:见hit_set_type
类型:字符串
有效设置:bloom, explicit_hash,explicit_object

  • hit_set_count

描述:见hit_set_count
类型:整数

  • hit_set_period

描述:见hit_set_period
类型:整数

  • hit_set_fpp

描述:见hit_set_fpp
类型:Double

  • cache_target_dirty_ratio

描述:见cache_target_dirty_ratio
类型:Double

  • cache_target_dirty_high_ratio

描述:见cache_target_dirty_high_ratio
类型:Double

  • cache_target_full_ratio

描述:见cache_target_full_ratio
类型:Double

  • target_max_bytes

描述:见target_max_bytes
类型:整数

  • target_max_objects

描述:见target_max_objects
类型:整数

  • cache_min_flush_age

描述:见cache_min_flush_age
类型:整数

  • cache_min_evict_age

描述:见cache_min_evict_age
类型:整数

  • fast_read

描述:见fast_read
类型:布尔值

  • 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
类型:布尔值

  • recovery_priority

描述:见recovery_priority
类型:整数

  • recovery_op_priority

描述:见recovery_op_priority
类型:整数

设置对象副本的数量

要设置复制池上的对象副本数,请执行以下命令:

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

** 重要: 包括{num-replicas}对象本身。如果您希望对象和对象的两个副本总共三个对象实例,请指定3.**

例如:

ceph osd pool set data size 3

您可以为每个池执行此命令。** 注意:对象可能会在低于pool size 副本的降级模式下接受 I/O。要设置 I/O 所需的最小副本数,您应该使用该min_size设置。**例如:

ceph osd pool set data min_size 2

这确保了数据池中的任何对象都不会收到少于 min_size副本的 I/O。

获取对象副本的数量

要获取对象副本的数量,请执行以下操作:

ceph osd dump | grep 'replicated size'

Ceph 将列出池,并突出显示 replicated size 属性。默认情况下,ceph 会为一个对象创建两个副本(总共三个副本,或者大小为 3)。

作者:Varden

出处:Varden - 博客园

本文内容如有雷同,请联系作者!

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

[邯郸图房网]