简介: DAS的全称是Direct Attached Storage(直接附加存储)
之前有简单了解了一下ceph,刚好小组有个ceph大佬,我就趁着周六日多学学ceph这块内容,我司目前用的是N版,我就看N版的了。看看有啥可以请教大佬的,我感觉在ceph这块玩得熟的人都yyds。害,菜鸡开启学习之路!!!
DAS的全称是Direct Attached Storage(直接附加存储),早期的时候服务器的计算能力是有限的,存储插槽也是相对有限的,随着业务空间不断增长的时候,本地的存储空间可能就不够用了,早期的时候都是服务器直接采用SCSI或者FC协议连接到存储阵列,在操作系统当中的表现形式:一块钱空间大小的磁盘,如 /dev/sdb。
「DAS的优点:」
「DAS的缺点:」
「优点:」
「缺点:」
「使用场景:」
SAN的全称是Storage Area Network(存储区域网络),SAN的组网方式是通过使用一个存储区域网络IP或者FC连接到存储阵列,协议类型是:IP-SAN、FC-SAN;在操作系统当中的表现形式:一块空间大小的裸磁盘,如/dev/sdb。
「优点:」
「缺点:」
「使用场景:」
Object Storage(对象存储),组网方式是通过网络使用API的形式访问一个无限扩展的分布式存储系统,Object Storage的协议类型:兼容AWS S3的风格、原生的PUT和GET类型;在操作系统当中的表现形式:通过GET跟PUT无限下载和上传文件
「优点:」
「缺点:」
「使用场景:」 (适合更新变动较少的数据)
「产品举例:」
HDFS、FastDFS、swift;公有云主要有:AWS S3、腾讯云COS、阿里云OSS
ceph是一个统一存储,ceph可以提供三种存储:对象、块、文件存储;ceph有着高可用、容易管理、免费使用的特点;
Ceph提供了三种存储接口:块存储RBD,对象存储RGW和文件存储CephFS,每种存储都有其相应的性能和个性
Ceph 存储由几个不同的守护进程组成,这些守护进程彼此之间是相互独立的,每一个组件提供特定的功能。
RADOS 包含两个核心组件:Ceph Monitor 和Ceph OSD。
Ceph Monitor 是负责监视整个集群的运行状态的, 为了实现高可用性,通常配置为一个小型的集群(一般是3个节点,集群通常是有一个leader和两个slave,当leader故障后集群通过选举产生新的leader,来保障系统的高可用性。)
OSD是Ceph 存储的重要组件。OSD将数据以对象的方式存储到集群中各个节点的磁盘上,完成数据存储的绝大部分工作是由OSD 守护进程来实现的。
Ceph 集群中通常包含有多个OSD,对于任何读写操作,客户端从Ceph Monitor获取Cluster Map之后,客户端将直接与OSD进行I/O操作,而不再需要Monitor干预。这使得数据读写过程更加迅速,不需要其他额外层级的数据处理来增加开销。
OSD通常有多个相同的副本,每个数据对象都有一个主副本和若干个从副本,这些副本默认情况下分布在不同的节点上,当主副本出现故障时(磁盘故障或者节点故障),Ceph OSD Deamon 会选取一个从副本提升为主副本,同时,会产生以一个新的副本,这样就保证了数据的可靠性。
[注]ceph使用的Cluster来实现数据分布算法
Monitor中的信息都是集群成员中的守护程序来提供的,包含了各个节点之间的状态,集群的配置信息。主要用于管理Cluster Map,Cluster Map是整个RADOS系统的关键数据结构,类似元数据信息。Monitor中的Cluster Map 包含五个,分别是:「The Monitor Map」、「The OSD Map」、「The PG Map」、「The CRUSH Map」和「The MDS Map」
用户操作的是File,但是对于ceph来说,存储的是Object,所以需要将File映射为Object,这个映射过程比较简单:本质上就是按照object的最大size对file进行切分,相当于RAID中的条带化过程。这种切分的好处有二:一是让大小不限的file变成大小一直的size(默认的切割大小是4兆),可以被RADOS高效管理的object;二是让对单一file实施的串行处理变为对多个object实施的并行化处理。
每一个切分后产生的object将获得唯一的oid,即object id。其产生方式也是线性映射,极其简单。图中,ino是待操作file的元数据,可以简单理解为该file的唯一id。ono则是由该file切分产生的某个object的序号。而oid就是将这个序号简单连缀在该file id之后得到的。举例而言,如果一个id为filename的file被切分成了三个object,则其object序号依次为0、1和2,而最终得到的oid就依次为filename0、filename1和filename2。
在file被映射为一个或多个object之后,就需要将每个object独立地映射到一个PG中去。
映射的计算公式为:hash(oid) & mask -> pgid
计算分为两步:首先是使用Ceph系统指定的一个静态哈希函数计算oid的哈希值,将oid映射成为一个近似均匀分布的伪随机值。然后,将这个伪随机值和mask按位相与,得到最终的PG序号(pgid)。mask的值是PG的总数-1;
ps:可以理解PG就是Object的目录
PG到OSD的映射其实就是将作为object的逻辑组织单元的PG映射到数据的实际存储单元OSD。如图所示,RADOS采用一个名为CRUSH
的算法,将pgid代入其中,然后得到一组共n个OSD。这n个OSD即共同负责存储和维护一个PG中的所有object。前已述及,n的数值可以
根据实际应用中对于可靠性的需求而配置,在生产环境下通常为3(一般都是为奇数个)。具体到每个OSD,则由其上运行的OSD deamon负责执行映射到本地
的object在本地文件系统中的存储、访问、元数据维护等操作。
CRUSH算法的结果不是绝对不变的,而是受到其他因素的影响。其影响因素主要有:当前系统状态、存储策略配置