第 5 章 纠删代码池概述


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

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

  • 复制
  • erasure-coded

Ceph 默认使用复制池,这意味着 Ceph 将每个对象从 Primary OSD 节点复制到一个或多个次要 OSD。

纠删代码(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 6 架构指南中的 Ceph Erasure Coding 部分。

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

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

最简单的纠删代码池等同于 RAID5,且至少需要三个主机:

示例

$ 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

注意

pool create 中的 32 代表放置组数量。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat