存储基础
Ceph 存储简介
Ceph Object Store
- RESTful Interface (RESTFul api实现对象的管理上传、下载)
- S3- and Swift-compliant APIs(提供2种风格 api,s3 和 Swift-compliant)
- S3-style subdomains (S3风格的子域)
- Unified S3/Swift namespace (S3/Swift扁平空间)
- User management (安全行:用户认证)
- Usage tracking (使用率追踪)
- Striped objects (分片上传,在重组)
- Cloud solution integration (和云平台集成)
- Multi-site deployment (多站点部署)
- Multi-site replication (多站点复制)
Ceph Block Device
- Thin-provisioned (受分配,使用多少分配多少,慢慢扩大)
- Images up to 16 exabytes (单个镜像最大16EB)
- Configurable striping(可配置切片)
- In-memory caching (内存缓存)
- Snapshots(支持快照)
- Copy-on-write cloning(快照克隆)
- Kernel driver support(内核支持)
- KVM/libvirt support(kvm/librirt支持)
- Back-end for cloud solutions(后端支持云解决方案)
- Incremental backup(增量备份)
- Disaster recovery (multisite asynchronous replication)(灾难恢复)
Ceph File System
- POSIX-compliant semantics (符合 POSIX 的语法)
- Separates metadata from data (metadata和data 分离,数据放入data,元数据放入metadata)
- Dynamic rebalancing (动态从分布,自愈)
- Subdirectory snapshots (子目录筷子)
- Configurable striping (可配置切片)
- Kernel driver support (内核级别挂载)
- FUSE support (用户空间级别挂载)
- NFS/CIFS deployable (NFS/CIFS方式共享出去提供使用)
- Use with Hadoop (replace HDFS) (支持Hadoop 的 HDFS)
Ceph is highly reliable, easy to manage, and free. The power of Ceph
can transform your company’s IT infrastructure and your ability to manage vast
amounts of data. To try Ceph, see our Getting Started guides. To learn more
about Ceph, see our Architecture section.
Ceph架构
Ceph存储架构
Ceph独一无二地统一的系统提供了对象存储、块存储和文件存储功能。Ceph存储集群由几个不同的软件守护进程组成(比较重要的两个是MON和OSD),每个守护进程负责Ceph的一个独特功能并将值添加到相应的组件中。
Ceph术语简介:
- RADOS:可靠、自动、分布式对象存储(Reliable Autonomic Distributed Object Store),它是Ceph存储集群的基础。Ceph中的一切都是以对象的形式存储,而RADOS就负责存储这些对象,而不考虑它们的数据类型。RADOS层确保数据一致性和可靠性。对于数据一致性,它执行数据复制、故障检测和恢复,还包括数据在集群节点间的迁移和再平衡。
- OSD:Ceph 对象存储设备,它是Ceph集群中存储实际用户数据并响应客户端读操作请求的唯一组件。
- MON:Ceph 监视器(Ceph monitor),MON组件通过一系列的map来跟踪整个集群的健康状态,一个MON为每一个组件维护一个独立的map,如OSD、MON、PG、CRUSH。MON不存储实际数据。
- librados:librados库是一种用来简化访问RADOS的方法,目前支持PHP、Python、Ruby、Java、Python、C和C++语言。librados是RBD和RGW的基础,并为CephFS提供POSIX接口。
- RBD:Ceph 块设备,它对外提供块存储,可以被映射、格式化进而像其他磁盘一样挂载到服务器。
- RGW/RADOSGW:Ceph 对象网关,它提供了一个兼容S3和Swift的restful API接口。
- MDS:Ceph 元数据服务器,MDS跟踪文件层次结构并存储只供CephFS使用的元数据。RBD和RGW不需要元数据,因此它们不需要MDS。
- CephFS:Ceph 文件系统,CephFS提供了一个任意大小且兼容POSIX的分布式文件系统。CephFS依赖MDS来跟踪文件层次结构,即元数据。
- MGR: Ceph Manager,Ceph管理器软件,可以收集整个集群的所有状态。有仪表板插件。
- PG:placement groups,归置组,一组对象的逻辑集合。
- PGP:PGP是为实现定位而设置的PG,它的值应该与PG的总数保持一致。
- POOL:Ceph 池,是一个用来存储对象的逻辑分区,方便管理对象。
RADOS
RADOS是Ceph存储系统的核心,也称为Ceph存储集群。Ceph的数据访问方法(如RBD、CephFS、RADOSGW、librados)的所有操作都是在RADOS层之上构建的。当Ceph集群接收到来自客户端的写请求时,CRUSH算法首先计算出存储位置,然后这些信息传递到RADOS层进行进一步处理。RADOS以小对象的形式将数据分发到集群内的所有节点,最后将这些对象存储在OSD中。当配置的复制数大于1时,RADOS负责数据的可靠性,它复制对象,创建副本并将它们存储在不同的故障区域中。
RADOS包含两个核心组件:OSD和MON。
OSD
OSD是Ceph存储集群中最重要的一个基础组件,它负责将实际的数据以对象的形式
存储在每一个集群节点的物理磁盘中。对于任何读写操作,客户端首先向MON请求集群的map,然后客户端就可以直接和OSD进行I/O操作。
一个Ceph集群包含多个OSD。**一个典型的Ceph集群部署方案会为集群节点上的每个物理磁盘创建一个OSD守护进程,这是推荐的做法。
**OSD上的每个对象都有一个主副本和几个辅副本,辅副本分散在其他OSD。一个OSD对于一些对象是主副本,同时对于其他对象可能是辅副本,存放辅副本的OSD手主副本OSD控制,如果主副本OSD异常(或者对应的磁盘故障),辅副本OSD可以成为主副本OSD。
OSD由一个已经存在Linux文件系统的物理磁盘驱动器和OSD服务组成。Ceph推荐OSD使用的文件系统是XFS。OSD的所有写都是先到日志,再到存储。
MON
MON负责监控整个集群的健康状况。它以守护进程的形式存在,一个MON为每一个组件维护一个独立的map,如OSD、MON、PG、CRUSH和MDS map。这些map统称为集群map。MON不为客户端存储和提供数据,它为客户端以及集群内其他节点提供更新集群map的服务。客户端和集群内其他节点定期与MON确认自己持有的是否是集群最新的map。一个Ceph集群通常包含多个MON节点,但是同一时间只有一个领导者MON。
librados
librados是一个本地的C语言库,通过它应用程序可以直接和RADOS通信,提高性能。
RBD
RBD对外提供块存储,可以被映射、格式化进而像其他磁盘一样挂载到服务器。
Linux内核RBD(KRBD)通过librados映射Ceph块设备,然后RADOS将Ceph块设备的对象以分布式模式存储在集群中。一旦Ceph块设备映射到Linux主机,它也可以当作裸分区或标记为文件系统进行挂载。RBD利用librbd库来获取RADOS的好处并提供高可靠、分布式、基于对象的块存储。当客户端向RBD写入数据时,librbd库将数据块映射到对象进而存储在Ceph集群中,删除这些数据对象,并跨集群复制这些对象,从而提供更好的性能和可靠性。
RGW/RADOSGW
RGW,Ceph对象网关,也称做RADOS网关,它是一个代理,可以将HTTP请求转换为RADOS,也可以把RADOS转换为HTTP请求,从而提供restful接口,兼容S3和Swift。Ceph对象网关使用Ceph对象网关守护进程(RGW)与librgw、librados交互。Ceph对象网关支持三类接口:S3、Swift、管理API(通过restful接口管理Ceph集群)。RGW有自己的用户管理体系。
MDS
MDS是元数据服务器,跟踪文件层次结构并存储元数据。只有CephFS才需要。
CephFS
CephFS在RADOS层之上提供了一个兼容POSIX的文件系统。它使用MDS作为守护进程,负责管理其元数据并将它和其他数据分开。CephFS使用cephfuse模块(FUSE)扩展其在用户空间文件系统方面的支持(就是将CephFS挂载到客户端机器上)。它还允许直接与应用程序交互,使用libcephfs库直接访问RADOS集群。
MGR
Ceph管理器软件,可以收集整个集群的所有状态。有仪表板插件。
Ceph 数据写入流程
参考文档
https://docs.ceph.com/en/latest/
https://segmentfault.com/a/1190000038366631
https://docs.ceph.com/en/latest/architecture/