分布式存储-ceph原理

一、ceph核心组件:

  Ceph提供了RADOS、OSD、MON、Librados、RBD、RGW和Ceph FS等功能组件,但其底层仍然使用RADOS存储来支撑上层的那些组件;
  核心组件:Ceph OSD,Ceph Monitor,Ceph MDS。
  Ceph OSD:全称是Object Storage Device,主要功能包括存储数据,处理数据的复制、恢复、回补、平衡数据分布,并将一些相关数据提供给Ceph Monitor;
  Ceph Monitor:Ceph的监控器,主要功能是维护整个集群健康状态,提供一致性的决策,包含了Monitor map、OSD map、PG(Placement Group)map和CRUSH map;
  Ceph MDS:全称是Ceph Metadata Server,主要保存的是Ceph文件系统(File System)的元数据(metadata);
   Managers: Ceph Manager守护进程(ceph-mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的Ceph Manager Dashboard和 REST API。高可用性通常至少需要两个管理器。
  提示:Ceph的块存储和Ceph的对象存储都不需要Ceph MDS。Ceph MDS为基于POSIX文件系统的用户提供了一些基础命令,例如ls、find等命令。
  提供对象存储RADOSGW(Reliable 可靠的、Autonomic、Distributed 分布式、Object Storage Gateway)、块存储RBD(Rados Block Device)、文件系统存储Ceph FS(Ceph File System)

分布式存储-ceph原理_第1张图片
  LIBRADOS模块是客户端用来访问RADOS对象存储设备的
   RADOSGW功能特性基于LIBRADOS之上,提供当前流行的RESTful协议的网关,并且兼容,S3和Swift接口,作为对象存储,可以对接网盘类应用以及HLS流媒体应用等
  RBD(Rados Block Device)功能特性也是基于LIBRADOS之上,通过LIBRBD创建一个块设备,通过QEMU/KVM附加到VM上,作为传统的块设备来用。目前OpenStack、CloudStack等,都是采用这种方式来为VM提供块设备,同时也支持快照、COW(Copy On Write)等功能
  Ceph FS(Ceph File System)功能特性是基于RADOS来实现分布式的文件系统,引入了MDS(Metadata Server),主要为兼容POSIX文件系统提供元数据。一般都是当做文件系统来挂载。

二、RADOS架构

基于RADOS,使用Ceph作为存储架构;RADOS系统主要由两个部分组成,对于RADOS系统,节点组织管理和数据分发策略均由内部的Mon全权负责;

1)OSD:由数目可变的大规模OSD(Object Storage Devices)组成的集群,负责存储所有的Objects数据。
2)Monitor:由少量Monitors组成的强耦合、小规模集群,负责管理Cluster Map。其中,Cluster Map是整个RADOS系统的关键数据结构,管理集群中的所有成员关系和属性等信息以及数据的分发。

(1)Monitor

 Ceph Monitor是负责监视整个群集的运行状况的,这些信息都是由维护集群成员的守护程序来提供的,如各个节点之间的状态、集群配置信息。Ceph monitor map包括OSD Map、PG Map、MDS Map和CRUSH等,这些Map被统称为集群Map;

1)Monitor Map。Monitor Map包括有关monitor节点端到端的信息,其中包括Ceph集群ID,监控主机名和IP地址和端口号,它还存储了当前版本信息以及最新更改信息

#ceph mon dump

2)OSD Map。OSD Map包括一些常用的信息,如集群ID,创建OSD Map的版本信息和最后修改信息,以及pool相关信息,pool的名字、pool的ID、类型,副本数目以及PGP,还包括OSD信息,如数量、状态、权重、最新的清洁间隔和OSD主机信息。

#ceph osd dump

3)PG Map。PG Map包括当前PG版本、时间戳、最新的OSD Map的版本信息、空间使用比例,以及接近占满比例信息,同时,也包括每个PG ID、对象数目、状态、OSD的状态以及深度清理的详细信息

#ceph pg dump

4)CRUSH Map。CRUSH Map包括集群存储设备信息,故障域层次结构和存储数据时定义失败域规则信息;

#ceph osd crush dump 

5)MDS Map。MDS Map包括存储当前MDS Map的版本信息、创建当前Map的信息、修改时间、数据和元数据POOL ID、集群MDS数目和MDS状态;

#ceph mds dump

Ceph Monitor的主要作用是维护集群映射的主副本。Ceph Monitors还提供身份验证和日志记录服务。Ceph监视器将监视器服务中的所有更改写入单个Paxos实例,Paxos将更改写入键/值存储以实现强一致性。Ceph监视器可以在同步操作期间查询最新版本的集群映射。Ceph Monitors利用键/值存储的快照和迭代器(使用leveldb)来执行存储范围的同步

分布式存储-ceph原理_第2张图片
集群运行图是多个图的组合,包括监视器图、 OSD 图、归置组图和元数据服务器图。集群运行图追踪几个重要事件:哪些进程在集群里( in );哪些进程在集群里( in )是 up 且在运行、或 down ;归置组状态是 active 或 inactive 、 clean 或其他状态;和其他反映当前集群状态的信息,像总存储容量、和使用量。

Ceph在集群中与另一个Ceph Monitor时对Ceph监视器要严格的一致性要求,然而,Ceph客户端和其他Ceph守护进程使用Ceph配置文件来发现监视器,监视器使用监视器映射(monmap)发现彼此,而不是Ceph配置文件。
当Ceph存储集群中发现其他Ceph监视器时,Ceph监视器总是引用monmap的本地副本。使用 monmap而不是Ceph配置文件可以避免可能破坏集群的错误(例如,在ceph.conf指定监视器地址或端口时出现拼写错误)。由于监视器使用monmaps进行发现,并且它们与客户端和其他Ceph守护进程共享monmaps,因此monmap为监视器提供了一致的保证,即他们的共识是有效的。
严格的一致性也适用于monmap的更新。与Ceph Monitor上的任何其他更新一样,对monmap的更改始终通过名为Paxos的分布式一致性算法运行。Ceph监视器必须就monmap的每次更新达成一致,例如添加或删除Ceph监视器,以确保仲裁中的每个监视器都具有相同版本的monmap。monmap的更新是增量的,因此Ceph Monitors具有最新的商定版本和一组先前版本。维护历史记录使得具有旧版monmap的Ceph Monitor能够赶上Ceph存储集群的当前状态。

Monitor同步

当你集群中使用多个Monitor时,各监视器都要检查邻居是否有集群运行图的最新版本的群集映射,(例如,相邻监视器中的一个映射,其中一个或多个纪元数字高于最大值即时监视器地图中的当前时期)。群集中的一个监视器可能会定期从其他监视器后面移动到必须离开仲裁的位置,同步以检索有关群集的最新信息,然后重新加入仲裁。出于同步的目的,监视器可以采用以下三种角色之一;
(1)Leader 领导者:领导者是第一台实现最新Paxos版本群集地图的监视器。
(2)Provider 提供者:提供者是具有最新版本群集映射的监视器,但不是第一个获得最新版本的监视器。
(3)Requester 请求者:一个请求者是下降落后领先者,并且必须以检索有关集群的最新信息,然后才能重新加入仲裁同步监控。
这些角色使领导者能够将同步职责委派给提供者,从而防止同步请求超载领导者改进性能。在下图中,请求者已经了解到它已落后于其他监视器。请求者要求领导者进行同步,领导者告诉请求者与提供者同步。
分布式存储-ceph原理_第3张图片

(2)OSD

Ceph OSD是Ceph存储集群最重要的组件,Ceph OSD将数据以对象的形式存储到集群中每个节点的物理磁盘上,完成存储用户数据的工作绝大多数都是由OSD deamon进程来实现的。
Ceph集群一般情况都包含多个OSD,对于任何读写操作请求,Client端从Ceph Monitor获取Cluster Map之后,Client将直接与OSD进行I/O操作的交互,而不再需要Ceph Monitor干预。这使得数据读写过程更为迅速。
Ceph的核心功能特性包括高可靠、自动平衡、自动恢复和一致性,
对于Ceph OSD而言,基
于配置的副本数,Ceph提供通过分布在多节点上的副本来实现,使得Ceph具有高可用性以及容错性。在OSD中的每个对象都有一个主副本,若干个从副本,这些副本默认情况下是分布在不同节点上的,这就是Ceph作为分布式存储系统的集中体现。每个OSD都可能作为某些对象的主OSD,与此同时,它也可能作为某些对象的从OSD,从OSD受到主OSD的控制,然而,从OSD在某些情况也可能成为主OSD。在磁盘故障时,Ceph OSD Deamon的智能对等机制将协同其他OSD执行恢复操作。在此期间,存储对象副本的从OSD将被提升为主OSD,与此同时,新的从副本将重新生成,这样就保证了Ceph的可靠和一致。

三、CRUSH

   对象存储中一致性Hash和Ceph的CRUSH算法是使用比较多的数据分布算法。在Aamzon的Dyanmo键值存储系统中采用一致性Hash算法,并且对它做了很多优化。OpenStack的Swift对象存储系统也使用了一致性Hash算法。
   CRUSH(Controlled Replication Under Scalable Hashing)是一种基于伪随机控制数据分布、复制的算法。Ceph是为大规模分布式存储系统(PB级的数据和成百上千台存储设备)而设计的,在大规模的存储系统里,必须考虑数据的平衡分布和负载(提高资源利用率)、最大化系统的性能,以及系统的扩展和硬件容错等。
   Ceph条带化之后,将获得N个带有唯一oid(即object的id)。Object id是进行线性映射生成的,即由file的元数据、Ceph条带化产生的Object的序号连缀而成。此时Object需要映射到PG中,该映射包括两部分。
   1)由Ceph集群指定的静态Hash函数计算Object的oid,获取到其Hash值。
   2)将该Hash值与mask进行与操作,从而获得PG ID
由PG映射到数据存储的实际单元OSD中,该映射是由CRUSH算法来确定的,将PG ID作为该算法的输入,获得到包含N个OSD的集合,集合中第一个OSD被作为主OSD,其他的OSD则依次作为从OSD。N为该PG所在POOL下的副本数目,在生产环境中N一般为3;OSD集合中的OSD将共同存储和维护该PG下的Object。需要注意的是,CRUSH算法的结果不是绝对不变的,而是受到其他因素的影响。其影响因素主要有以下两个。
一是当前系统状态 。也就是上文逻辑结构中曾经提及的Cluster Map(集群映射)。当系统中的OSD状态、数量发生变化时,Cluster Map可能发生变化,而这种变化将会影响到PG与OSD之间的映射。
二是存储策略配置 。这里的策略主要与安全相关。利用策略配置,系统管理员可以指定承载同一个PG的3个OSD分别位于数据中心的不同服务器乃至机架上,从而进一步改善存储的可靠性。

四、ceph数据的存储过程

  分布式存储-ceph原理_第4张图片

Ceph FS文件系统
Ceph FS需要使用Metadata Server(简称MDS)来管理文件系统的命名空间以及客户端如何访问到后端OSD数据存储中。MDS类似于ceph-mon,是一个服务进程,在使用Ceph FS前首先要安装和启动ceph-mds服务;MDS(Metadata Server)以一个Daemon进程运行一个服务,即元数据服务器,主要负责Ceph FS集群中文件和目录的管理,Ceph文件系统主要依赖MDS守护进程提供服务。

ceph网站:
https://ceph.com/
http://docs.ceph.com/docs/master/
http://docs.ceph.org.cn

你可能感兴趣的:(存储)