分布式存储01_ceph架构

Posted 分布式存储技术

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式存储01_ceph架构相关的知识,希望对你有一定的参考价值。

1.ceph简介

Ceph 独一无二地用统一的系统提供了对象、块、和文件存储功能,它可靠性高、管理简便、并且是自由软件。Ceph 的强大足以改变贵公司的 IT 基础架构、和管理海量数据的能力。Ceph 可提供极大的伸缩性——供成千用户访问 PB 乃至 EB 级的数据。 Ceph 节点以普通硬件和智能守护进程作为支撑点, Ceph 存储集群组织起了大量节点,它们之间靠相互通讯来复制数据、并动态地重分布数据。


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

     · Object:有原生的API,而且也兼容Swift和S3的API

     · Block:支持快照、克隆

     · File:Posix接口,支持快照

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

    · 高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到PB级的扩展。

    · 高可靠性:没有单点故障,多数据副本,自动管理,自动修复。

    · 高性能:数据分布均衡,并行化度高。对于objects storage和block storage,不需要元数据服务器。

2.架构组件



分布式存储01_ceph架构


Ceph的底层是RADOS,它的意思是“A reliable, autonomous, distributed object storage”。RADOS由两个组件组成:

   · OSD:Object Storage Device,提供存储资源。

   · Monitor:维护整个Ceph集群的全局状态。

Ceph基于RADOS开发了Object Storage、Block Storage、FileSystem。Ceph另外两个组件是:

   · MDS:用于保存CephFS的元数据。

   · RADOS Gateway:对外提供REST接口,兼容S3和Swift的API。


3.映射


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中所有objects放置在机架1上,所有objects的第1个副本放置在机架1上的服务器A上,第2个副本分布在机架1上的服务器B上。pool2中所有的object分布在机架2、3、4上,所有Object的第1个副本分布在机架2的服务器上,第2个副本分布在机架3的服器上,第3个副本分布在机架4的服务器上。


分布式存储01_ceph架构

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


这种数据映射的优点是:

   · 把Object分成组,这降低了需要维护的metadata的数量(在全局的层面上,我们不需要追踪和处理每个object的metadata,只需要管理PG的metadata就可以了。PG的数量级远远低于object的数量级)。

   · 增加PG的数量可以均衡每个OSD的负载,提高并行度。


3.1 强一致性


  · Ceph的读写操作采用Primary-Replica模型,Client可以通过只向Object所对应OSD set的Primary发起读写请求,来保证数据的强一致性。当然,client读也可配置为向Replica发起,但写一定是向Primary发起。

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

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


分布式存储01_ceph架构

3.2 容错性


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

   · Monitors是Ceph管家,维护着Ceph的全局状态。Monitors的功能和zookeeper类似,它们使用Paxos算法去建立全局状态的共识。

   · 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

故障恢复:

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,保证这些objects 的副本数为N。


3.3 数据迁移

 当有节点加入或退出集群时,OSDMap发生改变。这时,会触发PG的重分配。通过backfilling机制完成数据的迁移。简单举例如下:

 

原始:

PG_A à OSD.0 OSD.1 OSD.2

扩容加入新节点后:

PG_A à OSD.3 OSD.1 OSD.2

此时会生成:

PG_A_TEMP à OSD.1 OSD.2 OSD.3

 

PG_A_TEMP代替PG_A提供在线读写,同时OSD.1会负责同步所有object到OSD.3. 这个过程就是backfilling,当同步完成后。OSD.3会代替OSD.1成为primary节点。PG_A重新提供在线读写。PG_A_TEMP删除。


3.4 状态同步


OSDMap是Ceph集群中所有 OSD 的信息,所有 OSD 节点的改变如进程退出,节点的加入和退出或者节点权重的变化都会反映到这张 Map 上。这张 Map 不仅会被 Monitor 掌握,OSD 节点和 Client 也会从 Monitor 得到这张表。如一个新的 OSD 加入会导致一些 PG 的迁移,那么这些 PG 的 OSD 会得到通知。除此之外,Monitor 也会随机的挑选一些 OSD 发送OSDMap。

Monitor 掌握了整个集群的 OSD 状态和 PG 状态,每个PG都是一部分 Object 的拥有者,维护 Object 的信息是每个 PG 的责任,Monitor 不会掌握 Object Level 的信息。因此每个PG都需要维护 PG 的状态来保证 Object 的一致性。但是每个 PG 的数据和相关故障恢复、迁移所必须的记录都是由每个 PG 自己维护,也就是存在于每个 PG 所在的 OSD 上。上述的peering过程就是PG维护Object一致性的过程,在OSD状态发生变化时触发。



3.5 数据修复


数据修复是以PG为单位进行的。

Scrub: primary node发起,扫描各副本的object meta数据,对比修复。默认每天一次。可配。

Deep scrub: primary node发起,扫描各副本的object的meta和实际数据,bit to bit的对比修复。默认一周进行一次。可配。


4. 产品特点

4.1 高性能


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

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

· 客户端的Strip功能,可以支持并行上传和下载

· 负载均衡。每个OSD都有权重值(可以以容量为权重)。

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


分布式存储01_ceph架构


4.2 高可靠性


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

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

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

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

分布式存储01_ceph架构


4.3 高扩展性


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

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






以上是关于分布式存储01_ceph架构的主要内容,如果未能解决你的问题,请参考以下文章

Ceph分布式存储核心概念以及架构原理

CentOS 7部署 Ceph分布式存储架构

分布式存储 Ceph原理+架构图详解

世界500强是如何解决千亿流量留存问题的,《Ceph分布式存储架构》-使用CentOS 7部署 Ceph分布式存储架构-为他们解决什么问题。

Ceph 分布式存储架构解析与工作原理

CentOS 7 部署 Ceph 分布式存储架构