第 5 章 纠删代码池


Ceph 存储策略涉及定义数据持久性要求。数据持久性意味着能够在不丢失数据的情况下持续丢失一个或多个 OSD。

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

  • 复制
  • erasure-coded

Ceph 默认使用复制池,即 Ceph 将Primary OSD 节点的每个对象复制到一个或多个次要 OSD。

纠删代码池减少了确保数据持久性所需的磁盘空间量,但在计算上比复制成本高一些。

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

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

注意

红帽建议使用 min_size 使纠删代码池为 K+2 或更多,以防止丢失写入和数据。

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

虽然纠删代码使用的存储开销比复制少,但纠删代码算法在访问或恢复对象时所用的 RAM 和 CPU 数量要多于复制。当数据存储必须具有持久性和容错能力但不需要快速读取性能(如冷存储和历史记录等)时,纠删代码具有优势。

有关 Ceph 中纠删代码如何工作的数学和详细说明,请参见 《红帽 Ceph 存储 4 架构指南 》中的纠删代码 I/O 部分。

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

重要

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

set_req_state_err err_no=95 resorting to 500

其原因在于纠删代码池不支持 omap 操作,而某些 Ceph 对象网关元数据池需要支持 omap

5.1. 创建示例纠删代码池

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

$ ceph osd pool create ecpool 50 50 erasure
pool 'ecpool' created
$ echo ABCDEFGHI | rados --pool ecpool put NYAN -
$ rados --pool ecpool get NYAN -
ABCDEFGHI
注意

池 create 中的 50 代表 PG 的数量。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部