设为首页 收藏本站
查看: 924|回复: 0

[经验分享] Ceph分布式存储

[复制链接]

尚未签到

发表于 2019-2-1 13:34:07 | 显示全部楼层 |阅读模式
        目前, 磁盘具备容量优势, 固态硬盘具备速度优势。 但能否让容量和性能不局限在一个存储器单元呢? 我们很快联想到磁盘阵列技术(Redundant Array of Independent Disk, RAID, 不限于HDD) 。 磁盘阵列技术是一种把多块独立的硬盘按不同的方式组合起来形成一个硬盘组(DiskGroup, 又称Virtual Disk) , 从而提供比单个硬盘更高的存储性能与数据备份能力的技术。 磁盘阵列技术既可提供多块硬盘读写的聚合能力, 又能提供硬盘故障的容错能力。镜像技(Mirroring) 又称为复制技术(Replication) , 可提供数据冗余性和高可用性; 条带(Striping) , 可提供并行的数据吞吐能力; 纠删码(Erasure Code) , 把数据切片并增加冗余编码而提供高可用性和高速读写能力。 镜像、 条带和纠删码是磁盘阵列技术经典的数据分发方式, 这3种经典的磁盘技术可通过组合方式提供更加丰富的数据读写性能。
        传统的磁盘阵列技术的关注点在于数据在磁盘上的分发方式, 随着通用磁盘、 通用服务器, 以及高速网络的成本降低, 使数据在磁盘上的分发扩展到在服务器节点上的分发成为可能。 镜像技术、 条带技术和纠删码技术基于服务器节点的粒度实现后, 这些技术的特点不再局限于单个设备的性能, 而是具备“横向扩展”能力。 我们暂且认为这是分布式存储本质的体现。分布式存储解决了数据体量问题, 对应用程序提供标准统一的访问接入, 既能提升数据安全性和可靠性, 又能提高存储整体容量和性能。 可以预见, 分布式存储是大规模存储的一个实现方向。 分布式存储广泛地应用于航天、 航空、 石油、 科研、 政务、 医疗、 视频等高性能计算、 云计算和大数据处理领域。 目前行业应用对分布式存储技术需求旺盛, 其处于快速发展阶段

Ceph是一个开源的分布式存储系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。国内外很多公司实践证明,ceph块存储和对象存储是完成可靠的。

  

Ceph主要有三个基本进程

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

  • MDS(可选)
    为Ceph文件系统提供元数据计算、缓存与同步。在ceph中,元数据也是存储在osd节点中的,mds类似于元数据的代理缓存服务器。MDS进程并不是必须的进程,只有需要使用CEPHFS时,才需要配置MDS节点。

  • Monitor
    监控整个集群的状态,维护集群的cluster MAP二进制表,保证集群数据的一致性。ClusterMAP描述了对象块存储的物理位置,以及一个将设备聚合到物理位置的桶列表。(官网要求集群中至少为三个且为奇数)


  1. 架构总揽



  1.1支持接口

  
        RADOS本身也是分布式存储系统,CEPH所有的存储功能都是基于RADOS实现。RADOS采用C++开发,所提供的原生Librados API包括C和C++两种。Ceph的上层应用调用本机上的librados API,再由后者通过socket与RADOS集群中的其他节点通信并完成各种操作。首先看一下ceph存储过程:
  
         对象存储:即radosgw,兼容S3接口。通过rest api上传、下载文件。

  文件系统:posix接口。可以将ceph集群看做一个共享文件系统挂载到本地。

  块存储:即rbd。有kernel rbd和librbd两种使用方式。支持快照、克隆。相当于一块硬盘挂到本地,用法和用途和硬盘一样。
  
       无论使用哪种存储方式(对象、块、挂载),存储的数据都会被切分成对象(Objects)。Objects size大小可以由管理员调整,通常为2M或4M。每个对象都会有一个唯一的OID,由ino与ono生成,虽然这些名词看上去很复杂,其实相当简单。ino即是文件的File ID,用于在全局唯一标示每一个文件,而ono则是分片的编号。比如:一个文件FileID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为A0与A1。Oid的好处是可以唯一标示每个不同的对象,并且存储了对象与文件的从属关系。由于ceph的所有数据都虚拟成了整齐划一的对象,所以在读写时效率都会比较高。
  但是对象并不会直接存储进OSD中,因为对象的size很小,在一个大规模的集群中可能有几百到几千万个对象。这么多对象光是遍历寻址,速度都是很缓慢的;并且如果将对象直接通过某种固定映射的哈希算法映射到osd上,当这个osd损坏时,对象无法自动迁移至其他osd上面(因为映射函数不允许)。为了解决这些问题,ceph引入了归置组的概念,即PG。
  PG是一个逻辑概念,我们linux系统中可以直接看到对象,但是无法直接看到PG。它在数据寻址时类似于数据库中的索引:每个对象都会固定映射进一个PG中,所以当我们要寻找一个对象时,只需要先找到对象所属的PG,然后遍历这个PG就可以了,无需遍历所有对象。而且在数据迁移时,也是以PG作为基本单位进行迁移,ceph不会直接操作对象。
  对象时如何映射进PG的?还记得OID么?首先使用静态hash函数对OID做hash取出特征码,用特征码与PG的数量去模,得到的序号则是PGID。由于这种设计方式,PG的数量多寡直接决定了数据分布的均匀性,所以合理设置的PG数量可以很好的提升CEPH集群的性能并使数据均匀分布。
  最后PG会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上(其实是把PG中的所有对象存储到节点上),第一个osd节点即为主节点,其余均为从节点。


    1.2 优点
  分布式文件系统很多,ceph相比其他的优点:
  1.2.1 统一存储
  虽然ceph底层是一个分布式文件系统,但由于在上层开发了支持对象和块的接口。所以在开源存储软件中,能够一统江湖。至于能不能千秋万代,就不知了。
  1.2.2 高扩展性
  说人话就是扩容方便、容量大。能够管理上千台服务器、EB级的容量。
  1.2.3 可靠性强
  支持多份强一致性副本,EC。副本能够垮主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自管理、自动修复。无单点故障,容错性强。

  1.2.4 高性能
  因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。在块存储和对象存储中无需元数据服务器。
  注:上面的都是ceph呈现的设计理念优势,由于ceph各个版本都存在bug,具体应用得经过大规模测试验证。推荐版本:0.67.0、0.80.7、0、94.2

  1.3 Rados集群
  Rados集群是ceph的存储核心。下面先简单介绍各个组件的作用。后续会讲解各个组件之间如何协作。


  如图,rados集群中分为以下角色:mdss、osds、mons. Osd 对象存储设备,可以理解为一块硬盘+osd 管理进程,负责接受客户端的读写、osd间数据检验(srub)、数据恢复(recovery)、心跳检测等。Mons 主要解决分布式系统的状态一致性问题,维护集群内节点关系图(mon-map osd-map mds-map pg-map)的一致性,包括osd的添加、删除的状态更新。Mds元数据服务器,在文件存储时是必须配置。需要注意的是,mds服务器并不存放数据,仅仅只是管理元数据的进程。Ceph文件系统的inode等元数据真正存在rados集群(默认在metadata pool)。以下信息,呈现的是ceph集群中状态信息。

  # ceph -s

  cluster 72d3c6b5-ea26-4af5-9a6f-7811befc6522

  health HEALTH_WARN

  clock skew detected on mon.mon1, mon.mon3

  monmap e3: 3 mons at {mon1=10.25.25.236:6789/0,mon2=10.25.25.235:6789/0,mon3=10.25.25.238:6789/0}

  election epoch 16, quorum 0,1,2 mon2,mon1,mon3

  osdmap e330: 44 osds: 44 up, 44 in

  pgmap v124351: 1024 pgs, 1 pools, 2432 GB data, 611 kobjects

  6543 GB used, 153 TB / 160 TB avail

  1024 active+clean

  2. 什么是对象存储

  我的理解从几方面来阐述:
  一是:从存储数据类型来讲,指非结构化数据,如图片、音视频、文档等。
  二是:从应用场景来说,即一次写人多次读取。
  三是:从使用方式,与文件posix不同,对象存储一般使用bucket(桶)概念,给你一个桶,你变可以向桶里存储数据(通过对象id)。


  3. 什么是块存储

  块存储的典型设备是磁盘或磁盘阵列。以块形式的方式存取数据的。单盘的iops和吞吐很低,所以自然想到用raid来并行的读写。Ceph的块存储当然也是解决此类问题,不过利用分布式提供更高的性能,可靠和扩展性。只不过ceph是一种网络块设备,如同SAN。下图就是ceph 将分布在不同主机磁盘“虚拟”后,提供给VM做磁盘。


  4. Ceph 组件交互

  乱扯淡:其实在IT领域,一直是分分合合的状态。分久必合,合久必分。例如,单台计算机由cpu,内存,输入输出设备,总线等组件协同工作。当单机计算,存储能力不足时候,就开始分化成分布式架构。网络就相当于总线,网络设备就是路由中心、数据中转站,对外提供更强计算、存储能力的计算机。物理(逻辑)分开的主机协同工作,则需要主要解决下列的问题:

  连:如何将独立的单元连起来。

  找:连起来的目的当然不是为了繁殖,而是通信。首先得找到它。

  发:找到主机后,得发数据交互才能产生价值,繁衍数据吧。

  接下来看ceph如何解决这些问题的。

  4.1 rados -连连看

  前面介绍了rados集群中各个角色的分工。通过一张逻辑部署图将各个组件联系起来。


  4.2 crush-我要找到你

  Client 读写数据,则需要找到数据应该存放的节点位置。一般做法将这种映射关系记录(hdfs)或者靠算法计算(一致性hash)。Ceph采用的是更聪明的crush算法,解决文件到osd的映射。先看看ceph中管理数据(对象)的关系。首先ceph中的对象被池(pool)化,pool中有若干个pg,pg是管理一堆对象的逻辑单位。一个pg分布在不同的osd上。如图client端的文件会被拆分个object,这些对象以pg的单位分布。


  Crush算法的输入为(pool obj),即ceph的命名空间

  计算pg号,通过obj mod 当前pool中的pg总数

  Crush(pg,crushmap) 计算出多个osd。crush算法是一个多输入的伪随机算法, Crushmap主要是整个集群osd的层次结果、权重信息、副本策略信息。

  后面我会介绍crush算法内部实现细节。

  4.3 ceph rw-数据交互

  Rados集群中节点相互的通信。主要包括下面几个方面:

  客户端读写

  主要接收客户端上传、下载、更新、删除操作。为了保持数据强一致性,写操作必须几个副本写成功后才算一次写操作完成。(客户端只会向primary写)


  集群内部读写

  包括osd间数据同步,数据校验、心跳检查。Mon与osd间心跳检查,mon间状态同步等。

         Journal的作用类似于mysql innodb引擎中的事物日志系统。当有突发的大量写入操作时,ceph可以先把一些零散的,随机的IO请求保存到缓存中进行合并,然后再统一向内核发起IO请求。这样做效率会比较高,但是一旦osd节点崩溃,缓存中的数据就会丢失,所以数据在还未写进硬盘中时,都会记录到journal中,当osd崩溃后重新启动时,会自动尝试从journal恢复因崩溃丢失的缓存数据。因此journal的io是非常密集的,而且由于一个数据要io两次,很大程度上也损耗了硬件的io性能,所以通常在生产环境中,使用ssd来单独存储journal文件以提高ceph读写性能。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670496-1-1.html 上篇帖子: Openstack 之 kolla 部署ceph 下篇帖子: CEPH块存储管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表