Ceph 存储集群是由几个不同的守护进程组成,守护进程负责Ceph的一个独特的功能并将值添加到相应组件中。每个守护进程相互独立。
RADOS(Reliable Atonomic Distributed Object Store):ceph存储集群的基础。Ceph中一切都以对象的形式存储,Rados 负责存储这些对象,不用考虑他们的数据类型。Rados层确保数据一致性和可靠性。
ODS:对象存储设备。存储实际用户数据并响应客户端读操作的唯一组件。通常一个OSD守护进程与集群的一个物理磁盘绑定。
Ceph monitor(MON):通过一系列的MAP跟踪整个集群的健康状态,主要是这些组件的map:OSD、MON、PG和CRUSH。集群的所有节点都向MON报告状态。一个MON为每一个组件维护一个独立的map。MON不存储数据。
Librados库是用来简化访问RADOS的,支持多数主流语言。主要是提供接口访问RADOS、访问集群。
Ceph块设备:也叫RADOS块设备(RBD),可以被映射、格式化、像磁盘一样挂载到服务器上。可以快速制备,提供快照、克隆等功能。
Ceph对象网关:也称RADOS网关(RGW),提供S3、Swift等API访问接口。
Ceph元数据服务器(MDS)跟踪文件层次结构并存储只给CephFS使用的元数据。Ceph块设备和RADOS网关不需要MDS守护进程。
Ceph文件系统:目前还不推荐在生产环境使用,相信很快可以支持。
Ceph存储系统的基石。也称为Ceph存储集群。Ceph很多优秀的特性都是由RADOS提供的,Ceph的数据访问方法的所有操作都是在RADOS层之上构建的。
Ceph 集群收到来自客户端的写请求时,CRUSH算法首先计算出存储的位置,以次来决定将数据写入什么位置。然后将这些信息传送到RADOS层,基于CRUSH的规则,RADOS以小对象的形式将数据分发到集群的所有节点。最后将这些对象存储在OSD中。
RADOS保证可靠性,把副本放在不同的故障区。可以优化CRUSH规则集来获得更高的可靠性。
RADOS确保对象状态一致性。为Ceph提供自管理和自我修复能力。
RADOS 将数据以对象的形式存储在存储池(RADOS池)中,可以在集群中使用rados lspools
指令得到RADOS池的信息,用rados -p [pool name] ls
查看池子中的对象。
Ceph OSD 将实际数据以对象的形式存储在每一个集群节点的物理驱动器中。Ceph中大部分时间和工作都是OSD守护进程完成的(存储数据嘛,当然费时)
对于任何读写操作,客户端首先向MON请求集群的map,然后不用monitor干预,直接与OSD进行IO操作。
OSD主副本、辅副本。OSD上有很多个对象,对于某些对象而言,该OSD可能是主副本,对于另外的对象尔雅不能可能是辅副本。在磁盘发生故障时,存放有故障磁盘中的对象的其它的OSD副本会被提升为主副本OSD。并在恢复数据时再生成辅副本。
1)Ceph OSD的文件系统
Ceph的OSD由一个已经存在的Linux文件系统的物理磁盘的驱动器和OSD服务组成。OSD在有效Linux分区的物理磁盘驱动器上进行操作。文件系统的特性不同,会给OSD性能及其扩展造成影响。Ceph OSD利用底层文件系统的扩展属性来扩展内部对象状态和元数据的行形式。以下对比三种文件系统下的OSD的区别。
BtrFs:性能最佳。支持写时复制,可写的快照。但是目前不用于生产环境。
XFS:可靠、成熟稳定的文件系统。日志文件系统,客户端每次写入Ceph集群时,首先都要写入日志空间,然后再写入XFS文件系统。两次写,耗时。推荐生产中使用,成熟稳定。
2)Ceph OSD 日志
每次写数据都要先写日志,再写到备份存储。
使用SSD作为日志文件。每个SSD最多给4、5个OSD做日志,否则日志将成为集群的瓶颈。
监控集群的健康状态,不为客户端存储和提供数据,为客户端和句群其它节点提供更新map的服务。Monitor是轻量级的守护进程。
1) 集群map的概念:集群map包括monitor、Osd、PG、CRUSH和MDS map。
Monitor map:维护monitor节点之间端到端的信息。
OSD map:存储osd相关常见信息,输入、状态、权重等。集群ID、OSD map 创建版本等,还有与池相关的信息(池的ID、类型、副本数、归置组)。
PG map:归置组版本、时间戳、最新的OSD map版本、容量充满比例。还有每个归置组的ID、对象数、OSD 的up集合、OSD的acting集合。
CRUSH map:集群存储设备信息、故障域层次结构、以及在故障域中定义如何存取数据的规则。
Librados 是一个本地的C语言库,通过它允许应用程序直接与RADOS通信,这样就可以绕过其它接口层与Ceph集群进行交互,提高了应用程序的性能。它是RADOS的一个库。Librados是其他构建在Librados本地接口之上服务的接口基础,这些服务有Ceph块设备、Ceph文件系统、Ceph RADOS网关。
Ceph块设备也叫RADOS块设备(RBD);它为物理层的虚拟机监控程序以及虚拟机提供存储解决方案。Ceph的RBD驱动程序已经被集成到Linux内核中,也被QEMU/KVM支持,他们能够无缝的访问Ceph设备。
Linux主机能够全力支持内核RBD(KRBD),并通过librados映射Ceph块设备。然后RADOS将CEPH块设备的对象以分布式模式存储在集群中。Ceph块设备映射到Linux主机,它也可以当做裸分区或者标记为文件系统,然后进行挂在。
Ceph 与Openstack等云平台紧密集成。对于Cinder和Glance而言,他们是Openstack的卷和镜像程序,Ceph能够提供它的块设备后端来存储虚拟机的卷操作系统镜像。
Ceph提供写实复制和即时克隆功能,可以燃放Openstack在很短的时间内部署数百个虚拟机。RBD还支持快照,从而快速的保存虚拟机的状态 ,还可以通过快照创建还原点。虚拟机迁移,虚拟化容器都可以配置为从存储在Ceph集群中的卷来启动虚拟机。
Ceph对象网关,也叫RADOS网关,它是一个代理,可以将HTTP请求转化为RADOS,也可以把RADOS请求转化为HTTP请求,从而提供RESTful存储,这兼容S3和Swift。Ceph对象存储使用Ceph对象网关守护进程(radosgw)、与librgw、librados(和集群交互)交互。因此可以通过基于HTTP的RESTful接口来管理Ceph集群。
元数据服务器,只有CephFS才需要,基于对象和块的存储不需要。它作为一个守护进程运行。不向客户端提供任何数据,数据通过OSD服务器提供。MDS提供一个带智能缓存的层的共享型连续文件系统,可以减少大量的镀锡操作。目前不支持在生产环境下使用。
一个元数据服务器的守护进程,可以配置为主动河北被动状态。主MDS节点变为活跃状态,其它进入备用状态。主故障,则第二个MDS接管,并成为活跃节点。
CephFs 在RADOS层上提供了一个兼容POSIX的文件系统。它使用MDS作为守护进程,负责管理其元数据并将它和其它数据分开。CephFs为数据提供动态再平衡。
Libcephfs 库在支持多客户端方面扮演重要角色。它拥有本地Linux内核驱动程序支持,客户可以使用mount来实现本机文件系统的挂载。CephFS使用 cephfuse模块(FUSE)扩展其在用户空间文件系统方面的支持。还支持直接与应用程序交互,使用libcephfs直接访问RADOS集群。
Hadoop HDFS 存在单点故障,扩展性不如cephfs。