ceph基本概念

文章目录

1、传统存储与server san

  1. 传统存储

    • 指的是基于存储设备的专有的机器,用来实现特定的功能,例如san存储或者文件系统存储

    • 基于不同的操作系统实现,cifs,nfs

    • 如果坏掉的话,就需要买特定的存储盘

    • 扩容时,就需要买很多的硬盘,但是,硬盘格是有限的

  2. server san(分布式的的存储)

    • 利用多个服务器实现存储功能,通过软件来实现

    • 让专有设备变成了通用设备,不需要买专门的设备

    • 扩容时,买一个服务器,不够的时候,再买一个服务器,cpu,内存,磁盘都会得到提升

    • 管理相对比较的简单,web界面

  3. 对比

    • 从性能上面:

      • server san 集群达到一定的规模可有超越传统存储(因为随着数量的增加,内存和cpu也会扩大),server san,多台服务器的时候,可以一个数据写入多个服务器中

      • 性能的随着节点的数量增加而提升

    • 从稳定上面:

      • server san是通过网络来通信,传统存储设备通过专有的线来通信,所以的话server san稳定性上面不够,所以的话server san有一个心脏检测机制
    • 从可靠性上面:

      • 传统存储通过raid来实现可靠性,server san基于副本数量(服务器的数量)和纠删码保证可靠性

        • server san的副本就是,将一份数据写入到多个盘中,冗余性
    • 从扩展性:server san实现pb级别存储

    • 从管理性:

      • server san提供web界面,cpeh很多功能需要命令来实现
    • 从应用场景

      • 传统存储应用于金融和军工领域

      • 网络上面的存储,比如相册,图床网盘类的应用的话,使用的都是server san

2、存储使用分类(存储表现的形式)

1、块存储

  • 表现形式,在主机上是硬盘或者光盘的形式存在

  • 使用方式,分区,格式化,挂载,管理文件,文件只能存储在文件系统里面

  • 实现方式,通过san存储区域网格来实现(ip-san,fc-san),直连式存储(存储设备通过前端总线和主机直连,也就是u盘,硬盘,光盘)

  • 都称为san(存储区域网格)

1、ceph怎么实现呢
  • 通过librados上面RBD,也就是块设备

2、文件系统存储

  • 表现形式,在主机目录上就是一个共享目录

  • 使用方式,存储文件,编辑文件,删除文件,能够管理文件完整的生命周期,直接使用,nfs等服务器,通过网络连接起来,windos的的cifs也可以实现

  • 都叫做NAS网络附加存储(网络u盘),网络实现

1、ceph怎么实现
  • cephfs实现文件系统

3、对象存储

  • 表现形式,通常提供一个基于http的web接口来实现对文件的管理,通常是上传文件和下载文件

  • 使用方式,只能实现文件的上传和下载,不能编辑文件

  • 来自亚马逊的s3对象存储,openstack中的swift对象存储

  • web图床,网盘,相册类应用,如果图片,视频放在自己的服务器上面(访问的人很多的情况的话),消耗的带宽是很大的,因此需要将这个存入到第三方的存储中去

    • 带宽就是单位时间内网络可以的数据量

    • 带宽用完时(就是网络传输速率达到了上限),网络的性能会受到一下影响

      • 延迟增加了,网页加载缓慢,等待的时间更加的长了

      • 下载和上传的速度下降

      • 视频卡顿

  • 非常的高效,就是没有目录结构,是扁平化的(都有一个唯一的oid,就是索引的id),也就是一个桶,没有元数据什么的信息

  • 使用方式,ucloud.cn 中的对象存储

1、cpeh怎么实现
  • RGW实现对象存储

3、存储的架构分类

1、集中式存储

  • DAS:直连式存储(Direct Attached Storage),直接与主机相连的存储设备。它依赖于服务器,本身是硬件的堆叠,不带有任何存储操作系统。现在常见的DAS设备:硬盘座带上 N个硬盘。

  • NAS:网络连接式存储(Network Attached Storage),存储设备直连网络,NAS设备和DAS设备不同在于,NAS设备一般带有存储操作系统。如,cifs,nfs,表现为一个目录,小文件的传输

  • SAN:存储网络(Storage Area Network),可以说是一种网络基础设施。SAN和NAS的区别主要在于:SAN针对海量、面向数据块的数据传输,而NAS则提供文件级的数据访问功能。成本非常的高

2、分布式存储

  • glusterfs,分布式文件系统,多个节点,不能实现块存储和对象存储

  • ceph,分布式存储

  • moosefs

4、CEPH

1、优点

  1. 开源统一的存储解决方案(三个都有实现的方式),典型的软件定义存储(SDS软件定义存储)

  2. ceph可以同时提供三大存储应用,也就是ceph可以同时提供块存储,文件系统存储,对象存储

  3. ceph的所有组件都支持集群化部署,不存在单节点的部署,整套集群可以扩展到PB级别

2、ceph哲学

  1. 帮助企业摆脱昂贵的设备,让专用设备变成了通用设备,来提供存储能力

  2. 所有组件都必须运行在通用设备上(就是些廉价的设备)

  3. 所有组件都可以扩展,不存在单点故障

  4. 所有组件都拥有一定自我修复和自我管理能力

    • 有一个节点上面坏了的话,自动丢弃,当这个节点好了的话,就自动将之前的数据拷贝过去

3、ceph技术

  1. ceph本身是一个对象存储(ceph的RADOS)

    • 使用的块设备,是通过很多的对象拼接成一个块提供的,文件系统,也是一样的,格式化对外提供了

    • 性能最高的是直接使用对象存储,因为不需要进行多次的封装

  2. CRUSH算法

    • 决定数据落在哪一个盘上面

    • crush算法负责,集群的自我扩展,数据的自恢复(数据再平衡,数据的故障恢复)

  3. 没有中央节点,客户端通过crush算法,得出对象存储的位置(也就是存储节点和OSD节点)

  4. 客户端和存储节点直接通信,不经过第三方,因此不存在单点故障

4、ceph的全面优点

  1. 可以根据crush算法动态调整架构,比如有一个卷加入进来了,可以自动的进行扩容

  2. 可以快速的定位和响应故障,根据crash

  3. 没有元数据位置服务器和中央节点,对象存储都是对象没有元数据

  4. 客户端和ceph直接进行通信

  5. 支持多客户端并行访问,同时提供三大存储服务

  6. 所有的存储设备都是独立进程运行,互补干扰

  7. 数据自我保护,自我复制

5、CEPH存储后端组件

1、Monitors(MON)

  • 维护集群状态的map,唯一的访问入口,因为mon本身是一个集群

  • 保存一份集群状态映射来维护整个集群的健康状态,分别为每个组件维护映射信息,包括OSD map,MON map,PG map和CRUSH map

  • 所有集群节点都向MON节点汇报状态信息,分享他们状态中的任何变化

  • ceph monito不存储用户数据,有自己的服务的缓存数据,可以丢弃的

  • mon需要配置寄数个,只有超过半数正常,ceph才能运行访问

2、OSD

  • 唯一存储用户的数据的组件,存储的都是对象,数据以对象的形式存储在osd上面

    • 将一个视频存储在上面,先要进行切片,以对象的形式存储
  • 处理数据复制,恢复和再平衡

  • osd与客户端直接进行通信,直接io读写

  • 一个硬盘对应一个osd,新版的ceph,osd需要使用一整块盘,使用一个逻辑卷,就是不要文件系统,直接裸设备

  • 在ceph集群中,osd具有主从关系

    • 所有的io请求都是主osd完成

    • 数据的保护和复制都是由主完成

    • 负责检查数据的一致性

    • 负责数据的平衡,再恢复

    • 现将数据写在主osd,然后主osd复制到多个从osd上面

    • 通常是一主多从的架构

    • 从osd

      • 被动的接收数据复制

      • 随时准备接替主osd的服务,主osd恢复过来后,又将称为osd

3、MGR

  • 表示一个web界面,显示集群信息

  • 通过web管理集群

  • 还有通过cephadmin模块通过命令行管理ceph

  • dashboard默认是主备模式进行部署,工作在tcp的8443端口上面

4、MDS

  • 存储供CEPHFS使用元数据,不存储数据,缓存文件的元数据

  • 当使用文件系统的时候,会得到一个缓存,这样的话效率很高,但是如果不需要文件系统的存储,可以不需要安装这个

  • 使用cephfs的时候,需要安装mds,元数据服务器,缓存文件系统的层次结构,

  • ceph的客户端通过mon得到mds的map,客户端通过mds的元数据去访问对象所在osd节点

6、ceph访问方式

1、通过ceph的api接口(librados)

  • 访问最为高效,可以操作集群中的对象

  • 有一个URL,直接与ceph进行通信 rados://池子/

  • librados可以模拟出RBD(块),CEPHFS。供上层的应用使用

  • RGW模拟出来,从而别的api访问的时候,转换为librados访问

  • 都是(librados)api模拟出来的,从而可以进行访问

2、ceph object gateway(rgw)

  • 对象存储网关,在librados上使用rgw实现对s3和swift主流对象存储的兼容

3、ceph block device(rbd块存储)

  • RBD存储,在librados上使用rbd提供块设备供主机使用

4、ceph file system

  • 可以同时支持多个文件系统,使用mds来进行文件访问加速

5、ceph访问流程(正常写入)

  • 客户端访问集群中的monitor,会得到集群的cluster map(mon,mgr,osd,mds等map信息),这个表包含了存储池的数量等信息

  • 客户端会根据哈希算法使用对象id和存储池的名称的出对象所在的PG

  • 客户端根据找到的PG,使用池的放置算法(CRUSH算法)得出了PG映射的一组OSD

  • 客户端通过PG-map,得出一组OSD中的主OSD节点,第一个OSD是主OSD

  • 客户端向主OSD发起IO请求,完成对象的读写,操作(客户端直接与OSD进行通信)

6、异常写入

  • 客户端访问的monitor的时候,得到了一个cluster map,然后得到了主osd发生了异常的变化,然后选举了一个备OSD变成了临时的主OSD(monitor选举出来的主OSD),然后进行写入即可,同步其他备节点

  • 主OSD恢复了,然后这个临时的主OSD进行全量拷贝到主OSD或者是增量(新数据同步到主OSD),然后临时的主OSD变成了备OSD

  • 下一次客户端IO与旧的OSD通信

7、ceph数据读取流程

  • 默认情况下,ceph的IO请求由主OSD响应,无论是读还是写,都是与主OSD建立连接的,如果想要提高集群读取的效率,可以开启从OSD读加速

8、ceph的寻址流程

  • 客户端会对文件进行切片(默认一个切片大小为4M),因此文件达到ceph的时候就已经是对象(也就是片),就会得到一个oid

  • 对象产生后会根据对象存储池中的放置规则中设置哈希算法,进行计算得出存储在池中哪一个PG上面,也就是PGID

  • PG根据池的放置规则(crush算法),来得到PG映射的一组OSD,根据PG-map找到这一组OSD中的主OSD

  • 客户端向主OSD发送起IO请求,完成对对象的写入

  • 主OSD在对象写入之后,将其同步到其他的从OSD,完成一次IO请求

7、ceph存储池

  • 存储池被称为ceph的逻辑分区,先要存储到池子里面去,然后存储到OSD里面去

  • 一套ceph可以有多个存储池,每个存储池存储一个或者多个对象,不同存储池中的对象是互相隔离的

  • 池子是隔离的

1、存储池理解

  1. 一个池子有一个或者多个hash bucket,每个hash桶可以存储一个或者多个对象,每个桶对应映射的OSD有存储池的规则决定(该规则被称为桶的放置规则),将hash桶称为归置组,简称PG(placement group)
  • 通过hash算法算出映射在哪个位置上面

  • 如果池的副本为2副本,写入的数据就要写入到2个OSD上

  • 简化了对对象的管理,如果没有这些PG的话,当有很多个对象的时候,对应的OSD的映射关系(路径)就越复杂

  • 提高搜索的速度,根据索引即可

  • 一个存储池对应多个一个或者多个PG

  • 一个PG对应一个或者多个OSD,对应OSD数量有池的规则和类型决定

  • 一个对象只能在一个PG上面,一个PG只能在一个存储池中

  • PG映射OSD是由CRUSH算法决定PG最终落盘的OSD,池的crush算法称为池的放置规则

-存储池支持配置用户的权限,让不同的池子可以拥有不同的用户访问的权限

  • 存储池中的PG数量,在新版的CEPH中默认为32个PG,并且支持PG的自我扩展(自动伸缩性),老版本的中的PG只能增加不能减少,理想状态下,单个OSD上承载的PG数量不能超过250个,生产环境下,OSD上的PG数量不能超过200个

2、PG的归置组

  • PG映射到一组OSD,是由Crush算法决定的(CRUSH的存储池放置规则),对象映射到PG,是由hash算法决定的,并且是由(crush存储池放置规则中的哈希算法决定的)

3、存储的流程

  • file.txt 文件存储,客户端进行切片的操作,就是默认大小为4M,

  • 到达ceph时,就已经是对象了

  • 对象映射在PG上,是通过hash算法算出来的,也就是会得到一个oid.1

  • 然后PG映射到OSD上,是通过crush算法算出来的

2. 问题

  • 为什么一个池子不能有一个PG呢

    • 提高存储效率,如果只有一个PG的话,对象就都只存放在一个PG上面在,就不够分散
  • 为什么PG数量决定存储池性能?

    • PG数量过多的话,1000个PG,都没有存储满,这样的话,如果要进行桶迁移的话(或者故障发生的时候),就需要大量的hash计算(每个桶都需要计算),大量的占用cpu,这样的计算没有意义,因为里面是空的吗,内容比较的少,PG过多的话,存储的对象就少一些

    • 如果PG太少的话,每个PG存储的东西非常的多,这样的话迁移的时候,就占用大量的带宽,如果带宽的承载过大,直接导致了客户端的IO出现延时或者超时

  • 为什么要做数据同步

    • ceph书数据强一致性模型,保证所有OSD数据一致性一定要同步
  • 为什么要把主OSD交出去

    • 如果某个PG的主OSD发生了变化,从OSD变成临时OSD,此时这个OSD会比其他的主OSD更多的响应集群的客户端请求,此时将会加大该OSD的负载,因此当故障的OSD恢复时,临时的主OSD会交出主的身份,让集群的OSD更加的均衡响应客户端的请求
相关推荐
学Linux的语莫6 天前
负载均衡,高可用,监控服务搭建总结
linux·服务器·分布式·ceph·lvs
运维小文6 天前
cephFS的使用以及K8S对接cephFS
ceph·云原生·容器·kubernetes·对象存储·cephfs
学Linux的语莫9 天前
ceph集群搭建,ceph块存储,文件存储,对象存储
linux·服务器·分布式·ceph
Rverdoser10 天前
K8S对接ceph的RBD块存储
ceph·容器·kubernetes
学Linux的语莫13 天前
Ceph对象存储
linux·运维·服务器·ceph
学Linux的语莫15 天前
Ceph文件存储
linux·运维·服务器·网络·ceph
学Linux的语莫15 天前
ceph相关的命令
linux·服务器·ceph
运维小文16 天前
ceph的存储池管理
ceph·云原生·对象存储·存储·分布式存储·cephfs
学Linux的语莫16 天前
Ceph分布式存储集群搭建
linux·服务器·ceph·云计算