一、认识分布式存储

分布式存储系统,就是通过网络将数据分散存储在多台独立的设备上

二、分布式存储的特性

可扩展性
  1)节点扩展后,旧数据会自动迁移到新节点上,实现负载均衡,避免单点过热的情况出现
  2)水平扩展只需要将新节点和原有集群连接到同一网络,整个过程不会对集群业务造成影响
  3)当节点添加到集群,集群系统的整体容量和性能也会随之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或者回收
低成本
高性能
易用
  分布式存储系统需要能提供易用的对外接口,另外也需要完整的监控,运维工具,并能够与其他系统集成
易管理

分布式存储系统的挑战主要在于数据,状态信息的持久化,要求在自动迁移,自动容错,并发读写的过程中保证数据的一致性。
分布式存储系统涉及的技术主要在两个领域: 分布式系统以及数据库

三、ceph简介优势及架构

简介:
  ceph是一个统一的分布式存储系统,涉及初衷是提供较好的性能,可靠性和可扩展性

优势:
  高扩展性: 使用普通x86服务器,支持10~1000台服务器,支持tb到eb级别的扩展
  高可靠性: 没有单点故障,多数据副本,自动管理,自动修复
  高性能:   数据分布均衡
  可用于对象存储,块设备存储和文件系统存储
基础存储系统
rados:基础存储系统rados(reliable autonomic,distributed object store,即可靠的,自动化的,分布式的对象存储)。所有存储在
       ceph系统中的用户数据事实上最终都是由这一层来存储的。ceph的高可靠,高扩展性,高性能,高自动化等等特性本质上都是由这一层完成的

基础库libeados
librados:这一层的功能是对rados进行抽象和封装,并向上层提供api,以便于基于基础dados(而不是整个ceph)进行应用开发。特别注意的是是
          raocs是一个对象存储,因此,librados实现的api也是针对对象存储功能的。
  
高层应用接口
radosgw:对象网关接口(对象存储)
rdb:    块存储
cephfs: 文件系统存储
其作用是在librados库的基础上提供抽象层次更高,更便于应用或客户端使用的上层接口。

四、ceph的基本组件

如上图,ceph主要有三个基本进程
osd
  用于集群中所有数据及对象的存储。处理数据的复制,恢复,回填,在均衡。并向其他osd守护进程发送心跳,然后想mon发送一些信息。
  当ceph存储集群设定有两个副本时(一共存两份),则至少需要两个osd守护集成即两个osd节点,集群才能达到actice+clean状态
mds(可选)
  为ceph文件系统提供元数据计算,缓存与同步(也就是说ceph块设备和ceph对象存储不需要mds)。在ceph中,元数据也是存储在osd节点中的。
  mds类似于元数据的代理服务器。mds进程并不是必须的,只有需要使用cephfs时候,才需要配置mds节点。
monitor
  监控整个集群的状态,维护集群的cluster map二进制表,保证集群数据的一致性。clustermap描述了对象块存储的物理位置,以及一个将设备
  聚合到物理位置的桶列表
manager(ceph-mgr)
  用于收集ceph集群状态,运行指标,比如存储利用率,当前性能指标,和系统负载。对外提供ceph dashboard(ceph ui)和restful api。
  manage开启高可用时,至少2个

ceph结构包含两部分

ceph client: 访问ceph底层服务或组件,对外提供各种接口。对象存储接口,块存储接口,文件级存储接口
ceph node:   ceph底层服务提供端,也就是ceph存储集群

五、ceph的工作原理

无论使用哪种存储方式(对象,块,文件),存储的数据都会被切割成对象(object),object size大小可以有管理员进行调整,通常为2m或4m。每个对象存储都会有一个唯一的oid,由ino和ono生产,ino即是文件的file id,用于在全局唯一标识的一个文件,而ono则是分片的编号。如一个文件file id 为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接地那即为主节点,其余均为从节点。

ceph名词介绍

ceph核心组件及概念介绍

  • monitor监控整个集群的状态,维护集群的clustermap二进制表,保证集群数据的一致性
  • osdosd全称 object storage device,也就是负责响应客户端请求返回数据的进程。一个ceph集群一般都有很多个osd节点
  • mdsmds全称ceph metadata server,是cephfs服务依赖的元数据服务
  • objectceph最底层的存储单元是obect对象,每个object包含了元数据和原始数据
  • pgpg全称 placement grouops,是一个逻辑的概念,一个pg包含多个osd。引入pg这一层其实是为了更好地分配数据和定位数据
  • radosrados全称reliable autonomic distributed object store,是ceph集群的精华,用户实现数据分配、failover等集群操作
  • libraydioslibrados是rados的提供库,因为rados是协议很难直接访问,因此在上层的rbd,rgw,cephfs都是通过librados访问的。
  • crushcrush是ceph使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方
  • rdbrdb全称rados block device,是ceph对外提供的块设备服务。
  • rgwrgw全称rados gateway,是ceph对外提供的对象存储服务,接口与s3和swift兼容
  • cephfscephfs全称ceph file system,是ceph对外提供的文件系统服务