存储的基本发展

企业中使用存储的按照其功能,使用场景,大体可以分为4个阶段:

  • DAS 直连存储
  • NAS 网络附加存储
  • SAN 存储区域网络
  • Object Storage 对象存储

以下是存储基本概念汇总

ceph学习笔记-基本概念_数据

在企业中不同的场景使用的存储,使用表现形式为三种,磁盘-块存储,挂载目录-文件共享存储,通过API向存储系统中上传PUT和下载GET文件-对象存储

Ceph分布式存储

Ceph定义

Ceph能够提供企业中三种常见的存储需求,块存储,文件存储和对象存储,提供分布式的、横向扩展的,高度可靠性的存储系统,以下是Ceph存储提供的三大存储接口。

ceph学习笔记-基本概念_数据_02

  • 1、CEPH OBJECT STORE对象存储,包含功能,特性有:

(1)RESTful Interface  RESTful风格接口

(2)S3- and Swift-compliant APIs  提供兼容于S3和Swfit风格API

(3)S3-style subdomains  S3风格的目录风格

(4)Unified S3/Swift namespace  统一扁平的S3/Swift命名空间,即所有的对象存放在同一个平面上

(5)User management  提供用户管理认证接入

(6)Usage tracking  使用情况追踪

(7)Striped objects  对象切割,将一个大文件切割为多个小文件(objects)

(8)Cloud solution integration  云计算解决方案即成,可以与Swfit对象存储即成

(9)Multi-site deployment  多站点部署,保障可靠性

(10)Multi-site replication  多站点复制,提供容灾方案</p>

  • 2、CEPH BLOCK DEVICE块存储,包含功能,特性有:

(1)Thin-provisioned  瘦分配,即先分配特定存储大小,随着使用实际使用空间的增长而占用存储空间,避免空间占用

(2) Images up to 16 exabytes  单个景象最大能支持16EB

(3)Configurable striping  可配置的切片,默认是4M

(4) In-memory caching  内存缓存

(5)Snapshots   支持快照,将当时某个状态记录下载

(6)Copy-on-write cloning  Copy-on-write克隆复制功能,即制作某个镜像实现快速克隆,子镜像依赖于母镜像

(7)Kernel driver support  内核驱动支持,即rbd内核模块

(8)KVM/libvirt support  支持KVM/libvirt,实现与云平台如openstack,cloudstack集成的基础

(9)Back-end for cloud solutions  云计算多后端解决方案,即为openstack,kubernetes提供后端存储

(10)Incremental backup   增量备份

(11)Disaster recovery (multisite asynchronous replication)  灾难恢复,通过多站点异步复制,实现数据镜像拷贝</p>

  • 3、CEPH FILE SYSTEM文件存储

(1)POSIX-compliant semantics  POSIX风格接口

(2)Separates metadata from data  元数据metadata和数据data分开存储

(3)Dynamic rebalancing  动态数据均衡

(4)Subdirectory snapshots  子目录快照

(5)Configurable striping  可配置切割大小

(6)Kernel driver support  内核驱动支持,即CephFS

(7)FUSE support  支持FUSE风格

(8)NFS/CIFS deployable  支持NFS/CIFS形式部署

(9)Use with Hadoop (replace HDFS)  可支持与Hadoop继承,替换HDFS存储

简单点而言,Ceph提供了三种存储接口:块存储RBD,对象存储RGW和文件存储CephFS,每种存储都有其相应的功能和特性。

Ceph存储体系架构

Ceph分布式集群是建立在RADOS算法之上,RADOS是一个高可扩展性,高可靠的存储服务算法,是Ceph实现的基础。Ceph有两个重要的组件组成:

  • Monitors
  • OSDs

其中Monitor作为集群中的大脑,拥有整个集群的状态信息,各个组件如OSDs将自己的状态信息报告给monitor,monitor负责协调整个集群,讲集群的状态同步给客户端,客户端根据monitor发送的集群状态信息可以获取到集群的状态,当集群状态有变化如osd增加或者故障的时候,monitor会负责更新集群的状态并下发给客户端。为了保障集群的可用性,需要部署高可用,一般需要部署2n+1个节点,如3个或者5个。

monitor中保存的集群状态根据其功能角色不同,分为以下几个map状态表:

  • Monitor Maps,集群monitor的节点状态,通过ceph mon dump可以获取;
  • OSD maps,集群数据存储节点的状态表,记录集群中OSD状态的变化,通过ceph osd dump获取
  • PGs Maps,Crush包含资源池pool在存储中映射的路径方式,即数据是如何分布的;
  • Crush Maps,Crush 包含资源池pool在存储中映射路径的方式,即数据是如何分布的;
  • MDS Maps,CephFS 依赖的MDS管理组件,通过ceph mds dump获取,用于追踪MDS状态

OSD ,Object Stroage Daemon,负责集群中真正数据存储的功能,数据最终都会写入到osd中。除了Montior之外,根据Ceph提供的不同功能,还有其他组件:

  • Ceph Monitor(ceph-mon)
  • Ceph OSDs(ceph-osd)
  • Ceph MDS(ceph-mds),用于提供CephFS文件存储,提供文件存储所需的元数据管理
  • Ceph RGW ,用于提供Ceph对象存储网关,提供存储网关接入
  • Ceph Manager ,提供集群状态监控和性能监控

Ceph数据写入过程

Ceph中一切都是对象,不管事RBD块存储接口,RGW对象存储接口还是文件存储CephFS接口,其存储如Ceph中的数据均可以看作是一个对象,一个文件需要切割多个对象(object),然后 将object存储到OSD中

ceph学习笔记-基本概念_对象存储_03

通过CRUSH算法来计算object在集群中OSD的位置信息,同时保障object的副本能够落到合适的OSD节点上,如果一个文件发生变动或者OSD出现了异常,以一个100G文件为例,每个object默认为4M,将会切割为25600个object,如果ceph集群需要正对每个object都进行调度的话,在一个大规模集群中, crush的调度将会变得异常繁重。

因此ceph引入了一个PG概念,PG(place Group),即放置组,可以简单理解为一个装载object的容器,object将映射到PG中,PG最终会调度某个具体的OSD上,因此CRUST由object将映射到PG中,PG最终会调度到某个具体的OSD上,因此CRUSH由object调度转为PG调度,而PG的数量是相对固定的,因此集群分布式调度相对没有那么繁重,同时当某个osd异常的时候,CRUSH调度算法只需要将其上的PG调度到OSD上,而不是将其上的object进行调度,ceph的整个数据调度写入流程如下:

ceph学习笔记-基本概念_文件存储_04


1、一个文件将会切割为多个object( 如1G文件每个object为4M,将切割为256个),每个object会由一个由innode(ino)和object编号(ono)组成的oid,即object id,oid是整个集群唯一,唯一标识object对象;

2、针对object id做hash并做取模运算,从而获取到pgid,即place group id,通过hash+mask获取到PGs ID,PG是存储object的容器。

3、Ceph通过CRUSH算法,将pgid进行运算,找到当前集群最合适存储pg的osd节点,如osd1和osd2

4、PG最终数据写入到OSD节点,完成数据的写入过程,涉及到多副本,一份数据写多副本。