当前位置:网站首页 > Haskell函数式编程 > 正文

ceph是什么样的分布式存储(ceph分布式存储有哪些组件)



分布式存储Ceph

一、存储分类

  本地存储:ext3ext4xfs,不能在网络上用

  网络存储

    网络文件系统:共享文件系统

    nfs网络文件系统:通过网络共享资源,用户访问服务器文件系统,它可以将远程的磁盘挂载到本地,当本地的磁盘使用。

    分布式网络文件系统:hdfsglusterfs

    共享裸设备

    块存储 cinder ceph(块存储 对象存储 网络文件系统-分布式)

    SAN(存储区域)

  分布式:集群

  分布式存储分类

    Hadoop HDFS(大数据分布式文件系统)

      HDFS(Hadoop Distributed File System)是一个分布式文件系统,是hadoop中的存储组件,是一个高度容错性的系统,能提供高吞吐量的数据访问,适合大规模数据集上的应用。

      优点

        高容错:自动保存多个副本,副本丢失自动恢复

        良好的数据访问机制:一次写入,多次读取,保证数据一致性。

        适合大数据文件存储,扩展能力强。

      缺点

        低延迟数据访问:难以应付毫秒级以下的应用

        海量小文件存取会占用大量内存

        一个文件只能有一个写入者,仅支持追加。

    OpenStack的对象存储Swift

      OpenStack是开源云计算项目的子项目之一,Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,是python开发的。

      特点

        各存储节点完全对等,是对称的系统架构。

        开发者通过一个RESTful HTTP API与对象存储系统相互作用。

        无单点故障:Swift的元数据存储是完全均匀随机分布的,与对象文件存储一样,元数据也会存储多份,没有一个角色是单点的。

        在不影响性能的情况下,集群通过增加外部节点进行扩展。

        无限的可扩展性:存储容量的无线可扩展性,Swift性能(如Qps、吞吐量等)可线性提升,扩充只需要简单地新增机器,系统自动完成数据迁移,使各存储节点重新达到平衡状态。

        极高数据的持久性

    用途

      图片、文档

      长期保存的日志文件

      存储媒体的照片、音乐、视频等

      视频监控文档的存储

      总结:Swift适合用来存储大量的、长期的、需要备份的对象

    公有云对象存储

      公有云大多都只有对象存储,例如谷歌云存储使一个快速、具有可扩展性和高可用性的对象存储。

      Amazon类似产品就是S3 : http://aws.amazon.com/s3;

      微软类似的产品Azure Bolb

      阿里类似的有OSS

二、ceph介绍

1.1 ceph是什么

Ceph是一个统一的分布式的存储系统,设计初衷是变成一个可避免单点故障的分布式文件系统,提供较好的性能、可靠性和可扩展性。通过网络将数据分散存储在多台独立的设备上。

  统一的:支持多种存储的应用形式,如块存储文件存储对象存储

    块级:block块,又称之为物理块,是操作系统读写硬盘的单位,一个逻辑块对应一个物理块

    文件级:逻辑文件---切分---》多个逻辑文件块---》物理块block---->扇区

    1、块存储:存储设备共享给客户端的是一块裸盘,那么该存储设备提供的就是块存储

        主要是将裸磁盘空间映射给主机使用,类似于SAN存储,使用场景主要是文件存储,日志存储,虚拟化镜像文件等。

      特点:客户端可定制性强,可以自己制作文件系统,然后挂载使用,或者直接可以把操作系统安装在块存存储,主要用于vm的本地硬盘 

    2、文件存储:为了解决数据共享,并且保持一致,存储设备中分出一块空间,然后制作文件系统,然后在存储设备中完成挂载,再共享给客户端。

         典型代表:FTP 、NFS 为了克服块存储无法共享的问题,所以有了文件存储,在服务器上架设FTP与NFS服务就是文件存储。

      特点: 客户端定制性差,不能自己制作文件系统,问价系统在存储设备中制作好的,客户端使用的就是一个文件夹

        文件的检索与存储过程都是在存储设备完成,意味着随着客户端数目的增多存储设备的压力就会越大,所以文件存储会限制集群的扩展规模。

    3、对象存储:为了解决多服务器之间共享数据,并且保证一致,没有文件系统的概念,数据的存储分为两部分元数据+内容,客户端通过url地址的方式提交元数据与内容。

      具备块存储的读写高速和文件存储的共享等特性并且通过 Restful API 访问,通常适合图片、流媒体存储。

1.2ceph特性

  高性能:数据分布平衡

    a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。

    b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。

    c. 能够支持上千个存储节点的规模,支持TBPB级的数据。

  高可用性:没有单点故障,多数据副本,自动管理,自动修复

    a. 副本数可以灵活控制。

    b. 支持故障域分隔,数据强一致性。

    c. 多种故障场景自动进行修复自愈。

    d. 没有单点故障,自动管理。

  高可扩展性:使用普通的x86服务器,支持10-1000台服务器,支持TBEB级的扩展

    a. 去中心化。

    b. 扩展灵活。

    c. 随着节点增加而线性增长。

  特性丰富

    a. 支持三种存储接口:块存储、文件存储、对象存储。

    b. 支持自定义接口,支持多种语言驱动。

1.3 ceph架构

  ceph集群称之为rados,ceph集群相当于网络版的raid01

  ceph集群的子集群:

    osd daemon集群:是一个套接字应用程序,唯一对应一块数据盘(数据盘的组成可以是一块机械硬盘+一块固态盘的两个分区)

1.3 Ceph的核心组件

  Osd用于集群中所有数据与对象的存储,处理集群数据的复制、恢复、回填、再均衡,并向其他osd守护进程发送心跳,然后向mon提供一些监控信息,当ceph存储集群设定数据有量个副本时(一 共存两份),则至少需要两个OSD守护进程,即两个OSD节点。集群才能达到activate+clean(可用)状态。

  Mds Ceph 文件系统提供元数据计算、缓存和同步(也就是说, Ceph 块设备和 Ceph 对象存储不使用 MDS ),在 ceph 中元数据也是存储在 osd 中节点中的, mds 类似于元数据的代理缓存服务器。
  Monitor 监控整个集群的状态,维护 cluster MAP 二进制表,保证集群数据的一致性。 ClusterMap 描述了对象块存储的物理位置,以及一个设备聚合到物理位置的列表。一个 Ceph 集群需要多个 Monitor 组成的小集群,它们通过 Paxos 同步数据,用来保存 OSD 的元数据。
  CRUSH CRUSH Ceph 使用的数据分布算法,类似一致性哈希,让数据分配到预期的位置。
  PG PG 全称 Placement Groups ,是一个逻辑的概念 , 一个 PG 包含多个 OSD 。引入 PG 这一层其实是为了更好的分配数据和定位数据。
  Object Ceph 最底层的存储单元是 Object 对象,每个 Object 包含元数据和原始数据。

  扩展:对象存储(Object-base Storage)是一种新的网络存储架构。基于对象的存储技术的设备就是对象存储设备(Object-base Storage Device)简称OSD,总体来讲综合了NASSAN的优点。SAN存储 设备通过光纤连接,而NAS存储设备通过TCP/IP连接。对象存储同时具有SAN的高速访问和NAS的分布式数据共享优势,提供了具有高性能高可靠性、跨平台以及安全的数据共享的存储体系结构。

1.4 Ceph工作原理

1.4.1Cephs数据的存储过程

  无论使用哪种存储方式(对象、块、挂载),存储的数据都会被切分成对象(Object,Object size大小可以由管理员调整,通常为2M4M,每个对象有一个唯一的oid,由inoono生成,ino即文件idono即分片编号,但是对象不会直接存储到OSD中,因为对象的size很小,在一个大规模的集群中可能有几百到几千万个对象,这么多对象光遍历寻址速度都很慢,并且如果将对象直接通过某种固定映射的哈希算法映射到OSD上,当这个OSD损坏了,对象无法自动迁移到其他OSD上面(因为映射函数不允许),为解决这个问题,ceph引入了归置组的概念,即PG

  PG 是一个逻辑概念,我们在 linux 系统中可以直接看到对象,但是无法看到 PG ,它在数据寻址时类似于数据库中的索引,每个对象都会固定映射进一个 PG 中,所以当我们要寻找一个对象时,只需要先找到对象所属的 PG ,然后遍历 PG ,无需遍历所有对象,而且在数据迁移时,也是以 PG 作为基本单位进行迁移的, ceph 不会直接操作对象。
  对象是如何映射进 PG 的呢?首先使用静态 hash 函数对 OID 取出特征码,用特征码与 PG 的数量去模,得到序号 PFID ,由于这种设计方式, PG 的数量多寡直接决定了数据分布的均匀性,所以合理设置的 PG 数量可以很好的提升 CEPH 集群的性能并使数据均匀分布。
  本地的磁盘阵列写数据时轮询,因为阵列规模不大,所以数据相对是均匀的,而在ceph中pg数非常庞大,如果再采用轮询的方式,那么数据分配不均匀,所以object-->pg是通过算法算出来的,以保证尽可能地均匀。

  1、ceph是一种伪数据平衡,是通过算法达到的

  object---hash算法--->PG---crush算法--->osd daemon

  2、ceph适用于海量文件,或者单个文件容量大

  object和PG是多对一的,一个osd damon肯定不能属于一个PG组,因为ceph是PG组为单位来分配数据的,如果一个osd daemon只属于一个PG组,那么该osd daemon将只能收这一个PG组发来的数据,如果该PG组没有被hash算法算到,那么就不会收到数据,于是该osd daemon就被闲置了,所以一个osd应该属于多个pg组,到底应该属于多少个呢?

  官方建议:如果ceph集群很长一段时间不会拓展,一个osd daem

on属于100个pg组,否则一般建议osd daemon属于200个pg组。

  ceph的逻辑单位:

    1、pool(存储池):

    在创建存储池时需要指定pg个数,来创建pg,创建pg需要用到crush算法,crush决定了pg与osd daemon之间的对应关系,所以说,在客户端往ceph中写入数据之前,pg与osd daemon的对应关系是已经确定的,虽然是确定的,但是pg与osd daemon的对应关系是动态的

    2、pg(归置组)是分配数据的最小单位,一个pg内包含多个osd daemon

      primary osd

      replication osd  

rados存储完毕后,为客户端提供存储服务,需要

1.5 RADOS的子集群

ceph的底层是Rados,而RADOS由多个子集群构成

1、若干个数据盘:一个Ceph存储节点可以有一个或多个数据盘,每个数据盘上部署有特定的文件系统,比如xfs、ext4或者btrfs,可以是一个分区当一个disk,可以是一个raid当一个disk,也可以是一整块盘当一个disk,但依据经验,一整块盘当一个disk效率更稳定。

2、OSD(Object Storage Device)集群:一个做好文件系统的disk由一个OSD Daemon管理,主要负责

  1、负责控制数据盘文件的读写操作,与Client通信完成各种数据对象操作等。

  2、负责数据的拷贝和恢复

  3、每个osd守护进程监视自己的状态,以及pg组内的其他osd的状态,并且报告给Monitor

  在一个服务器上,一个数据盘对应一个osd daemon,而一个服务器上可以有多个数据块,所以一台服务器就hi运行多个OSD daemon,该服务器称之为OSD节点。一个CEPH集群中有n个OSD节点,综合算下来,OSD集群由一定数目的(从几十到几万个)OSD Daemon组成。

  3、MON(Monitor)集群(整个集群的大管家):

    1、监控全局状态--》cluster map

      1、osd daemon map

      2、monitor map

      3、pg map

      4、crush map

    2、负责管理集群内部状态(osd daemon挂掉,数据恢复等操作)

    3、负责授权。

      客户端在访问时会先通过monitor验证操作权限

      客户端需根monitor要到cluster map

   ps monitor节点的个数=2*n+1,最少三个的奇数个,一个也可以但是不应该有单点故障

   1、为何monitor节点个数应该为奇数个:因为monitor节点同步数据用的是paxos算法(分布式强一致算法),这个算法规定至少有3个节点。

   2、可以挂掉几个monitor节点?不能超过半数挂掉

   3、monitor进程与osd daemon能否在同一个物理节点上?可以但是不好,但是这是一种集中式的思想。

1.6 rados的网络结构

ceph存储池pool

ceph的pool有四大属性

  1、所以性和访问权限

  2、对象副本数目,默认pool池中的一个pg只包含两个osd daemon,即一份数据交给pg后会存下两个副本,生产环境推荐设置为3个副本

  3、PG数目、PG是pool的存储单位,pool的存储空间由pg组成

  4、CRUSH规则集合

创建存储池时,要设置的两个东西

  1、pg数目,决定了数据的均匀性

  创建pool时需要确定PG的数目,在pool被创建后也可以调整该数字,但是增加池中的PG数是影响ceph集群的重大事件之一,生成环境中应该避免那么做,因为pool中的pg数量会影响到

  (1)数据的均匀分布性:CRUSH算法会伪随机地保证PG被选中来存放客户端的数据,它还会尽可能地保证所有PG均匀分布在所有OSD上,即ceph是伪数据平衡,如果只有一个PG,一个PG里副本数为3,那么只有一块PG被用到。

  (2)资源消耗:PG作为一个逻辑实体,它需要消耗一定的资源,包括内存、CPU和带宽、太多PG会消耗很多资源

  (3)清理时间:ceph的清理工作是以PG为单位的,如果一个PG内的数据太多,则其清理时间会很长。

  (4)数据的持久性:pool中的PG个数应该随着osd daemon的增多而增多,这样crush算法可以将pg与osd的对应关系尽量均匀一些,降低同一个osd属于很多很多pg的几率,如果一个osd真的属于很多很多pg,这有可能会很糟糕。

  osd deamon上的pg数目

    1、不能过小,过小则数据不均匀

    2、不能过大,过大则一个osd daemon挂掉影响范围会很广,这会增大数据丢失的风险。

    这个数目应该刚刚好,我们无法决定,是算法决定的,但是我们可以决定送给算法的参数,该参数指的是存储池内所包含的PG数量,只要把该数目设置合理,算法自然会保证数据均匀。

    计算公式:

1.7Ceph的存储方式

  RadosgwCeph对象网关

  Ceph对象网关是一个对象存储接口,建立在该对象之上,librados为应用程序提供了通往Ceph存储集群的RESTful网关,ceph对象存储支持两个接口:

  与S3兼容,为对象存储功能提供与Amazon S3 RESTful API的大部分子集兼容的接口

  兼容Swift,通过与OpenStack Swift API的大部分子集兼容的接口,为对象存储功能提供支持。

ceph对象存储使用Ceph对象网关守护进程(radosgw),它用于与ceph存储群集进行交互的HTTP服务器,由于它提供与OpenStack Swift和Amazon S3兼容接口,因此ceph对象网关具有其自己的用户管理,Ceph对象网关可以将数据存储在用于存储来自Ceph文件系统客户端或Ceph块设备客户端的数据同一ceph存储群集中,S3和Swift API共享一个公共的名称空间,因此您可以使用一个API编写数据,而使用另一个API检索数据。

  ceph文件系统

  ceph文件系统(CephFS)是个POSIX兼容的文件系统,它使用Ceph存储集群来存储数据。Ceph文件系统与Ceph块设备,同时提供S3和Swift API的Ceph对象存储、或者原生库(librados)都使用着相同的Ceph存储集群系统。

  ceph块存储

  块是一个字节序列(例如,一个512字节的数据块),基于块的存储接口是最常见的存储方法,他们基于旋转介质,像硬盘、CD、软盘,无处不在的块设备接口使虚拟块设备成为与Ceph这样的海量存储系统交互的理想之选。

  ceph块设备是精简配置的,大小可调且将数据条带化存储到集群内的多个OSD,Ceph块设备利用RADOS的多种能力,如快照、复制和一致性,ceph的RADOS块设备(RBD)使用内核模块或者librbd库与OSD交互。

存储引擎

  hammer:

    存储引擎filestore:osd daemon——》xfs文件系统——》磁盘

  luminous:

    存储引擎bluestore:osd daemon----》裸磁盘

  通常的做法如下:为何要这么做  

    osd daeomon --LVM--》裸磁盘

  如果ceph集群即将用满了应该怎么扩容,如何扩容?

    方案一:

     osd daemon----》裸磁盘下的扩容方式

      新增一块磁盘,用一个osd daemon管理它,但问题是,新增一个osd daemon,ceph会在该osd daemon上创建一个PG ,说白了就是把该osd daemon划分到一些pg组里,但但凡一块osd daemon被分配到了pg里,会发生数据迁移。

    线上环境:pg数能不动就不动

    方案二:

    osd daeomon --LVM--》裸磁盘 下的扩容方式

      从vg组里划分更多的空间给LVM,不必新增osd daemon

总结:如果集群考虑考虑到日后要扩容,那么推荐使用方案,daeomon --LVM--》裸磁盘 下的扩容方式。

    

到此这篇ceph是什么样的分布式存储(ceph分布式存储有哪些组件)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 指数与对数的转换公式ln(指数与对数的转换公式图片)2025-07-09 22:27:06
  • 密码加密的方式有哪些种类(密码的加密与解密的方式)2025-07-09 22:27:06
  • 支付方式怎么更换(地铁支付方式怎么更换)2025-07-09 22:27:06
  • pd.pivot函数(pd pivot_table)2025-07-09 22:27:06
  • 支付方式怎么更换(支付方式怎么更换指纹密码)2025-07-09 22:27:06
  • 高德支付方式怎么设置(高德支付方式怎么设置的)2025-07-09 22:27:06
  • 485报文格式(485报文怎么看)2025-07-09 22:27:06
  • 窗口函数row_number(窗口函数row_number是干什么的)2025-07-09 22:27:06
  • 支付方式怎么填(支付方式怎么填写)2025-07-09 22:27:06
  • docker网络模型(docker网络的四种模式)2025-07-09 22:27:06
  • 全屏图片