第 5 章 纠删代码池概述


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

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

Ceph 在池中存储数据,其中有两种池类型:

  • 复制
  • erasure-coded

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

如果 OSD 失败,Ceph 会从其他 OSD 检索剩余的数据(k)和编码(m)块,以及纠删代码算法从这些块中恢复对象。

注意

红帽建议 min_size 用于纠删代码池为 K+1 或更高版本,以防止丢失写入和数据。

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

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

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

Ceph 在使用 k=2m=2 初始化集群时 会创建一个默认 纠删代码配置集,这意味着 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. 创建纠删代码池示例

创建纠删代码池并指定放置组。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 位整数,因此将带有 2+2 配置的 EC 池的 osd_async_recovery_min_cost 的值设置为 1099511627776

    注意

    对于具有四个节点的 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