跳转至

00-ceph理论知识

使用Ceph作为OpenStack的后端存储

https://my.oschina.net/JerryBaby/blog/376858

分布式存储系统视频课程

http://edu.51cto.com/course/course_id-7444.html

Ceph架构剖析

https://www.ustack.com/blog/ceph_infra/

不错的ceph博客

http://www.cnblogs.com/sammyliu/category/738054.html

Ceph基础理论知识

ceph简单介绍

云硬盘是IaaS云平台的重要组成部分,云硬盘给虚拟机提供了持久的块存储设备。目前的AWS 的EBS(Elastic Block store)给Amazon的EC2实例提供了高可用高可靠的块级存储卷,EBS适合于一些需要访问块设备的应用,比如数据库、文件系统等。 在OpenStack中,可以使用Ceph、Sheepdog、GlusterFS作为云硬盘的开源解决方案,下面我们来了解Ceph的架构。

Ceph是统一存储系统,支持三种接口。

Object:有原生的API,而且也兼容Swift和S3的API
Block:支持精简配置、快照、克隆
File:Posix接口,支持快照

Ceph也是分布式存储系统,它的特点是:

高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到PB级的扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
高性能:数据分布均衡,并行化度高。对于objects storage和block storage,不需要元数据服务器。

image-20211030134532712

ceph诞生

(1)加州大学Santa Cruz分校的Sage Weil(DreamHost的联合创始人)在2003年专为博士论文设计的新一代自由软件分布式文件系统
(2)2003至2007年期间,Lawrence Livemore National Laboratory(劳伦斯利弗莫尔国家实验室)赞助ceph初步研究工作
(3)2006年,LGPL将其研究平台开源
(4)2007年,ceph逐渐成熟,等待被孵化
(5)2007年至2011年期间,Dreamhost(当时位于洛杉矶做虚拟主机和域名注册的公司)培养ceph,ceph具备雏形,似的现有组件更稳定,新功能的实现,以及对未来的规划
(6)2010年3月之后的linux内核中,嵌入了ceph
(7)2012年4月,Sage Weil成立Inktank公司,该公司有DreamHost投资,Lnktank是以ceph为北京的最主要的公司它的目标是提供专业知识,;流程,工具以及支持他们的企业级客户,使他们能够有限地使用和管理分部署存储系统
(8)2014年4月30日,RedHat以$175million价格收购了lnktank

ceph使用背景

目前Inktank公司掌控Ceph的开发,但Ceph是开源的,遵循LGPL协议。Inktank还积极整合Ceph和其他云计算和大数据平台,目前Ceph支持OpenStack、CloudStack、OpenNebula、Hadoop等。

当前Ceph的最新稳定版本0.67(Dumpling),它的objects storage和block storage已经足够稳定,而且Ceph社区还在继续开发新功能,包括跨机房部署和容灾、支持Erasure encoding等。Ceph具有完善的社区设施和发布流程1

目前Ceph有很多用户案列,这是2013.03月Inktank公司在邮件列表中做的调查,共收到了81份有效反馈[2]。从调查中可以看到有26%的用户在生产环境中使用Ceph,有37%的用户在私有云中使用Ceph,还有有16%的用户在公有云中使用Ceph。

image-20211030134613809

image-20211030134616831

image-20211030134621077

目前Ceph最大的用户案例是Dreamhost的Object Service,目前总容量是3PB,可靠性达到99.99999%,数据存放采用三副本,它的价格比S3还便宜。下图中,左边是Inktank的合作伙伴,右边是Inktank的用户。

image-20211030134633396

ceph角色概况

不管你是想为云平台提供Ceph 对象存储和/或 Ceph 块设备,还是想部署一个 Ceph 文件系统或者把 Ceph 作为他用,所有 Ceph 存储集群的部署都始于部署一个个 Ceph 节点、网络和 Ceph 存储集群。 Ceph 存储集群至少需要一个 Ceph Monitor 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )。

image-20211030134648780

****Ceph OSDs: Ceph OSD 守护进程( Ceph OSD )****的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD 守护进程的心跳来向 Ceph Monitors 提供一些监控信息。当 Ceph 存储集群设定为有2个副本时,至少需要2个 OSD 守护进程,集群才能达到 active+clean 状态( Ceph 默认有3个副本,但你可以调整副本数)。

****Monitors: Ceph Monitor****维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息(称为 epoch )。

****MDSs: Ceph 元数据服务器( MDS )****为 Ceph 文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。元数据服务器使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

Ceph 把客户端数据保存为存储池内的对象。通过使用 CRUSH 算法, Ceph 可以计算出哪个归置组(PG)应该持有指定的对象(Object),然后进一步计算出哪个 OSD 守护进程持有该归置组。 CRUSH 算法使得 Ceph 存储集群能够动态地伸缩、再均衡和修复。

1.Ceph是提供了软件定义的,统一存储解决方案的开源项目,

2.ceph是一个分布式,可扩展,高性能,不存在单点故障存储系统

image-20211030134659174

Ceph的底层是RADOS,它的意思是“A reliable, autonomous, distributed object storage”。 RADOS由两个组件组成:
OSD: Object Storage Device,提供存储资源。
Monitor:维护整个Ceph集群的全局状态。
RADOS具有很强的扩展性和可编程性,Ceph基于RADOS开发了
Object Storage、Block Storage、FileSystem。Ceph另外两个组件是:
MDS:用于保存CephFS的元数据。
RADOS Gateway:对外提供REST接口,兼容S3和Swift的API。

ceph架构哲学

ceph架构哲学如下:

1.每个组件必须是可扩展的
2.不存在单点故障
3.解决方案必须是基于软件的,开源的,适应力强的
4.可以运行在常规硬件上的
5.任何可能的一切都必须自我管理

ceph存在的意义何在:帮助企业摆脱昂贵的专属硬件

Ceph目标:

1.轻松扩展到PB级别
2.不同负荷下的高性能(IOPS)
3.高可靠

ceph发行版

image-20211030134756561

ceph应用场景

1.ceph作为云存储解决方案
2.ceph作为软件定义的解决方案
3.ceph做为统一的存储解决方案

Ceph与传统存储的对比

image-20211030134820098

Ceph存储架构以及组件

ceph映射

Ceph的命名空间是 (Pool, Object),每个Object都会映射到一组OSD中(由这组OSD保存这个Object):

(Pool, Object) → (Pool, PG) → OSD set → Disk

Ceph中Pools的属性有:

Object的副本数
Placement Groups的数量
所使用的CRUSH Ruleset

在Ceph中,Object先映射到PG(Placement Group),再由PG映射到OSD set。每个Pool有多个PG,每个Object通过计算hash值并取模得到它所对应的PG。PG再映射到一组OSD(OSD的个数由Pool 的副本数决定),第一个OSD是Primary,剩下的都是Replicas。

数据映射(Data Placement)的方式决定了存储系统的性能和扩展性。(Pool, PG) → OSD set 的映射由四个因素决定:

CRUSH算法:一种伪随机算法。
OSD MAP:包含当前所有Pool的状态和所有OSD的状态。
CRUSH MAP:包含当前磁盘、服务器、机架的层级结构。
CRUSH Rules:数据映射的策略。这些策略可以灵活的设置object存放的区域。比如可以指定 pool1中所有objecst放置在机架1上,所有objects的第1个副本放置在机架1上的服务器A上,第2个副本分布在机架1上的服务器B上。 pool2中所有的object分布在机架2、3、4上,所有Object的第1个副本分布在机架2的服务器上,第2个副本分布在机架3的服 器上,第3个副本分布在机架4的服务器上。

image-20211030134907936

Client从Monitors中得到CRUSH MAP、OSD MAP、CRUSH Ruleset,然后使用CRUSH算法计算出Object所在的OSD set。所以Ceph不需要Name服务器,Client直接和OSD进行通信。伪代码如下所示:

  locator = object_name
  obj_hash = hash(locator)
  pg = obj_hash % num_pg
  osds_for_pg = crush(pg)  # returns a list of osds
  primary = osds_for_pg[0]
  replicas = osds_for_pg[1:]

这种数据映射的优点是:

1.把Object分成组,这降低了需要追踪和处理metadata的数量(在全局的层面上,我们不需要追踪和处理每个object的metadata和placement,只需要管理PG的metadata就可以了。PG的数量级远远低于object的数量级)。
2.增加PG的数量可以均衡每个OSD的负载,提高并行度。
3.分隔故障域,提高数据的可靠性。

ceph强一致性

1.Ceph的读写操作采用Primary-Replica模型,Client只向Object所对应OSD set的Primary发起读写请求,这保证了数据的强一致性。

2.由于每个Object都只有一个Primary OSD,因此对Object的更新都是顺序的,不存在同步问题。

3.当Primary收到Object的写请求时,它负责把数据发送给其他Replicas,只要这个数据被保存在所有的OSD上时,Primary才应答Object的写请求,这保证了副本的一致性。

image-20211030134945463

ceph容错性

在分布式系统中,常见的故障有网络中断、掉电、服务器宕机、硬盘故障等,Ceph能够容忍这些故障,并进行自动修复,保证数据的可靠性和系统可用性。

1.Monitors是Ceph管家,维护着Ceph的全局状态。Monitors的功能和zookeeper类似,它们使用Quorum和Paxos算法去建立全局状态的共识。
2.OSDs可以进行自动修复,而且是并行修复

*故障检测:*

OSD之间有心跳检测,当OSD A检测到OSD B没有回应时,会报告给Monitors说OSD B无法连接,则Monitors给OSD B标记为down状态,并更新OSD Map。当过了M秒之后还是无法连接到OSD B,则Monitors给OSD B标记为out状态(表明OSD B不能工作),并更新OSD Map。

备注:可以在Ceph中配置M的值。

*故障恢复:*

1.当某个PG对应的OSD set中有一个OSD被标记为down时(假如是Primary被标记为down,则某个Replica会成为新的Primary,并处理所有读写 object请求),则该PG处于active+degraded状态,也就是当前PG有效的副本数是N-1。

2.过了M秒之后,假如还是无法连接该OSD,则它被标记为out,Ceph会重新计算PG到OSD set的映射(当有新的OSD加入到集群时,也会重新计算所有PG到OSD set的映射),以此保证PG的有效副本数是N。

3.新OSD set的Primary先从旧的OSD set中收集PG log,得到一份Authoritative History(完整的、全序的操作序列),并让其他Replicas同意这份Authoritative History(也就是其他Replicas对PG的所有objects的状态达成一致),这个过程叫做Peering。

4.当Peering过程完成之后,PG进 入active+recoverying状态,Primary会迁移和同步那些降级的objects到所有的replicas上,保证这些objects 的副本数为N。

ceph优点

高性能

image-20211030135711775

1.Client和Server直接通信,不需要代理和转发

2.多个OSD带来的高并发度。objects是分布在所有OSD上。

3.负载均衡。每个OSD都有权重值(现在以容量为权重)。

4.client不需要负责副本的复制(由primary负责),这降低了client的网络消耗。

高可靠性

image-20211030135728897

image-20211030135734486

1.数据多副本。可配置的per-pool副本策略和故障域布局,支持强一致性。

2.没有单点故障。可以忍受许多种故障场景;防止脑裂;单个组件可以滚动升级并在线替换。

3.所有故障的检测和自动恢复。恢复不需要人工介入,在恢复期间,可以保持正常的数据访问。

4.并行恢复。并行的恢复机制极大的降低了数据恢复时间,提高数据的可靠性。

高扩展性

image-20211030135826971

1.高度并行。没有单个中心控制组件。所有负载都能动态的划分到各个服务器上。把更多的功能放到OSD上,让OSD更智能。

2.自管理。容易扩展、升级、替换。当组件发生故障时,自动进行数据的重新复制。当组件发生变化时(添加/删除),自动进行数据的重分布。

Ceph存储架构

image-20211030141010346

组成:由两类deamon组成:

ceph Monitor
Ceph OSD Daemon

image-20211030141027328

image-20211030141033120

image-20211030141037858