5.2. 纠删代码 profile


Ceph 使用 配置集 定义一个纠删代码池。Ceph 在创建纠删代码池和关联的 CRUSH 规则时使用配置集。

Ceph 在初始化集群时创建默认纠删代码配置集,它提供与复制池中的两个副本相同的冗余级别。此默认配置集定义 k=2m=2,这意味着 Ceph 将对象数据分散到四个 OSD (k+m=4),Ceph 可以在不丢失数据的情况下丢失其中一个 OSD。EC2+2 需要最少部署 4 个节点(推荐 5 个节点),并可以临时丢失 1 个 OSD 节点。

使用以下命令显示默认配置集:

$ ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van

您可以创建新配置集来提高冗余,而不增加原始存储要求。例如,一个具有 k=8m=4 的配置集,可以丢失四个(m=4)OSD,这通过在 12 个 (k+m=12) OSD 中分布一个对象实现。Ceph 将对象分成 8 个块,并计算 4 个编码区块来进行恢复。例如,如果对象大小为 8 MB,每个数据块都是 1 MB,每个编码区块的大小也与 1 MB 相同。即使四个 OSD 同时失败,对象也不会丢失。

配置集最重要的参数是 kmcrush-failure-domain,因为它们定义存储开销和数据持久性。

重要

选择正确的配置集非常重要,因为您创建池后无法更改配置集。若要修改配置文件,您必须创建一个具有不同配置文件的新池,并将对象从旧池中迁移到新池中。

例如,如果所需的架构需要可以丢失两个机架,且存储开销为 40% 的开销,则可以定义以下配置集:

$ ceph osd erasure-code-profile set myprofile \
   k=4 \
   m=2 \
   crush-failure-domain=rack
$ ceph osd pool create ecpool 12 12 erasure *myprofile*
$ echo ABCDEFGHIJKL | rados --pool ecpool put NYAN -
$ rados --pool ecpool get NYAN -
ABCDEFGHIJKL

主 OSD 将 NYAN 对象分成四个 (k=4) 数据块,并创建两个额外的块 (m=2)。m 的值定义可以同时丢失 OSD 的数量,而不会丢失任何数据。crush-failure-domain=rack 将创建一个 CRUSH 规则,以确保在同一机架中不会存储两个块。

纠删代码
重要

红帽支持对 km 的以下 jerasure 编码值:

  • k=8 m=3
  • k=8 m=4
  • k=4 m=2
重要

如果 OSD 数量丢失等于编码区块数(m),则灾难恢复池中的某些放置组将进入不完整的状态。如果丢失的 OSD 数量小于 m,则任何放置组将处于不完整的状态。在这两种情况下,不会发生数据丢失。如果放置组处于 incomplete 状态,则暂时减少纠删代码池的 min_size 允许恢复。

5.2.1. 设置 OSD erasure-code-profile

要创建新的纠删代码配置集:

语法

ceph osd erasure-code-profile set NAME \
         [<directory=DIRECTORY>] \
         [<plugin=PLUGIN>] \
         [<stripe_unit=STRIPE_UNIT>] \
         [<_CRUSH_DEVICE_CLASS_>]\
         [<_CRUSH_FAILURE_DOMAIN_>]\
         [<key=value> ...] \
         [--force]

其中:

目录
描述
设置载入 code 插件的目录名称。
类型
字符串
必填
No.
默认
/usr/lib/ceph/erasure-code
plugin
描述
使用纠删代码插件计算编码区块并恢复缺少的块。详情请查看 Erasure Code 插件 部分。
类型
字符串
必填
No.
默认
Jerasure
stripe_unit
描述
每个条带的数据块中的数据量。例如,带有 2 个数据块和 stripe_unit=4K 的配置集会将范围 0-4K 置于块 0 中,将 4K-8K 置于块 1 中,8K-12K 再次置于块 0 中。这应该是 4K 的倍数以获得最佳性能。创建池时,从 monitor 配置选项 osd_pool_erasure_code_stripe_unit 中获取了默认值。使用这个配置集的池的 stripe_width 将是这个 stripe_unit 的数据区块数乘以这个 stripe_unit
类型
字符串
必填
No.
默认
4K
crush-device-class
描述
设备类,如 hddssd
类型
字符串
必填
默认
none,这意味着 CRUSH 使用所有设备,而不需要考虑类型。
crush-failure-domain
描述
故障域,如 hostrack
类型
字符串
必填
默认
主机
key
描述
剩余的键值对的语义由退出代码插件定义。
类型
字符串
必填
No.
--force
描述
按名称覆盖现有配置集。
类型
字符串
必填
No.

5.2.2. 删除 OSD erasure-code-profile

删除纠删代码 profile:

语法

ceph osd erasure-code-profile rm RULE_NAME

如果池引用配置集,则删除会失败。

警告

使用 osd erasure-code-profile rm 命令删除纠删代码 profile 不会自动删除与纠删代码配置集关联的 CRUSH 规则。红帽建议使用 ceph osd crush rule remove RULE_NAME 命令手动删除关联的 CRUSH 规则,以避免意外行为。

5.2.3. 获取 OSD erasure-code-profile

显示纠删代码池配置集:

语法

ceph osd erasure-code-profile get NAME

5.2.4. 列出 OSD erasure-code-profile

列出所有纠删代码 profile 的名称:

语法

ceph osd erasure-code-profile ls

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.