Ceph我的项目最早起源于Sage就读博士期间的工作(最早的成绩于2004年发表),并随后奉献给开源社区。在通过了数年的倒退之后,目前已失去泛滥云计算厂商的反对并被广泛应用。RedHat及OpenStack都可与Ceph整合以反对虚拟机镜像的后端存储。然而在2014年OpenStack火爆的时候、Ceph并不被很多人所承受。过后Ceph并不稳固(Ceph公布的第四个版本 Dumpling v0.67),而且架构新鲜,简单,过后人们对Ceph在生产落地如何保障数据的平安,数据的一致性存在狐疑。
随着OpenStack的疾速倒退,给Ceph的倒退注入了强心剂,越来越多的人应用Ceph作为OpenStack的底层共享存储,Ceph在中国的社区也蓬勃发展起来。近两年OpenStack火爆度不迭当年,借助于云原生尤其是Kubernetes技术的倒退,作为底层存储的基石,Ceph再次发力,为Kubernets有状态化业务提供了存储机制的实现。
存储发展史
企业中应用存储依照其性能,应用场景,始终在继续倒退和迭代,大体上能够分为四个阶段:
•DAS:Direct Attached Storage,即直连存储,第一代存储系统,通过SCSI总线扩大至一个内部的存储,磁带整列,作为服务器扩大的一部分;
•NAS:Network Attached Storage,即网络附加存储,通过网络协议如NFS近程获取后端文件服务器共享的存储空间,将文件存储独自分离出来;
•SAN:Storage Area Network,即存储区域网络,分为IP-SAN和FC-SAN,即通过TCP/IP协定和FC(Fiber Channel)光纤协定连贯到存储服务器;
•Object Storage:即对象存储,随着大数据的倒退,越来越多的图片,视频,音频动态文件存储需要,动仄PB以上的存储空间,需有限扩大。
存储的倒退,依据不同的阶段诞生了不同的存储解决方案,每一种存储都有它过后的历史诞生的环境以及利用场景,解决的问题和优缺点。
区别如下:
DAS 直连存储服务器应用 SCSI 或 FC 协定连贯到存储阵列、通过 SCSI 总线和 FC 光纤协定类型进行数据传输;例如一块有空间大小的裸磁盘:/dev/sdb。DAS存储尽管组网简略、老本低廉然而可扩展性无限、无奈多主机实现共享、目前曾经很少应用了。
NAS网络存储服务器应用TCP网络协议连贯至文件共享存储、常见的有NFS、CIFS协定等;通过网络的形式映射存储中的一个目录到指标主机,如/data。NAS网络存储应用简略,通过IP协定实现相互拜访,多台主机能够同时共享同一个存储。然而NAS网络存储的性能无限,可靠性不是很高。
SAN存储区域网络服务器应用一个存储区域网络IP或FC连贯到存储阵列、常见的SAN协定类型有IP-SAN和FC-SAN。SAN存储区域网络的性能十分好、可扩展性强;然而老本特地高、尤其是FC存储网络:因为须要用到HBA卡、FC交换机和反对FC接口的存储。
Object Storage对象存储通过网络应用API拜访一个有限扩大的分布式存储系统、兼容于S3格调、原生PUT/GET等协定类型。表现形式就是能够有限应用存储空间,通过PUT/GET有限上传和下载。可扩展性极强、应用简略,然而只应用于动态不可编辑文件,无奈为服务器提供块级别存储。
综上、企业中不同场景应用的存储,应用表现形式无非是这三种:磁盘(块存储设备),挂载至目录像本地文件一样应用(文件共享存储),通过API向存储系统中上传PUT和下载GET文件(对象存储)。
什么是Ceph?
接下来咱们要讲讲Ceph,那么到底什么是Ceph呢?Ceph可能提供企业中三种常见的存储需要:块存储、文件存储和对象存储,正如Ceph官网所定义的一样“Ceph uniquely delivers object, block, and file storage in one unified system.”,Ceph在一个对立的存储系统中同时提供了对象存储、块存储和文件存储,即Ceph是一个对立存储,可能将企业企业中的三种存储需要对立汇总到一个存储系统中,并提供分布式、横向扩大,高度可靠性的存储系统,Ceph存储提供的三大存储接口:
上图详见官网文档:http://docs.ceph.org.cn/
1、CEPH OBJECT STORE对象存储,蕴含性能,个性如下:
•RESTful Interface RESTful格调接口;
•S3- and Swift-compliant APIs 提供兼容于S3和Swfit格调API;
•S3-style subdomains S3格调的目录格调;
•Unified S3/Swift namespace 对立扁平的S3/Swift命名空间,即所有的对象寄存在同一个立体上;
•User management 提供用户治理认证接入;
•Usage tracking 应用状况追踪;
•Striped objects 对象切割,将一个大文件切割为多个小文件(objects);
•Cloud solution integration 云计算解决方案即成,能够与Swfit对象存储即成;
•Multi-site deployment 多站点部署,保障可靠性;
•Multi-site replication 多站点复制,提供容灾计划。
2、CEPH BLOCK DEVICE块存储,蕴含性能,个性如下:
•Thin-provisioned 瘦调配,即先调配特定存储大小,随着应用理论应用空间的增长而占用存储空间,防止空间占用;
•Images up to 16 exabytes 耽误现象最大能反对16EB;
•Configurable striping 可配置的切片,默认是4M;
•In-memory caching 内存缓存;
•Snapshots 反对快照,将过后某个状态记录下载;
•Copy-on-write cloning Copy-on-write克隆复制性能,即制作某个镜像实现疾速克隆,子镜像依赖于母镜像;
•Kernel driver support 内核驱动反对,即rbd内核模块;
•KVM/libvirt support 反对KVM/libvirt,实现与云平台如openstack,cloudstack集成的根底;
•Back-end for cloud solutions 云计算多后端解决方案,即为openstack,kubernetes提供后端存储;
•Incremental backup 增量备份;
•Disaster recovery (multisite asynchronous replication) 劫难复原,通过多站点异步复制,实现数据镜像拷贝。
3、CEPH FILE SYSTEM文件存储,蕴含性能,个性如下:
•POSIX-compliant semantics POSIX格调接口;
•Separates metadata from data 元数据metadata和数据data离开存储;
•Dynamic rebalancing 动态数据平衡;
•Subdirectory snapshots 子目录快照;
•Configurable striping 可配置切割大小;
•Kernel driver support 内核驱动反对,即CephFS;
•FUSE support 反对FUSE格调;
•NFS/CIFS deployable 反对NFS/CIFS模式部署;
•Use with Hadoop (replace HDFS) 可反对与Hadoop继承,替换HDFS存储。
艰深点讲:Ceph提供了三种存储接口:块存储RBD,对象存储RGW和文件存储CephFS,每种存储都有其相应的性能和个性。
Ceph存储架构
Ceph 举世无双地用对立的零碎提供了对象、块、和文件存储性能,它可靠性高、治理简便、并且是自由软件。Ceph 的弱小足以扭转贵公司的 IT 基础架构、和治理海量数据的能力。Ceph 可提供极大的伸缩性——供成千用户拜访 PB 乃至 EB 级的数据。Ceph 节点以一般硬件和智能守护过程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠互相通信来复制数据、并动静地重散布数据。
什么是Ceph分布式存储?
接下来,咱们先来看一下Ceph的存储架构,理解Ceph的分布式架构,性能组件和波及相干概念。Ceph分布式集群是建设在RADOS算法之上的,RADOS是一个可扩展性,高牢靠的存储服务算法,是Ceph的实现的根底。Ceph有两个重要的组件组成:Ceph Monitors(Ceph监视器)和Ceph OSDs(Ceph OSD 守护过程)。
其中Ceph Monitor作为集群中的控制中心,领有整个集群的状态信息,各个组件如OSDs将本人的状态信息报告给Ceph Monitor这个总司令,由此能够可知,Ceph Monitor这个总司令肩负起整个集群协调工作;同时Ceph Monitor还负责将集群的指挥工作,将集群的状态同步给客户端,客户端依据Ceph Monitor发送的集群状态信息能够获取到集群的状态,当集群状态有变动如OSD减少或故障时,Ceph Monitor会负责更新集群状态并下发给客户端。Ceph Monitor的重要显而易见,为了保障集群的可用性,须要部署高可用,个别须要部署2n+1个节点,如3个或5个Ceph Monitor节点。
什么是集群的状态呢?Ceph Monitor中保留的集群状态依据其性能角色的不同,分为以下几个map状态表:
•Monitor Maps,集群Ceph Monitor集群的节点状态,通过ceph mon dump能够获取;
•OSD Maps,集群数据存储节点的状态表,记录集群中OSD状态变动,通过ceph osd dump能够获取;
•PGs Maps,PGs即placement group,示意在OSD中的分布式形式,通过ceph pg dump能够获取;
•Crush Maps,Crush蕴含资源池pool在存储中的映射门路形式,即数据是如何散布的;
•MDS Maps,CephFS依赖的MDS治理组件,可通过ceph mds dump获取,用于追踪MDS状态。
除了Ceph Monitor之外,还有一个重要的组件是OSD,集群中通常有多个OSD组成,OSD即Object Storage Daemon,负责Ceph集群中真正数据存储的性能,也就是咱们的数据最终都会写入到OSD中。除了Monitor之外,依据Ceph提供的不同性能,还有其余组件,包含:
•Ceph Monitors(ceph-mon);
•Ceph OSDs(ceph-osd);
•Ceph MDS(ceph-mds),用于提供CephFS文件存储,提供文件存储所需元数据管理;
•Ceph RGW(ceph-rgw),用于提供Ceph对象存储网关,提供存储网关接入;
•Ceph Manager(ceph-mgr),提供集群状态监控和性能监控。
注:Ceph Monitor监视器保护着集群运行图的主正本。一个监视器集群确保了当某个监视器生效时的高可用性。存储集群客户端向 Ceph Monitor 监视器索取集群运行图的最新正本。而Ceph OSD 守护过程查看本身状态、以及其它 OSD 的状态,并报告给监视器们。存储集群的客户端和各个 Ceph OSD 守护过程应用 CRUSH 算法高效地计算数据地位,而不是依赖于一个中心化的查问表。它的高级性能包含:基于 librados的原生存储接口、和多种基于 librados 的服务接口。
Ceph数据的存储
理解完Ceph的架构后,咱们先来理解一下Ceph的读写流程,期间会波及到CRUSH,PGs等这些概念,咱们从一个最根本的的概念动手:Ceph中所有皆对象,不论是RBD块存储接口,RGW对象存储接口还是文件存储CephFS接口,其存储如到Ceph中的数据均能够看作是一个对象,一个文件须要切割为多个对象(object),而后将object存储到OSD中,如下图:
注:Ceph 存储集群从 Ceph 客户端接收数据——不论是来自 Ceph 块设施、 Ceph 对象存储、 Ceph 文件系统、还是基于 librados 的自定义实现——并存储为对象。每个对象是文件系统中的一个文件,它们存储在对象存储设备上。由 Ceph OSD 守护过程解决存储设备上的读/写操作。
那么,这些切割后的object怎么抉择到对应的OSD存储节点呢,这须要依赖于Ceph的智能调度算法CRUSH,通过CRUSH算法将object调度到适合的OSD节点上,不论是客户端还是OSD,均应用CRUSH算法来计算object在集群中OSD的地位信息,同时保障object的副本能落到适合的OSD节点上,对于CRUSH算法的实现比较复杂,详情能够参考:CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data。
Ceph OSD 在扁平的命名空间内把所有数据存储为对象(也就是没有目录档次)。对象蕴含一个标识符、二进制数据、和由名字/值对组成的元数据,元数据语义齐全取决于 Ceph 客户端。例如, CephFS 用元数据存储文件属性,如文件所有者、创立日期、最初批改日期等等。
object调度到OSD节点上,如果一个文件产生了变动或OSD呈现了异样,以一个100G的文件为例,每个object默认为4M,将会切割为25600个object,如果Ceph集群须要正对每个object都进行调度的话,可想而知,在一个大规模集群中,crush的调度将会变得异样的沉重。因而,Ceph引入了另外一个概念PG,PG是Place Group即搁置组,能够简略了解为一个装载object的容器,object将映射到PG中,PG最终会调度到某个具体的OSD上,因而CRUSH由object调度转为PG的调度,而PG的数量是绝对固定的,因而集群散布时调度绝对没有那么沉重,同时,当某个OSD异样时,CRUSH调度算法只需将其上的PG调度至其余OSD上(而不是将其上的object进行调度)。Ceph的整个数据调度写入流程如下图:
•一个文件将会切割为多个object(如1G文件每个object为4M将切割为256个),每个object会由一个由innode(ino)和object编号(ono)组成oid,即object id,oid是真个集群惟一,惟一标识object对象;
•针对object id做hash并做取模运算,从而获取到pgid,即place group id,通过hash+mask获取到PGs ID,PG是存储object的容器;
•Ceph通过CRUSH算法,将pgid进行运算,找到以后集群最适宜存储PG的OSD节点,如osd1和osd2(假如为2个正本);
•PG的数据最终写入到OSD节点,实现数据的写入过程,当然这里会波及到多正本,一份数据写多正本。
好了,当初咱们对Ceph有了根本意识了。前面咱们讲持续理解Ceph伸缩性和高可用性;动静集群治理;纠删编码;缓存分级等内容。当然、咱们也会具体理解到如纠删编码中对于读出和写入编码块,被中断的齐全写等更细的内容。
本文由博客群发一文多发等经营工具平台 OpenWrite 公布