Ceph分布式存储

目录

​编辑

一,ceph简介

1,什么是ceph

2,ceph支持的三种存储方式

1,块存储RDB

2,对象存储RGW

3,文件系统存储ceph-fs

3,ceph的主要特点

4,ceph组件的作用,

1,OSD:(Object Storage Device)

2,monitors

3,MDS

4,Managers

5,ceph的架构

6,ceph的存储概念

7,ceph的存储

正常IO流程

新主IO流程

 

一,ceph简介

1,什么是ceph

          ceph 是一种统一的分布式文件系统,具有优秀的性能、高可用性和可扩展性。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为 openstack 的唯一后端存储来提高数据转发效率。

2,ceph支持的三种存储方式

1,块存储RDB

    RBD(RADOS Block Devices)即为块存储的一种,RBD 通过 librbd 库与 OSD 进行交互,RBD 为 KVM 等虚拟化技术和云服务(如 OpenStack 和 CloudStack)提供高性能和无限可扩展性的存储后端,这些系统依赖于 libvirt 和 QEMU 实用程序与 RBD 进行集成,客户端基于 librbd 库 即可将 RADOS 存储集群用作块设备,不过,用于 rbd 的存储池需要事先启用 rbd 功能并进行初始化。

优点:

  • 使用磁盘映射,如RAID/LVM的方式提供磁盘空间给主机使用,进一步维护了数据的安全性
  • 因为是多块磁盘组合而成的逻辑盘空间,所以多块盘可以并行执行读写操作,提升IO效率
  • 很多大型企业或数据中心使用SAN架构组网,数据传输速度和读写效率进一步得到提升

缺点:

  • 如果采取FC_SAN的方式,需要HBA光纤通道卡和光纤交换机,成本较高
  • 不利于不同操作系统主机间的数据共享,例如Linux主机把盘给格式化为ext4格式,那么在Windows中对这个盘的操作使用就不太友好了,或者无法操作
     

2,对象存储RGW

对象存储,也就是键值存储。通过其接口指令,也就是简单GET,PUT,DEL和其他扩展指令,向存储服务器上传下载数据等

RGW 提供的是 REST 接口,客户端通过 http 与其进行交互,完成数据的增删改查等管理操作。 radosgw 用在需要使用 RESTful API 接口访问 ceph 数据的场合,因此在使用 RBD 即块存储得场合或者使用 cephFS 的场合可以不用启用 radosgw 功能。

 

优点:

  • 后端使用大量硬盘组,且不受复杂目录系统影响,达到高水平的读写效率
  • 集群可扩展性强,且支持多副本存储,保证数据安全性
  • 通过URL直接访问存储文件,简单易管理

 缺点:

  • 不适合存放内容变动性大的文件,不然每次变动都要重新更新上传对象,适合放静态的图 片镜像等非结构性的文件
  • 不太适合作为数据库存储数据使用
  • 操作系统无法像常规磁盘一样安装或挂载对象存储
     

3,文件系统存储ceph-fs

Ceph文件系统(CEPH FS)是一个POSIX兼容的文件系统,可以将ceph集群看做一个共享文件系统挂载到本地,使用Ceph的存储集群来存储其数据,同时支持用户空间文件系统FUSE。它可以像 NFS 或者 SAMBA 那样,提供共享文件夹,客户端通过挂载目录的方式使用 Ceph 提供的存储。

在CEPH FS中,与对象存储与块存储最大的不同就是在集群中增加了文件系统元数据服务节点MDS(Ceph Metadata Server)。MDS也支持多台机器分布式的部署,以实现系统的高可用性。文件系统客户端需要安装对应的Linux内核模块Ceph FS Kernel Object或者Ceph FS FUSE组件。

用户可以在块设备上创建xfs文件系统,也可以创建ext4等其他文件系统。如下图所示,Ceph集群实现了自己的文件系统来组织管理集群的存储空间,用户可以直接将Ceph集群的文件系统挂载到用户机上使用

 优点:

成本低,随便一台服务器都可以用来搭建

方便公司内部的文件共享,云盘共享一些资料等等

缺点:

网络带宽影响,读写效率蛮,传输速率稍低

3,ceph的主要特点

统一存储

  • Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。三种方式可以一同使用。在国内一些公司的云环境中,通常会采用ceph作为openstack的唯一后端存储来提升数据转发效率。所以在开源存储软件中,能够一统江湖。

crush算法

  • Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案,转而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强大的扩展性,理论上支持数千个存储节点

高扩展性

  • 扩展方便,容量大,能够管理数千台服务器,EB级的容量。

可靠性强

  • Ceph中的数据副本数量可以由管理员自行定义,副本可以跨主机,机架,机房,数据中心存放,所以安全可靠,存储节点可以自行管理,自动修复,无单点故障,容错性强。

高性能

  • 因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互

4,ceph组件的作用,

1,OSD:(Object Storage Device)

Ceph的OSD(Object Storage Device)守护进程。主要功能包括:存储数据、副本数据处理、数据恢复、数据回补、平衡数据分布,并将数据相关的一些监控信息提供给Ceph Moniter,以便Ceph Moniter来检查其他OSD的心跳状态。一个Ceph OSD存储集群,要求至少两个Ceph OSD,才能有效的保存两份数据。注意,这里的两个Ceph OSD是指运行在两台物理服务器上,并不是在一台物理服务器上运行两个Ceph OSD的守护进程。通常,冗余和高可用性至少需要3个Ceph OSD。

2,monitors

Ceph的Monitor守护进程:负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,包括监视器图、OSD 图、归置组( PG )图、和 CRUSH 图。

还维护了monitor、OSD和PG的状态改变历史信息,这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发,比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。Ceph 存储集群至少需要一个 Ceph Monitor(服务器数量必须是奇数) 和两个 OSD 守护进程。而运行 Ceph 文件系统客户端时,则必须要有元数据服务器( Metadata Server )

3,MDS

Ceph的MDS(Metadata Server)守护进程,主要保存的是Ceph文件系统的元数据。注意,对于Ceph的块设备和Ceph对象存储都不需要Ceph MDS守护进程。Ceph MDS为基于POSIX文件系统的用户提供了一些基础命令的执行,比如ls、find等,这样可以很大程度降低Ceph存储集群的压力。

4,Managers

Ceph的Managers(Ceph Manager),守护进程(ceph-mgr)负责跟踪运行时间指标和Ceph群集的当前状态,包括存储利用率,当前性能指标和系统负载。 Ceph Manager守护程序还托管基于python的插件来管理和公开Ceph集群信息,包括基于Web的仪表板和REST API。 通常,至少有两名Manager需要高可用性。
 

5,ceph的架构

 

RADOS

Ceph的层是RADOS,RADOS本身也是分布式存储系统,CEPH所有的存储功能都是基于RADOS实现,Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的,用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心。

RADOS系统主要由两部分组成,分别是OSD和Monitor。

OSD: Object StorageDevice,提供存储资源。

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

LIBRADOS

基于RADOS层的上一层是LIBRADOS,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。Ceph的上层应用调用本机上的librados API,再由后者通过socket与RADOS集群中的其他节点通信并完成各种操作。
 

6,ceph的存储概念

存储数据和object的关系

无论使用哪种存储方式(对象、块、挂载),当用户要将数据存储到Ceph集群时,存储数据都会被分割成多个object,每个object都有一个object id,每个object的大小是可以设置的,默认是4MB,object可以看成是Ceph存储的最小存储单元。

object与pg的关系

由于object的数量很多,对象的size很小,在一个大规模的集群中可能有几百到几千万个对象。这么多对象光是遍历寻址,速度都是很缓慢的,为了解决这些问题,ceph引入了归置组(Placcment Group即PG)的概念用于管理object,每个object最后都会通过CRUSH算法计算映射到某个pg中,一个pg可以包含多个object。

pg与osd的关系

pg也需要通过CRUSH计算映射到osd中去存储,如果是二副本的,则每个pg都会映射到二个osd,比如[osd.1,osd.2],那么osd.1是存放该pg的主副本,osd.2是存放该pg的从副本,保证了数据的冗余。

pg与pgp的关系

pg是用来存放object的,pgp相当于是pg存放osd的一种排列组合,我举个例子,比如有3个osd,osd.1、osd.2和osd.3,副本数是2,如果pgp的数目为1,那么pg存放的osd组合就只有一种,可能是[osd.1,osd.2],那么所有的pg主从副本分别存放到osd.1和osd.2,如果pgp设为2,那么其osd组合可以两种,可能是[osd.1,osd.2]和[osd.1,osd.3],很像我们高中数学学过的排列组合

存储池pool

存储池(pool):是对Ceph集群进行的逻辑划分,主要设置其中存储对象的权限、备份数目、PG数以及CRUSH规则等属性。

 Pool是管理员自定义的命名空间,像其他的命名空间一样,用来隔离对象与PG。我们在调用API存储即使用对象存储时,需要指定对象要存储进哪一个POOL中。除了隔离数据,我们也可以分别对不同的POOL设置不同的优化策略,比如副本数、数据块及对象大小等。

ceph存储数据的过程

Ceph存储集群从客户端接收文件,每个文件都会被客户端切分成一个或多个对象,然后将这些对象进行分组,再根据一定的策略存储到集群的OSD节点中,其存储过程如图所示:

 

图中,对象的分发需要经过两个阶段的计算,才能得到存储该对象的OSD,然后将对象存储到OSD中对应的位置。

(1)对象到PG的映射逻辑集合。PG是系统向OSD节点分发数据的基本单位,相同PG里的对象将被分发到相同的OSD节点中(一个主OSD节点多个备份OSD节点)。对象的PG是由对象ID号通过Hash算法,结合其他一些修正参数得到的。

(2)PG到相应的OSD的映射。RADOS系统利用相应的哈希算法根据系统当前的状态以及PG的ID号,将各个PG分发到OSD集群中。OSD集群是根据物理节点的容错区域(比如机架、机房等)来进行划分的。

7,ceph的存储

正常IO流程

 

步骤:

  • client 创建cluster handler。(集群处理信息)
  • client 读取配置文件。
  • client 连接上monitor,获取集群map信息。
  • client 读写io 根据crushmap 算法请求对应的主osd数据节点。
  • 主osd数据节点同时写入另外两个副本节点数据。
  • 等待主节点以及另外两个副本节点写完数据状态。
  • 主节点及副本节点写入状态都成功后,返回给client,io写入完成。
     

新主IO流程

如果新加入的OSD1取代了原有的 OSD4成为 Primary OSD, 由于 OSD1 上未创建 PG , 不存在数据,那么 PG 上的 I/O 无法进行,怎样工作的呢?

 

步骤:

  • client连接monitor获取集群map信息。
  • 同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主。
  • 临时主osd2会把数据全量同步给新主osd1。
  • client IO读写直接连接临时主osd2进行读写。
  • osd2收到读写io,同时写入另外两副本节点。
  • 等待osd2以及另外两副本写入成功。
  • osd2三份数据都写入成功返回给client, 此时client io读写完毕。
  • 如果osd1数据同步完毕,临时主osd2会交出主角色。
  • osd1成为主节点,osd2变成副本
     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AKA|布鲁克林欧神仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值