第 5 章 纠删代码池概述


Ceph 默认使用复制池,这意味着 Ceph 将每个对象从 Primary OSD 节点复制到一个或多个次要 OSD。纠删代码(erasure-coded)池可以减少确保数据持久性所需的磁盘空间量,但它的计算比复制要高得多。

Ceph 存储策略涉及定义数据持久性要求。数据持久性意味着,在丢失一个或多个 OSD 时可以保持数据不会丢失。

Ceph 在池中存储数据,并且有两种类型的池:

  • 复制
  • erasure-coded

纠删代码是一种在 Ceph 存储群集中存储对象的方法,即:该算法将对象分割为数据区块(k)和编码区块(m),并将这些区块存储在不同的 OSD 中。

如果 OSD 出现故障,Ceph 会从其他 OSD 检索剩余的数据(k)和编码(m)块,并且纠删代码算法会从这些块中恢复对象。

注意

红帽建议纠删代码池为 K+1 或更多 大小,以防止丢失写入和数据。

纠删代码使用存储容量比复制更高效。n-replication 方法维护对象的 n 个副本(在 Ceph 中默认为 3x),而区块则仅维护 k + m 个区块。例如,3 数据和 2 个编码区块使用原始对象的存储空间 1.5x。

纠删代码使用比复制少的存储开销,但纠删代码池使用的内存比访问或恢复对象时使用的 CPU 数要多。当数据存储需要具有持久性和容错能力,但不需要快速读取性能(如冷存储、历史记录等)时,擦除代码具有优势。

有关纠删代码如何在 Ceph 中工作的信息,请参阅 Red Hat Ceph Storage 8 架构指南中的 Ceph Erasure Coding 部分。

当初始化具有 k=2m=2 的集群时,Ceph 将 创建一个默认的 纠删代码 profile,这意味着 Ceph 会将对象数据分散到三个 OSD 中(k+m == 4),Ceph 可以在不丢失数据的情况下丢失其中一个 OSD。要了解更多有关纠删代码性能分析的信息,请参阅 Erasure Code Profiles 部分。

重要

.rgw.buckets 池配置为纠删代码,所有其他 Ceph 对象网关池配置为复制,否则尝试创建新存储桶会失败并显示以下错误:

set_req_state_err err_no=95 resorting to 500
Copy to Clipboard Toggle word wrap

这样做的原因是,纠删代码池不支持 omap 操作,某些 Ceph Object Gateway 元数据池需要 omap 支持。

5.1. 创建纠删代码池示例

创建纠删代码池并指定 PG。ceph osd pool create 命令创建一个带有 default 配置集的纠删代码池,除非指定了另一个配置集。配置集通过设置两个参数( km )来定义数据的冗余性。这些参数定义数据分割的块数量,并创建编码区块的数量。

最简单的纠删代码池等同于 RAID5,且至少需要四个主机。您可以使用 2+2 配置集创建纠删代码池。

流程

  1. 在具有 2+2 配置的四个节点上为纠删代码池设置以下配置。

    语法

    ceph config set mon mon_osd_down_out_subtree_limit host
    ceph config set osd osd_async_recovery_min_cost 1099511627776
    Copy to Clipboard Toggle word wrap

    重要

    通常,纠删代码池不需要这样做。

    重要

    async 恢复成本是副本上后面的 PG 日志条目数量,以及缺少对象的数量。osd_target_pg_log_entries_per_osd30000。因此,具有单个 PG 的 OSD 可能具有 30000 条目。由于 osd_async_recovery_min_cost 是 64 位整数,因此请将 osd_async_recovery_min_cost 的值设置为 1099511627776,用于带有 2+2 配置的 EC 池。

    注意

    对于具有四个节点的 EC 集群,K+M 的值为 2+2。如果节点完全失败,它不会恢复为四个块,且只有三个节点可用。当您将 mon_osd_down_out_subtree_limit 的值设置为 host 时,在主机停机的情况下,它会防止 OSD 标记为 out,以防止数据重新平衡并等待节点再次启动。

  2. 对于带有 2+2 配置的纠删代码池,请设置配置集。

    语法

    ceph osd erasure-code-profile set ec22 k=2 m=2 crush-failure-domain=host
    Copy to Clipboard Toggle word wrap

    Example

    [ceph: root@host01 /]# ceph osd erasure-code-profile set ec22 k=2 m=2 crush-failure-domain=host
    
    Pool : ceph osd pool create test-ec-22 erasure ec22
    Copy to Clipboard Toggle word wrap

  3. 创建纠删代码池。

    Example

    [ceph: root@host01 /]# ceph osd pool create ecpool 32 32 erasure
    
    pool 'ecpool' created
    $ echo ABCDEFGHI | rados --pool ecpool put NYAN -
    $ rados --pool ecpool get NYAN -
    ABCDEFGHI
    Copy to Clipboard Toggle word wrap

    32 是放置组的数量。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat