Ceph的系统架构如下图所示(来源于Ceph.com):
根据架构图,Ceph系统大致可以分为两个层次:
- 用于实现存储资源整合的RADOS。
该层次是一个完整的分布式存储系统,对外以libRADOS的方式提供基于对象协议的访问服务。 - 用于对外提供各类协议的协议转换组件:CephFS、RBD和RGW。
这一层次的三个组件之间是相互独立的,且都通过libRADOS将数据存放在RADOS中,因此都可以视为是RADOS的客户端。
RADOS
RADOS是Ceph的负责实现存储资源整合的子系统,该系统将多个存储设备(磁盘)上的空间整合为一个统一的命名空间,这一命名空间通过对象的方式来组织数据。
对象可以视为一个完整而独立的数据,例如一个视频、一个文档、一段语音等。每一个对象通过其对象id(Object ID/oid)进行标示,对象id是全局唯一的(确切说,在一个存储池内是唯一的)。对象的内容包含数据和扩展属性两部分,其中数据即为一段连续的二进制流,而扩展属性即为键值对的集合。
对象之间相互独立的,每一个对象不知道其他对象的存在。另一方面,对象也没有层次概念,所有的对象位于同一个存储池中,只能通过对象id定位该对象。
RADOS以对象为单位提供数据访问服务,即可以通过对象id从RADOS(的一个存储池中)查询对象并获取其内容;也可以修改对象的内容或者删除该对象。对应的API形式类似于:
- 创建/写入:rados_write(对象名称 , 对象内容, 写入长度,起始偏移量)
- 读取/访问:rados_read(对象名称, 缓存区, 读取长度, 起始偏移量)
- 删除/销毁:rados_remove(对象名称)
libRADOS中定义了所有对象操作的API。
RADOS除了提供对象协议的访问方式外,还负责对其内部存储的对象数据实现数据的冗余、容灾和负载平衡这些对于所有的协议都需要的统一功能。
协议转换组件
libRADOS是Ceph内部的非标准协议,为了满足各类实际应用,需要提供各类标准协议。
Ceph中的各协议转换组件实现了RADOS对象协议到各标准协议的转换,目前已经实现的协议包括:
- CephFS:兼容POSIX的标准文件系统
- RBD:兼容Linux块协议vBlock的块设备协议
- RGW:兼容Amazon S3和OpenStack Swfit的HTTP/REST协议
协议转换组件通过libRADOS访问RADOS,并将所有的数据全部存放到RADOS中,进而通过RADOS完成了数据冗余、容灾和负载平衡。这样协议转换组件不需要考虑以上问题,大幅度简化了其设计。
转载于:https://my.oschina.net/guyson/blog/324505