小编说:开放性、可扩展性和可靠性,使Ceph 成为了存储行业中的翘楚。这是云计算和软件定义基础设施的时代,我们需要一个完全软件定义的存储,更重要的是它要为云做好了准备。无论你运行的是公有云、私有云还是混合云,Ceph 都非常合适。
目前Ceph 是一种已经震撼了整个存储行业的最热门的软件定义存储技术。它是一个开源项目,为块存储、文件存储和对象存储提供了统一的软件定义解决方案。Ceph 旨在提供一个扩展性强大、性能优越且无单点故障的分布式存储系统。从一开始,Ceph 就被设计为能在通用商业硬件上运行,并且支持高度扩展(逼近甚至超过艾字节的数量)。
如今的软件系统非常智能,已经可以最大限度地利用商业硬件来运行规模庞大的基础设施。Ceph 就是其中之一;它明智地采用商业硬件来提供企业级稳固可靠的存储系统。
Ceph 已被不断完善,并融入以下建设性理念:
- 每个组件能够线性扩展
- 无任何单故障点
- 解决方案必须是基于软件的、开源的、适应性强的
- 运行于现有商业硬件之上
- 每个组件必须尽可能拥有自我管理和自我修复能力
对象是Ceph 的基础,也是Ceph 的构建部件,并且Ceph 的对象存储很好地满足了当下及将来非结构化数据存储需求。相比传统存储解决方案,对象储存有其独特优势;我们可以使用对象存储实现平台和硬件独立。Ceph 谨慎地使用对象,通过在集群内复制对象来实现可用性;在Ceph 中,对象不依赖于物理路径,这使其独立于物理位置。这种灵活性使Ceph 能实现从PB(petabyte)级到EB(exabyte)级的线性扩展。
Ceph 性能强大,具有超强扩展性及灵活性。它可以帮助用户摆脱昂贵的专有存储孤岛。Ceph 是真正的在商业硬件上运行的企业级存储解决方案,是一个低成本但功能丰富的存储系统。Ceph 通用存储系统同时提供块存储、文件存储和对象存储,使客户可以按需使用。
数据存储需求在过去的几年中爆发性增长。研究表明,大型组织中的数据每年以40%到60%的速度增长,许多公司的数据规模每年会增加一倍。IDC 分析师估计,2000 年全球共有数字数据54.4 艾字节(Exabyte);到2007 年,达到295 艾字节;到2020 年,有望达到44 泽字节(Zettabyte)。传统存储系统无法应对这种数据增速,我们需要像Ceph 这样的分布式可扩展系统,而且最重要的是它经济实惠。Ceph 专门用来应对当今以及将来的数据存储需求。
- SDS(软件定义存储)
SDS 可以降低你存储基础设施的TCO (Total Cost of Ownership,总体拥有成本)。除降低存储成本外,SDS 还具有灵活性、可扩展性和可靠性。Ceph 是一个真正的SDS 方案,它运行在无厂商锁定的商业硬件之上,并使每GB 数据存储成本降至很低。不像传统存储
系统硬件必须和软件绑定在一起,在SDS 中,你可以自由地从任何制造商那里选择商业硬
件,可随意按自己的需要设计异构的硬件解决方案。Ceph 基于这些硬件,通过软件定义存储的方法来全方位地满足你的各种需求,并在软件层中提供了所有企业级存储特性。
- 云存储
云基础设施的难点之一是存储。每一个云基础设施都需要可靠的、低成本、可扩展、与云其他模块相比更紧密集成的存储系统。有很多号称云就绪的传统存储解决方案已经在市场上出现了,但如今我们的存储不仅要能够与云系统结合,还有很多其他需求。我们需要能和云系统完全集成、可提供更低TCO 且具有完全可靠性和可扩展性的存储系统。云系统是软件定义的,建立在商业硬件之上;类似地,云所需要的存储系统也必须采用同样方式,也就是基于商业硬件以及软件定义,而Ceph 是云存储的最佳选择。
Ceph 已迅速发展,并逐步成为真正的云存储后端。它已入驻各个大型开源云平台,比如OpenStack、CloudStack 和OpenNebula。此外,Ceph 已成功与云计算厂商如Red Hat、Canonical、Mirantis、SUSE 等建立互利伙伴关系。这些公司正帮助Ceph 经历重要时刻,包括使其作为他们Openstack 云平台的指定存储后端,这些都正逐渐使Ceph 成为云存储技术领域中炙手可热的技术。
OpenStack 开源项目是公有云和私有云领域的最佳范例之一。它已经被证明是一个纯粹的开源云解决方案。 OpenStack 包含很多项目,如Cinder、Glance 和Swift,可为OpenStack提供存储功能。这些OpenStack 组件需要具备像Ceph 这样可靠、可扩展、统一集成的存储后端。出于这个原因,OpenStack 和Ceph 社区已经在一起合作很多年,开发了完全兼容OpenStack 的Ceph 存储后端。
基于Ceph 的云基础设施提供了服务供应商急需的灵活性,来建立存储即服务和基础设施即服务的解决方案。这是他们无法从其他传统企业存储解决方案中获得的,因为这些方案并不旨在满足云计算需求。通过使用Ceph,服务提供商可以提供低成本的可靠的云存储给他们的客户。
- 统一的下一代存储架构
近来,统一存储的定义已经发生变化。几年前,所谓“统一存储”指的是由一个单一的系统来提供文件存储和块存储。现在,因为最近的技术进步,例如云计算、大数据、物联网,新类型的存储一直在演变,对象存储也随之出现。因此,所有不支持对象存储的存储系统都不是真正的统一存储解决方案。真正的统一存储是像Ceph 这样的——能在一个系统中统一地提供块存储、文件存储和对象存储。
在Ceph 中,“统一存储”这个概念比现有存储厂商所宣称的更有意义。从设计上,Ceph已经完全为未来做好了准备,被构造为能够处理海量数据。我们强调Ceph“为未来做好了准备”,是特指其对象存储功能,它比块存储和文件存储更适合当今的非结构化数据。Ceph不仅支持块存储和文件存储,更重要的是可以基于对象来实现块存储和文件存储。对象通过消除元数据操作来提供更好的性能和极大的扩展。Ceph 使用算法来动态地计算对象应当被储存和获取的位置。
SAN 和NAS 系统的传统存储架构是非常局限的。基本上,它们具有传统控制节点的高可用性,也就是说,一个存储控制节点出现故障后,将从第二个控制节点提供数据。但是,如果第二个控制节点同时出现故障呢?甚至更糟糕的情况,如果整个磁盘柜发生故障呢?在大多数情况下,最终会丢失数据。这种存储架构无法承受多次故障,因此绝对不是我们想要的。传统存储系统的另一个缺点是其数据存储和访问机制。它拥有一个中心元数据查找表,每次在客户端发送一个读写操作请求后,存储系统首先在巨大的元数据表中进行查找,在确定实际数据的位置后再执行客户端操作。对于较小的存储系统,你可能不会注意到性能问题,但对于一个大型存储集群,你一定会被这种方法的性能限制约束,它甚至会限制你的可扩展性。
Ceph 不拘泥于这样的传统存储架构;事实上,它的架构已经完全被革新了。它不再存储和处理元数据,而是引入了一个新的方法:即CRUSH(Controlled Replication UnderScalable Hashing)算法。CRUSH 表示数据存储的分布式选择算法。CRUSH 算法取代了在元数据表中为每个客户端请求进行查找,它计算系统中数据应该被写入或读出的位置。通过计算元数据,就不再需要管理元数据表了。现代计算机速度惊人,可以非常迅速地执行CRUSH 查找。此外,其计算量通常不大,还可以分布到集群的多个节点上。除此之外,CRUSH 还独具基础架构感知功能。它能理解基础设施各个部件之间的关系。CRUSH保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。正是得益于CRUSH 算法,Ceph 可以处理多个组件故障,以保证可靠性和持久性。
CRUSH 算法使Ceph 实现了自我管理和自我修复。在一个故障域内某组件发生故障时,CRUSH 能感知到是哪个组件出了故障,并判断该故障对集群的影响。在没有任何管理干预情况下,CRUSH 自我管理并通过恢复因故障丢失的数据而自愈。CRUSH 从集群所维护的副本中重新产生数据。如果你已经正确配置了Ceph CRUSH map,它就会确保你的数据至少有一个副本始终可以访问。通过使用CRUSH,我们能设计出一个无单一故障点的高度可靠的存储基础设施。它使Ceph 成了一个面向未来的高可扩展和高可靠的存储系统。
- Ceph 架构概述
Ceph 内部架构非常直接,下图将帮助我们理解:
Ceph monitor(监视器,简称MON):Ceph monitor 通过保存一份集群状态映射来维护整个集群的健康状态。它分别为每个组件维护映射信息,包括OSD map、MONmap、PG map(会在后面的章节中讨论)和CRUSH map。所有群集节点都向MON节点汇报状态信息,并分享它们状态中的任何变化。Ceph monitor 不存储数据;这是OSD 的任务。
Ceph 对象存储设备(OSD):只要应用程序向Ceph 集群发出写操作,数据就会被以对象形式存储在OSD 中。这是Ceph 集群中唯一能存储用户数据的组件,同时用户也可以发送读命令来读取数据。通常,一个OSD 守护进程会被捆绑到集群中的一块物理磁盘上。所以,在通常情况下,Ceph 集群中的物理磁盘的总数,与在磁盘上运行的存储用户数据的OSD 守护进程的数量是相同的。
Ceph 元数据服务器(MDS):MDS 只为CephFS 文件系统跟踪文件的层次结构和存储元数据。Ceph 块设备和RADOS 并不需要元数据,因此也不需要Ceph MDS守护进程。MDS 不直接提供数据给客户端,从而消除了系统中的故障单点。
RADOS(Reliable Autonomic Distributed Object Store):RADOS 是Ceph 存储集群的基础。在Ceph 中,所有数据都以对象形式存储,并且无论是哪种数据类型,RADOS 对象存储都将负责保存这些对象。RADOS 层可以确保数据始终保持一致。
要做到这一点,须执行数据复制、故障检测和恢复,以及数据迁移和在所有集群节点实现再平衡。
librados:librados 库为PHP、Ruby、Java、Python、C 和C 这些编程语言提供了方便地访问RADOS 接口的方式。同时它还为诸如RBD、RGW 和CephFS 这些组件提供了原生的接口。Librados 还支持直接访问RADOS 来节省HTTP 开销。
RADOS 块设备(RBD):众所周知,RBD 是Ceph 块设备,提供持久块存储,它是自动精简配置并可调整大小的,而且将数据分散存储在多个OSD 上。RBD 服务已经被封装成了基于librados 的一个原生接口。
RADOS 网关接口(RGW):RGW 提供对象存储服务。它使用librgw(Rados Gateway Library)和librados,允许应用程序与Ceph 对象存储建立连接。RGW 提供了与Amazon S3 和OpenStack Swift 兼容的RESTful API。
CephFS:Ceph 文件系统提供了一个使用Ceph 存储集群存储用户数据的与POSIX兼容的文件系统。和RBD、RGW 一样,CephFS 服务也基于librados 封装了原生接口。