本文由Ceph中国社区-火鸾翻译、小猴子校稿 英文出处:Ceph Erasure Coding Introduction 欢迎加入CCTG
Ceph介绍Ceph 是一个运行在通用硬件平台上的、拥有高度扩展能力的软件定义存储开源项目。Ceph 可以在单个软件平台上同时支持对象、块、文件系统,并具有自动管理、自动修复、无单点故障等特性。由于其高可扩展性的软件定义存储架构,Ceph 不仅成为了传统存储的理想替代品,而且是云计算环境中的对象、块存储的有力解决方案。 Ceph 起源于 Sage Weil 在 2004 年 6 月份的一篇博士学术论文。虽然目前 Ceph 已经被 Redhat 收购,但其仍然保持开源。并且 Ceph 社区也非常活跃。(Ceph Github) 下面是 Ceph 的架构图,其核心为 RADOS(resilient automatic distributed object storage)。基于 RADOS, Ceph 提供了大量的接口:
以上的这些接口都是基于 RADOS 协议实现的,所以它们就相当于 RADOS 的‘客户端’。
纠删码介绍纠删码理论始于 20 世纪 60 年代。最著名的算法是 Reed-Solomon。随着时间的推移,出现了很多基于其的变化版本,比如 Fountain Codes, Pyramid Codes 和 Local Repairable Codes 等。 纠删码通常需要定义一个磁盘的总数(N),数据盘的数量(K),这样的配置下最多可以容忍 N – K 的磁盘故障。 比如一个典型的 Reed Solomon 方案(8,5),8 是磁盘的总数,5 是数据盘的个数。在这样的场景中,数据在磁盘中的分布大概像这样: RS (8,5) 可以容忍任意 3 块磁盘的故障。如果某些数据块丢失,可以通过剩下的可用数据恢复出原始的内容。 在云存储中,我们通常会使用副本的方式来保证系统的可用性。问题是当存储达到 PB 级别后要求的容量将会非常高。通过使用纠删码技术可以在保证相同可用性的情况下,节省大量存储空间,从而大大的降低 TCO(总体成本)。Ceph 从 Firefly 版本开始支持纠删码。
实现方法Ceph 通常的读/写流程(副本): 在使用纠删码的情况下,读/写流程发生了改变:
纠删码写:数据将在主 OSD 进行编码然后分发到相应的 OSDs 上去。
纠删码读:从相应的 OSDs 中获取数据后进行解码。 如果此时有数据丢失,Ceph 会自动从存放校验码的 OSD 中读取数据进行解码。 目前建议仅在对象存储模式中使用纠删码。对于文件系统及块存储,由于性能的问题 Ceph 不建议使用纠删码。 现在在 Ceph 中存在各种不同的纠删码插件:Jerasure,ISA-l 和 LRC。 Jerasure 是由 Prof. James Plank 开发的一个开源EC库,它被用于很多的 EC 环境中,并且性能表现不错。 ISA-l 针对使用某些定制化指令集的英特尔平台进行了一些优化,目前也是开源的。 LRC 和 Jerasure、ISA-l 属于不同的层面,因为它可以使用 Jerasure 或 ISA-l 作为后端编码/解码库。
在Ceph中怎样使用纠删码功能Ceph 在存储池级别使用纠删码。创建存储池时需要设置各种纠删码参数。比如: 存储在该池中的所有对象都会参与编码。但是这一切对于客户端是透明的、无法感知的。 目前 Ceph 提供了自己的 EC 插件管理系统,这样在将来增加更多的 EC 插件会变得十分容易。这些接口的定义如: 如果你的 EC 插件支持以上的接口,你就可以很容易的加载它们。 Ceph 通过一个 EC 配置文件对纠删码的参数进行简单的管理: 通过一个 EC 配置文件可以很容易的创建一个纠删码存储池:
参考文献:Ceph 官网 Inktank – Ceph 的专业支持服务 Inktank – Ceph 参考架构 Inktank Ceph Enterprise (ICE) Ceph 官方文档 开始使用 Ceph Ceph 高级特性 Ceph 概览 Ceph 和 Openstack |
|
来自: waston > 《fs_storage》