博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ceph ------云硬盘

Posted on 2015-08-19 17:12  bw_0927  阅读(717)  评论(0)    收藏  举报

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

 

云硬盘是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,不需要元数据服务器。

 

ceph-architecture

 

 

 

3. 架构

3.1 组件

ceph-topo

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。

 

 

3.2 映射

 

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

Distributed-Object-Store

数据映射(Data Placement)的方式决定了存储系统的性能和扩展性。

 

3.3 强一致性

  • Ceph的读写操作采用Primary-Replica模型,Client只向Object所对应OSD set的Primary发起读写请求,这保证了数据的强一致性。
  • 由于每个Object都只有一个Primary OSD,因此对Object的更新都是顺序的,不存在同步问题。
  • 当Primary收到Object的写请求时,它负责把数据发送给其他Replicas,只有这个数据被保存在所有的OSD上时,Primary才应答Object的写请求,这保证了副本的一致性。
    • client不需要负责副本的复制(由primary负责),这降低了client的网络消耗。

3.4 容错性

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

  • Monitors是Ceph管家,维护着Ceph的全局状态。Monitors的功能和zookeeper类似,它们使用Quorum和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。

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