ceph pool 存储池


ceph 存储池

创建池

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

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

  • 弹性:您可以设置允许多少 OSD 失败而不会丢失数据。对于复制池,它是对象的所需副本/副本数。典型配置存储一个对象和一个附加副本(即),但您可以确定副本/副本的数量。对于纠删码池,它是编码块的数量(即在纠删码配置文件中size = 2``m=2
  • 归置组:您可以设置池的归置组数量。典型配置为每个 OSD 使用大约 100 个置放群组来提供最佳平衡,而不会消耗太多计算资源。设置多个池时,请注意确保为池和整个集群设置合理数量的归置组。
  • CRUSH 规则:当您将数据存储在池中时,对象及其副本(或用于纠删码池的块)在集群中的放置由 CRUSH 规则控制。如果默认规则不适合您的用例,您可以为您的池创建自定义 CRUSH 规则。
  • 快照:当您使用 来创建快照时,您可以有效地拍摄特定池的快照。ceph osd pool mksnap

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

列出池

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

ceph osd lspools

创建一个池

在创建池之前,请参阅池、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>]

在哪里:

{pool-name}
  • 描述

    池的名称。它必须是独一无二的。

  • 类型

    细绳

  • 必需的

    是的。

{pg-num}
  • 描述

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

  • 类型

    整数

  • 必需的

    是的。

  • 默认

    8

{pgp-num}
  • 描述

    用于放置目的的放置组总数。这 应该等于归置组的总数,归置组拆分场景除外。

  • 类型

    整数

  • 必需的

    是的。如果未指定,则选择默认值或 Ceph 配置值。

  • 默认

    8

{replicated|erasure}
  • 描述

    池类型可以通过保留对象的多个副本来复制以从丢失的 OSD 中恢复,或者擦除以获得一种 通用的 RAID5功能。该复制池需要更多的原料存储,但实现所有头孢操作。该 擦除池需要较少的原料存储,但仅实现了可用操作的一个子集。

  • 类型

    细绳

  • 必需的

    不。

  • 默认

    复制的

[crush-rule-name]
  • 描述

    用于此池的 CRUSH 规则的名称。指定的规则必须存在。

  • 类型

    细绳

  • 必需的

    不。

  • 默认

    对于复制池,它是由config 变量指定的规则。这个规则必须存在。对于擦除池,是使用擦除代码配置文件还是其他方式。如果此规则尚不存在,则将隐式创建该规则。osd pool default crush rule``erasure-code``default {pool-name}

[erasure-code-profile=profile]
  • 描述

    仅适用于擦除池。使用纠删码配置文件。它必须是osderasure-code-profile set定义的现有配置 文件

  • 类型

    细绳

  • 必需的

    不。

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

    自动缩放模式

  • 类型

    细绳

  • 必需的

    不。

  • 默认

    默认行为由选项控制。osd pool default pg autoscale mode

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

[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 标志设置为 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在被压缩之前被分解成更小的 blob 大小 。

  • 类型

    无符号整数

size
  • 描述

    设置池中对象的副本数。有关更多详细信息,请参阅设置对象副本数。仅限复制池。

  • 类型

    整数

min_size
  • 描述

    设置 I/O 所需的最小副本数。有关更多详细信息,请参阅设置对象副本数。在纠删码池的情况下,这应该设置为大于“k”的值,因为如果我们允许值“k”的 IO,则没有冗余,并且在永久 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
  • 描述

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

  • 类型

    整数

  • 有效范围

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

  • 版本

    版本 FIXME

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 1小时

hit_set_fpp
  • 描述

    bloom命中集类型的误报概率。有关其他信息,请参阅布隆过滤器

  • 类型

    双倍的

  • 有效范围

    0.0 - 1.0

  • 默认

    0.05

cache_target_dirty_ratio
  • 描述

    在缓存分层代理将它们刷新到后备存储池之前,包含已修改(脏)对象的缓存池的百分比。

  • 类型

    双倍的

  • 默认

    .4

cache_target_dirty_high_ratio
  • 描述

    在缓存分层代理将它们以更高的速度刷新到后备存储池之前,包含已修改(脏)对象的缓存池的百分比。

  • 类型

    双倍的

  • 默认

    .6

cache_target_full_ratio
  • 描述

    在缓存分层代理将它们从缓存池中驱逐之前,包含未修改(干净)对象的缓存池的百分比。

  • 类型

    双倍的

  • 默认

    .8

target_max_bytes
  • 描述

    max_bytes阈值被触发时,Ceph 将开始刷新或驱逐对象 。

  • 类型

    整数

  • 例子

    1000000000000 #1-TB

target_max_objects
  • 描述

    max_objects阈值被触发时,Ceph 将开始刷新或驱逐对象 。

  • 类型

    整数

  • 例子

    1000000 #1M 对象

hit_set_grade_decay_rate
  • 描述

    两个连续的hit_sets之间的温度衰减率

  • 类型

    整数

  • 有效范围

    0 - 100

  • 默认

    20

hit_set_search_last_n
  • 描述

    在hit_sets中最多计数N次出现以进行温度计算

  • 类型

    整数

  • 有效范围

    0 - hit_set_count

  • 默认

    1

cache_min_flush_age
  • 描述

    缓存分层代理将对象从缓存池刷新到存储池之前的时间(以秒为单位)。

  • 类型

    整数

  • 例子

    600 10分钟

cache_min_evict_age
  • 描述

    缓存分层代理将从缓存池中驱逐对象之前的时间(以秒为单位)。

  • 类型

    整数

  • 例子

    1800 30分钟

fast_read
  • 描述

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

  • 类型

    布尔值

  • 默认值

    0

scrub_min_interval
  • 描述

    负载低时池清理的最小间隔(以秒为单位)。如果为 0,则使用 config 中的值 osd_scrub_min_interval。

  • 类型

    双倍的

  • 默认

    0

scrub_max_interval
  • 描述

    无论集群负载如何,池清理的最大间隔(以秒为单位)。如果为 0,则使用配置中的 osd_scrub_max_interval 值。

  • 类型

    双倍的

  • 默认

    0

deep_scrub_interval
  • 描述

    池“深度”擦洗的时间间隔(以秒为单位)。如果为 0,则使用配置中的 osd_deep_scrub_interval 值。

  • 类型

    双倍的

  • 默认

    0

recovery_priority
  • 描述

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

  • 类型

    整数

  • 默认

    0

recovery_op_priority
  • 描述

    指定此池的恢复操作优先级而不是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
hit_set_type
  • 描述

    hit_set_type

  • 类型

    细绳

  • 有效设置

    bloom, explicit_hash,explicit_object

hit_set_count
hit_set_period
hit_set_fpp
cache_target_dirty_ratio
cache_target_dirty_high_ratio
cache_target_full_ratio
target_max_bytes
target_max_objects
cache_min_flush_age
cache_min_evict_age
fast_read
scrub_min_interval
scrub_max_interval
deep_scrub_interval
allow_ec_overwrites
recovery_priority
recovery_op_priority

设置对象副本数

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

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

重要的

{num-replicas}包括所述对象本身。如果您想要对象和对象的两个副本作为对象的总共三个实例,请指定3

例如:

ceph osd pool set data size 3

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

ceph osd pool set data min_size 2

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

获取对象副本数

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

ceph osd dump | grep 'replicated size'

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


Author: 一抹忘忧
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source 一抹忘忧 !
  TOC