Ceph通过CRUSH这个算法计算存储和读取的位置,动态计算元数据,快速查找。同时CRUSH以多副本方式存储数据,保证数据的高可用。CRUSH使得Ceph能够自我管理和治愈,当故障区域的组件故障时,CRUSH能够感知到哪个组件故障了,确认其对集群的影响,然后自我管理和治愈,为因故障丢失的数据进行恢复操作,根据集群中维护的副本来重新生成丢失的数据。在任何时候,集群数据都会有个副本分布在集群的主机上。
Ceph是支持块、文件和对象。
1)Ceph块存储:块存储是存储区域网络中的一个数据存储类别,数据以块的形式存储在卷中,卷则挂载到节点上。它能够为程序提供更大的存储空间,其可靠性和性能都会更高。
RBD协议,为客户端提供可靠、分布式和高性能的块存储。RBD块呈带状分布在多个Ceph对象上,这些对象则本身又分布在整个Ceph集群中。因此能够保证数据可靠性以及性能。RBD已经被Linux内核支持。换句话说,RBD驱动程序在过去的几年里后已经很好的跟Linux内核集成,几乎所有的linux系统发行版本都支持RBD。除了可靠性和性能外,RBD也支持其他企业级特性,完整和增量式快照、精简配置、写时复制式克隆等。还支持全内存式缓存,大大提高性能。
Ceph RBD支持最大镜像为16EB,这些镜像可以作为磁盘映射到物理裸机、虚拟机或其他主机使用。Ceph RBD块完全支持云平台。在Openstack中,可以通过cinder(块)和glance(image)组件来使用Ceph块设备。
2)Ceph文件系统:就是CephFS,是一个兼容了POSIX的文件系统,利用Ceph存储集群来保存用户数据。linux内核驱动支持CephFS,这使得CephFS高度适用于各大linux系统发行版。
CephFS将数据和元数据分开存储,为上层应用提供较高的性能以及可靠性。
在Ceph集群内部,Ceph文件系统库(libcephfs)运行在RADOS库(librados)上。后者是Ceph存储集群协议,由文件、块、和对象存储共用。要使用CephFS,你的集群节点上最少要配置一个Ceph元数据服务器(MDS)。MDS配置后,客户端可以采用多种方式使用CephFS。如果要把Ceph挂载称文件系统,客户端可以使用本地的Linux内核的功能或者使用Ceph社区提供的ceph-fuse(用户空间文件系统)驱动。
客户端还可以使用第三方开源程序,例如NFS的Ganesha和smb/CIFS的Samba。这些程序通过libcephfs将用户数据存入可靠的分布式Ceph存储集群。CephFS也可以用来替代Apache Hadoop File System (HDFS)。它也是通过libcephfs组件将数据存入Ceph集群。
3)Ceph对象存储
Ceph是一个分布式存储对象系统,通过它的对象网关(object gateway),也就是RADOS网关(radosgw)提供对象存储接口。RADOS网关利用librgw(rados网关库)和librados这些库,允许应用程序跟Ceph对象存储建立连接。Ceph通过Resetful API提供可访问且最稳定的多租户对象存储解决方案之一。
RADOS网关提供RESTful接口让用户的应用程序将数据存储到Ceph集群中。RADOS网关接口满足以下特点:
兼容Swift:这是为Openstack Swift API提供的对象存储功能
兼容S3:这是Amazon S3 API提供的对象存储功能。
Admin API:管理API或者原生API,应用程序可以直接通过它来获取访问存储系统的权限以管理存储系统 。
要访问Ceph对象存储系统,也可以绕开RADOS网关层,这样更灵活并且速度更快。librados软件库允许用户的应用程序通过C、C++、java、python和php直接访问Ceph对象存储。Ceph对象存储具有多站点(multisite)的能力,也就是说它能为灾难恢复提供解决方案。通过RADOS或者联合网关可以配置多站点的对象存储。