ceph学习资料

  • 格式:doc
  • 大小:1.29 MB
  • 文档页数:15

Ceph分布式存储1. ceph概念Ceph作为分布式存储,它有如下特点:•高扩展性:普通的x86服务器组成的ceph集群,最多支持1000台以上的服务器扩展,并且可以在线扩展。

•高可靠性:数据容错性高,没有因为单点故障造成的数据丢失;多副本技术,数据安全性更加可靠;自动修复,数据丢失或者部分磁盘故障对全局没影响,不会影响上层的应用,对用户全透明。

•高性能:数据是均匀分布到每个磁盘上的,读写数据都是有多个osd并发完成的,集群性能理论上来说随着集群节点数和osd的增长而线性增长。

2. ceph架构2.1 组件Ceph的底层是RADOS,它的意思是“A reliable, autonomous, distributed object storage”(一个可靠的自治的分布式存储,字面意思哈)。

RADOS系统逻辑架构图:RADOS主要由两个部分组成。

一种是大量的、负责完成数据存储和维护功能的OSD(Object Storage Device),另一种则是若干个负责完成系统状态检测和维护的monitor。

osd和monitor之间相互传输节点状态信息。

而ceph集群主要包括mon、mds、osd组件其中,mon负责维护整个集群的状态以及包括crushmap、pgmap、osdmap等一系列map 信息记录与变更。

Osd负责提供数据存储,数据的恢复均衡。

Mds(元数据服务器)主要是使用文件系统存储的时候需要,它主要负责文件数据的inode 信息,并让客户端通过该inode信息快速找到数据实际所在地。

2.2 数据映射流程在Ceph中,文件都是以object(对象)的方式存放在众多osd上。

一个file(数据)的写入顺序:首先mon根据map信息将file(数据)切分成多个的object;再通过hash算法决定这些个object对象分别会存放在那些pg(放置组)里面;接下来在通过crushmap再决定将pg放在底层的那些osd上,pg与osd的关系属于一对多的关系。

一个osd可以包括多个pg,这些pg分属于不同的file的object对象。

1. File——file就是用户需要存储或者访问的文件。

这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。

2. Ojbect——object是RADOS所看到的“对象”。

object与上面提到的file的区别是,object 的最大size由RADOS限定(通常为2MB或4MB),以便实现底层存储的组织管理。

因此,当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储。

3. PG(Placement Group)——顾名思义,pg的用途是对object的存储进行组织和位置映射。

具体而言,一个pg负责组织若干个object(可以为数千个甚至更多),但一个object 只能被映射到一个pg中,即,pg和object之间是“一对多”映射关系。

同时,一个pg会被映射到多个osd上,而每个osd上都会承载大量的pg,即,pg和osd之间是“多对多”映射关系。

pg计算方法:Total PGs = ((Total_number_of_OSD * 100) / max_replication_count) / pool_count假如一个ceph系统共90个osd,设置三个副本模式,三个pool,那么每个pool分配的pg 数通过上面的公式计算则为1000,然后取2的幂次方最近的一个数值,即1024,每个pool 的分配的pg数则为1024。

4. OSD——即object storage device,通俗来讲就是给object和pg提供存放位置。

5. Failure domain——字面意思大概就是失效域,个人也不是很理解这个具体定义是啥。

2.3 强一致性数据写完副本才返回客户端•Ceph的读写操作采用主副本模式primary-replica,client只向object所对应的osd 主本发起读写请求,保证数据的强一致性。

•每一个object都只有一primary osd,所以object的更新不需要考虑数据同步的问题。

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

2.4 容错机制在分布式系统中,对于常见的一些故障,如网络故障,服务器故障,磁盘故障等,ceph 都可以容忍这些故障,并且可以进行自动修复,保证数据的可靠性和系统的可用性。

故障检测:osd之间有心跳检测,当osd a检测到osd b没有回应时,会报告给monitor说osd b 无法连接,此时monitor就给osd b标记为一个状态(down),并更新osd的map信息,当超过一段时间(此时间是osd的心跳检测值osd_heartbeat_interval)之后还是无法连接到osd b,则monitor给osd b标记一个新的状态(out),表示该osd不能工作,并更新osdmap信息。

故障恢复:1.假如某个pg对应的osd被标记为down的状态,刚好这个osd又是该pg的主本,那么此时该pg的副本就会成为新的主本去响应所有的读写请求,这个时候被标记的pg就会处于active+degraded状态。

2.当超过一段时间之后该osd还是无法连接,那么该osd的状态则会被标记为out,monitor会重新计算pg的映射关系,当有新的osd加入集群的时候monitor会重新计算pg到osd的映射,保证副本数目的正常。

3. RADOS组成自下向上,可以将Ceph系统分为四个层次:3.1 基础存储系统RADOS(Reliable, Autonomic, Distributed Object Store,一个可靠的,自治的,分布式的对象存储)顾名思义,这一层本身就是一个完整的对象存储系统,所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。

而Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。

在物理上,RADOS由大量的存储设备节点组成,每个节点拥有自己的硬件资源(CPU,内存,硬盘,网络),并运行着操作系统和文件系统。

3.2 基础库librad os这一层的功能是对rados进行抽象和封装,并向上层提供API,以便直接基于rados(而不是整个Ceph)进行应用开发。

特别要注意的是,rados是一个对象存储系统,因此,librados 实现的API也只是针对对象存储功能的。

3.3 高层应用接口这一层包括了三个部分:radosgw(RADOS Gateway)、rbd(Reliable Block Device)和Ceph FS(Ceph File System),其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。

3.3.1 对象网关radosgw是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,且对象存储不是实现文件系统的一些操作比如打开,编辑等,因此对象网关是不需要mds元数据服务器来提供元数据的储存和查找的。

在大量的文件并发访问的情况下,文件系统因为要处理大量读写请求的元数据访问和存储,所以会对mds造成很大的压力,而对象网关在这方面的优势就比较明显了。

3.3.2 块接口块接口即RBD(Reliable Block Device),一般使用场景为通过rbd新建一个块设备通过iscsi协议共享给某台主机或者直接使用rbd设备来给数据库提供存储。

使用块接口供上层应用的协议一般为iscsi协议:比如新建一个rbd设备通过iscsi协议共享给windows主机或者linux主机使用;或者直接map到客户端供客户端进行使用。

另外也可以直接使用rbd设备给虚拟机提供磁盘存储空间,对应的一些应用场景为KVM 或者QEMU等。

3.3.3 文件系统接口文件系统接口即Ceph FS(Ceph File System),网络文件系统要想使用是必须进行mount操作的,mount操作后就可以像操作本地文件系统一样进行操作,cephfs提供了两种挂载方式。

➢ceph kernel:ceph kernel是基于内核空间的挂载方式;kernel的挂载方式为:mount -t ceph monip mountpiont比如mount -t ceph 192.168.0.100 /mnt注意:使用kernel挂载方式需要系统带有ceph模块#lsmod|grep ceph➢ceph fuse:fuse是基于用户空间的挂载方式。

Fuse的挂载方式为:ceph-fuse -m monip mountpoint比如ceph-fuse -m 192.168.0.100 /mnt注意:使用fuse挂载方式需要安装ceph fuse的支持包。

#yum install ceph-fuse另外使用文件系统接口供上层用户和应用使用的协议有诸如cifs协议,nfs协议,ftp和http协议等。

两种挂载方式的优缺点:各有利弊,ceph fuse使用和修改上更为方便,但是性能略差于kernel的使用方式。

3.4 应用层这一层就是对应不同场景下的ceph接口的各种应用方式,比如基于文件系统接口的上层应用如cifs和nfs文件共享等;基于rbd接口的上层应用比如数据库存储,kvm/qemu虚拟机等;基于对象网关的上层应用如S3,如openstack swift接口等。

4.ceph重要功能特性原理4.1 基本功能4.1.1 高性能➢Client和server直接通信,不需要代理和转发;➢多个osd带来的高并发度。

objects是分布在所有osd上;➢负载均衡,每个osd都有权重值;➢Client不需要负责副本的复制(由primary负责),降低了client的网络消耗。

4.1.2 高可靠性保证集群高可靠性一共有以下几个特点:➢数据多副本。

通过多副本来维持数据的安全性,当一份数据丢失之后还有其他数据可供读写;➢无单点故障。

意外的节点或者磁盘故障并不影响集群和应用使用;➢自动恢复。

磁盘或者节点出现异常导致宕机或者故障的时候系统会自动进行数据恢复操作,不需要人为干预;➢并行恢复。

多个osd磁盘并行进行数据恢复操作,减少数据恢复时间提高数据的可靠性。

4.1.3 高扩展性➢高度并行。

没有单独的控制组件,所有的负载都是均衡分布在ceph集群的各个节点服务器上;➢自管理。

容易扩展、升级和替换。