(完整版)Ceph分布式存储

合集下载

ceph存储原理

ceph存储原理

ceph存储原理ceph是一种开源、分布式的对象存储和文件系统,它能够在大规模的集群中存储和管理海量数据。

在ceph中,数据被分割成对象,并将这些对象存储在不同的存储节点上以实现高可用性和容错性。

这篇文章将介绍ceph存储的原理,包括ceph的架构、数据的存储和调度方式以及ceph如何处理故障。

ceph架构ceph的架构包括三个主要组成部分:客户端、存储集群和元数据服务器。

客户端是使用ceph存储的应用程序,它们通常是通过ceph API或者对象存储接口来访问ceph集群。

存储集群由一个或多个monitors、object storage devices(OSD),以及可能的元数据服务器组成。

monitors是ceph集群的核心组件,它负责管理ceph的全局状态信息、监控OSD 状态,并为客户端提供服务发现和配置信息。

OSD是实际存储数据的存储节点,它负责存储和处理对象,并在节点故障时自动重新平衡数据。

元数据服务器用于管理ceph文件系统中的元数据信息,包括文件和目录的名称、属性和层次关系等。

ceph存储数据的方式ceph将数据分割成对象,并使用CRUSH算法将这些对象分布在集群中的OSD上。

CRUSH 算法是ceph中存储调度的核心算法,它通过一系列计算将对象映射到存储集群中的OSD。

CRUSH将对象映射到OSD的方式是通过建立CRUSH映射表以实现负载均衡和容错。

CRUSH映射表可以根据管理员的需求进行调整,以达到最佳的性能和可扩展性。

ceph的CRUSH算法有以下特点:1. CRUSH将对象映射到可扩展的存储后端,以实现分布式存储和高可用性。

2. CRUSH使用元数据信息来动态调整对象的存储位置,并根据OSD的状态和磁盘使用情况等信息来实现负载均衡。

3. CRUSH允许管理员对存储策略进行调整,以适应不同的应用场景。

ceph的故障处理ceph具有强大的故障处理机制,它能够自动处理节点故障和数据损坏等问题,以确保数据的完整性和可用性。

ceph分布式存储恢复数据原理

ceph分布式存储恢复数据原理

Ceph分布式存储系统是一个高可靠、高性能的分布式存储解决方案,它采用了对象存储的方式来存储和管理数据。

当数据在Ceph集群中的某个节点发生故障时,Ceph会通过数据恢复机制来保证数据的可靠性和完整性。

以下是Ceph分布式存储恢复数据的原理:1.数据冗余:Ceph通过数据冗余机制来实现数据的容错能力。

每个对象都会被分成多个数据块,并将这些数据块复制到不同的存储节点上。

默认情况下,Ceph会将每个对象的三个副本分布在不同的存储节点上,以保证数据的可靠性。

2.数据恢复:当一个存储节点发生故障时,Ceph会自动检测到节点的故障,并将故障节点上的数据块复制到其他节点上的副本进行恢复。

Ceph使用智能的恢复算法,可以根据网络状况和存储节点的负载情况来选择最佳的恢复路径,以加快数据恢复的速度。

3.故障域:Ceph支持将存储节点分组为故障域,例如机架、机柜或数据中心。

当一个故障域发生故障时,Ceph会优先选择其他故障域中的存储节点来进行数据恢复,以提高数据的可用性和可靠性。

4.副本替换:当一个存储节点永久性地离线或被删除时,Ceph会自动创建新的副本来替换故障的节点。

Ceph会根据预定义的规则来选择替代节点,并将故障节点上的数据块复制到替代节点上,以保证数据的完整性和可靠性。

5.数据平衡:Ceph会自动监测集群中各个存储节点的负载情况,并在需要时将数据块迁移或复制到其他节点上,以实现数据的均衡分布。

这样可以提高存储系统的性能和可扩展性。

总之,Ceph通过数据冗余、智能的恢复算法、故障域管理、副本替换和数据平衡等机制来保证数据的可靠性和完整性。

当一个存储节点发生故障时,Ceph会自动进行数据恢复,将故障节点上的数据复制到其他节点上,以保证数据的可用性和持久性。

ceph对象存储原理

ceph对象存储原理

ceph对象存储原理Ceph对象存储原理Ceph是一种分布式的对象存储系统,它可以将数据存储在多个节点上,提供高可用性和可扩展性。

在了解Ceph对象存储原理之前,我们先来了解一下什么是对象存储。

对象存储是一种将数据以对象的形式存储的方式,每个对象都有一个唯一的标识符。

与传统的块存储和文件存储不同,对象存储不使用文件系统来组织数据,而是将数据与元数据一起存储为一个整体。

Ceph对象存储是基于RADOS(可靠自动分布式对象存储)架构实现的。

RADOS将存储集群划分为多个OSD(对象存储守护进程)节点,每个节点上存储着一部分数据。

当客户端请求访问数据时,Ceph会通过CRUSH算法来确定数据所在的节点,并将数据返回给客户端。

CRUSH算法是Ceph的核心算法之一,它负责将数据块映射到存储节点上。

CRUSH算法通过一系列的映射规则和散列函数来实现数据的分布式存储。

这样,即使在节点发生故障时,Ceph也能够保证数据的可用性。

在Ceph中,数据被分成多个对象,并存储在不同的OSD上。

每个对象都有一个唯一的标识符,称为对象ID。

当客户端请求访问数据时,它会向Ceph Monitor发送一个请求,Monitor会通过CRUSH算法确定数据所在的OSD,并将数据返回给客户端。

Ceph对象存储还提供了数据冗余和数据恢复的功能。

数据冗余是通过将数据复制到多个OSD节点来实现的,这样即使某个节点发生故障,数据仍然可用。

数据恢复则是通过复制丢失的数据块到其他节点上来实现的。

除了数据冗余和数据恢复,Ceph还提供了数据分片和数据压缩的功能。

数据分片可以将大的对象分成多个小的数据块进行存储,提高数据的并发性和吞吐量。

数据压缩则可以减少数据的存储空间,提高存储效率。

总结一下,Ceph对象存储的原理是基于RADOS架构实现的。

它通过CRUSH算法将数据分布在不同的存储节点上,提供高可用性和可扩展性。

同时,Ceph还提供了数据冗余、数据恢复、数据分片和数据压缩等功能,提高了数据的可靠性和存储效率。

ceph使用方法

ceph使用方法

ceph使用方法摘要:1.Ceph简介2.Ceph组件及其作用3.安装Ceph4.Ceph使用方法5.Ceph的日常维护与管理6.Ceph性能优化7.常见问题与解决方案正文:Ceph是一款开源的分布式存储系统,具有高性能、可靠性高、可扩展性强等特点。

它主要由以下几个组件构成:1.Ceph Monitor(CMS):负责维护整个Ceph集群的元数据信息,包括监控各个节点的状态、集群映射关系等。

2.Ceph OSD:负责存储数据,包括数据存储和数据恢复。

OSD节点之间通过CRUSH算法实现数据分布和平衡。

3.Ceph Metadata Server:为Ceph客户端提供元数据服务,包括存储卷配置、快照、克隆等。

接下来,我们来了解一下如何安装和配置Ceph。

1.安装Ceph:首先,确保操作系统为CentOS 7及以上版本。

然后,按照官方文档的指引,依次安装Ceph Monitor、OSD和Metadata Server组件。

2.配置Ceph:安装完成后,需要对Ceph进行配置。

编辑Ceph配置文件(/etc/ceph/ceph.conf),设置相关参数,如:osd pool默认配置、monitor 选举算法等。

3.初始化Ceph:使用ceph-init命令初始化Ceph,之后启动Ceph相关服务。

4.创建存储池:使用ceph-volume命令创建存储池,为存储池分配OSD 节点。

5.创建卷:使用ceph-volume命令创建卷,并将卷挂载到客户端节点。

6.扩容存储池:当存储池空间不足时,可以通过添加OSD节点或调整pool参数进行扩容。

7.维护与管理:定期检查Ceph集群状态,使用ceph命令监控性能指标,如:osd tree、health monitor等。

8.性能优化:根据实际需求,调整Ceph配置文件中的相关参数,如:调整osd的osd_cache_size、osd_timeout等。

9.常见问题与解决方案:遇到问题时,可通过查询官方文档、社区论坛等途径寻求解决方案。

Ceph分布式存储中遇到的问题和解决办法

Ceph分布式存储中遇到的问题和解决办法

Ceph分布式存储中遇到的问题和解决办法最近有很多朋友拿着一篇关于“ceph运维那些坑”的文章来找我,起初我并没有在意,毕竟对于一个“新物种”来说,存在质疑是再正常不过的。

不过,陆续有更多的合作伙伴甚至圈内同行来问我如何看待这篇文章时,我觉得做为一名Ceph开发和运维的技术者,理应站出来为Ceph说点什么。

首先,原作者分析Ceph运维中遇到的问题是真实存在的,甚至在实际的运维过程中还出现过其他更复杂的问题。

因为最初的Ceph只是社区提供的一套开源版,因而想要实现产品化需要趟过很多次“坑”,就像最早的安卓系统一样。

我想任何产品在一开始都难以做到十全十美,因为技术本身就是在发现问题与解决问题的道路上不断前进发展的。

不过,在这里我想澄清的事实是:连初涉Ceph的运维人员都能发现的问题,研究Ceph多年的资深技术人员们肯定也早已发现。

接下来我就根据那篇文章中提到的坑,来说一说在实际产品化过程中我们是如何解决它们的。

一、扩容问题Ceph本身基于Crush算法,具备了多种数据复制策略,可以选择在磁盘、主机、机柜等等位置附着。

例如:如果采取3副本的数据保护策略,就可以通过复制策略来决定这3个副本是否同时分布在不同的磁盘、不同的主机、不同的隔离域、不同的机柜等位置来保证部分硬件故障后数据安全性和服务运行不中断。

Ceph底层是用资源池(POOL)来实现数据逻辑隔离,往往我们会出现因容量或性能不足需要对资源池进行扩容的问题,但是在容量扩容过程中,势必会带来进行数据重新平衡的要求。

Ceph中数据以PG为单位进行组织,因此当数据池中加入新的存储单元(OSD)时,通过调整OSDMAP会带来数据重平衡。

正如文章所提到的,如果涉及到多个OSD的扩容是可能导致可用PG中OSD小于min_size,从而发生PG不可用、IO阻塞的情况。

为了尽量避免这种情况的出现,只能将扩容粒度变小,比如每次只扩容一个OSD或者一个机器、一个机柜(主要取决于存储隔离策略),但是这样注定会带来极大的运维工作量,甚至连扩容速度可能都赶不上数据增长速度。

ceph块存储原理

ceph块存储原理

ceph块存储原理Ceph块存储原理Ceph是一种分布式存储系统,可以为企业提供高效、可靠的存储服务。

Ceph块存储是Ceph存储系统的一部分,它支持块级别的存储,可以为虚拟化环境中的虚拟机提供存储服务。

本文将详细介绍Ceph块存储的原理。

一、Ceph块存储的基本概念Ceph块存储是一种分布式存储,它将数据划分成块,并将这些块存储在不同的节点上。

Ceph块存储的每个块都有一个唯一的ID,称为块ID。

Ceph块存储通过RADOS(可靠自适应分布式对象存储)来管理数据的存储和访问。

RADOS是Ceph的核心组件之一,它负责存储和管理数据。

Ceph块存储通过RBD(RADOS块设备)来实现块级别的存储。

RBD是一种虚拟块设备,它将RADOS存储池中的对象映射为块设备。

RBD可以通过QEMU、KVM等虚拟化平台来访问,为虚拟机提供块级别的存储服务。

二、Ceph块存储的存储原理Ceph块存储的存储原理是将数据划分成块,并将这些块存储在不同的节点上。

Ceph块存储的每个块都有一个唯一的ID,称为块ID。

Ceph块存储通过RADOS来管理数据的存储和访问。

RADOS将数据存储在多个OSD(对象存储设备)上,每个OSD都存储一部分数据。

RADOS会根据数据的大小和复制策略将数据分成多个对象,每个对象都有一个唯一的ID,称为对象ID。

RADOS将对象映射到OSD上,每个对象都有多个副本,副本数由复制策略决定。

当一个对象的一个副本发生故障时,RADOS会自动将副本切换到其他OSD上。

Ceph块存储的RBD将RADOS存储池中的对象映射为块设备。

当一个块设备需要读取或写入数据时,RBD会将数据分成多个对象,每个对象都存储在不同的OSD上。

RBD会通过RADOS协议来访问这些对象,实现数据的读取和写入。

当一个对象的一个副本发生故障时,RADOS会自动将副本切换到其他OSD上,保证数据的可靠性和高可用性。

三、Ceph块存储的访问原理Ceph块存储的访问原理是通过RBD来实现的。

分布式文件存储CephFS详尽介绍及使用经验

分布式文件存储CephFS详尽介绍及使用经验

分布式文件存储 CephFS详尽介绍及使用经验1. Ceph架构介绍Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

特点如下:- 高性能a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。

b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。

c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

- 高可用性a. 副本数可以灵活控制。

b. 支持故障域分隔,数据强一致性。

c. 多种故障场景自动进行修复自愈。

d. 没有单点故障,自动管理。

- 高可扩展性a. 去中心化。

b. 扩展灵活。

c. 随着节点增加而线性增长。

- 特性丰富a. 支持三种存储接口:块存储、文件存储、对象存储。

b. 支持自定义接口,支持多种语言驱动。

使用场景:•块存储 (适合单客户端使用)o典型设备:磁盘阵列,硬盘。

o使用场景:a. docker容器、虚拟机远程挂载磁盘存储分配。

b. 日志存储。

...•文件存储 (适合多客户端有目录结构)o典型设备:FTP、NFS服务器。

o使用场景:a. 日志存储。

b. 多个用户有目录结构的文件存储共享。

...•对象存储 (适合更新变动较少的数据,没有目录结构,不能直接打开/修改文件) o典型设备:s3, swift。

o使用场景:a. 图片存储。

b. 视频存储。

c. 文件。

d. 软件安装包。

e. 归档数据。

...系统架构:Ceph 生态系统架构可以划分为四部分:1.Clients:客户端(数据用户)2.mds:Metadata server cluster,元数据服务器(缓存和同步分布式元数据)3.osd:Object storage cluster,对象存储集群(将数据和元数据作为对象存储,执行其他关键职能)4.mon:Cluster monitors,集群监视器(执行监视功能)2. NFS介绍1. NAS(Network Attached Storage)- 网络存储基于标准网络协议NFSv3/NFSv4实现数据传输。

分布式存储基础、Ceph、cinder及华为软件定义的存储方案

分布式存储基础、Ceph、cinder及华为软件定义的存储方案

块存储与分布式存储块存储,简单来说就是提供了块设备存储的接口。

通过向内核注册块设备信息,在Linux 中通过lsblk可以得到当前主机上块设备信息列表。

本文包括了单机块存储介绍、分布式存储技术Ceph介绍,云中的块存储Cinder,以及华为软件定义的存储解决方案。

单机块存储一个硬盘是一个块设备,内核检测到硬盘然后在/dev/下会看到/dev/sda/。

因为需要利用一个硬盘来得到不同的分区来做不同的事,通过fdisk工具得到/dev/sda1, /dev/sda2等,这种方式通过直接写入分区表来规定和切分硬盘,是最死板的分区方式。

分布式块存储在面对极具弹性的存储需求和性能要求下,单机或者独立的SAN越来越不能满足企业的需要。

如同数据库系统一样,块存储在scale up的瓶颈下也面临着scale out的需要。

分布式块存储系统具有以下特性:分布式块存储可以为任何物理机或者虚拟机提供持久化的块存储设备;分布式块存储系统管理块设备的创建、删除和attach/detach;分布式块存储支持强大的快照功能,快照可以用来恢复或者创建新的块设备;分布式存储系统能够提供不同IO性能要求的块设备。

现下主流的分布式块存储有Ceph、AMS ESB、阿里云磁盘与sheepdog等。

1Ceph1.1Ceph概述Ceph目前是OpenStack支持的开源块存储实现系统(即Cinder项目backend driver之一) 。

Ceph是一种统一的、分布式的存储系统。

“统一的”意味着Ceph可以一套存储系统同时提供对象存储、块存储和文件系统存储三种功能,以便在满足不同应用需求的前提下简化部署和运维。

“分布式”在Ceph系统中则意味着真正的无中心结构和没有理论上限的系统规模可扩展性。

Ceph具有很好的性能、可靠性和可扩展性。

其核心设计思想,概括为八个字—“无需查表,算算就好”。

1.2Ceph系统的层次结构自下向上,可以将Ceph系统分为四个层次:基础存储系统RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自动化的、分布式的对象存储);基础库LIBRADOS;高层应用接口:包括了三个部分:RADOS GW(RADOS Gateway)、RBD(Reliable Block Device)和Ceph FS(Ceph File System)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Ceph分布式存储系统Ceph是根据加州大学Santa Cruz分校的Sage Weil的博士论文所设计开发的新一代自由软件分布式文件系统,其设计目标是良好的可扩展性(PB级别以上)、高性能及高可靠性。

Ceph其命名和UCSC(Ceph 的诞生地)的吉祥物有关,这个吉祥物是“Sammy”,一个香蕉色的蛞蝓,就是头足类中无壳的软体动物。

这些有多触角的头足类动物,是对一个分布式文件系统高度并行的形象比喻。

其设计遵循了三个原则:数据与元数据的分离,动态的分布式的元数据管理,可靠统一的分布式对象存储机制。

本文将从Ceph的架构出发,综合性的介绍Ceph分布式文件系统特点及其实现方式。

一、Ceph基本架构Ceph是一个高可用、易于管理、开源的分布式存储系统,可以在一套系统中同时提供对象存储、块存储以及文件存储服务。

其主要由Ceph存储系统的核心RADOS以及块存取接口、对象存取接口和文件系统接口组成,如图所示Ceph的底层是RADOS,它的意思是“A reliable,autonomous, distributed object storage”。

RADOS作为Ceph分布式文件系统的一个子项目,是为了满足Ceph的需求而设计的,但是,其也可以单独作为一种分布式数据存储系统,给其他的有类似需求的分布式文件系统提供数据存储服务。

Ceph文件系统, Ceph对象存储和Ceph块设备从RADOS的存储集群中读去和写入数据。

Ceph作为一个分布式存储系统,其对外提供的接口,决定了其通用性以及扩展性。

如上图架构图中所示的那样,Ceph对外提供了丰富多样的服务接口,包括多种编程语言接口LIBRADOS(备注,上图来自Ceph中文社区,社区人员在翻译的过程中将字母L遗失掉了)、对象存储接口(RADOSGW)、块存储接口(RBD)以及文件系统接口(Ceph FS)。

其中LIBRADOS编程接口是其他各种客户端接口的基础,其他接口都是基于LIBRADOS来进行扩展实现的。

1.1. RADOSCeph中RADOS(Reliable Autonomic Distributed Object Store)存储集群是所有其他客户端接口使用和部署的基础。

RADOS由两个组件组成:•OSD: Object StorageDevice,提供存储资源。

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

典型的RADOS部署架构由少量的Monitor监控器以及大量的OSD存储设备组成,它能够在动态变化的基于异质结构的存储设备集群之上提供一种稳定的、可扩展的、高性能的单一逻辑对象存储接口。

RADOS系统的架构如图所示:我们看到,RADOS不是某种组件,而是由OSD(Object Storage Device)集群和Monitor集群组成。

通常,一个RADOS系统中,OSD集群是由大量的智能化的OSD节点组成;Monitor集群是由少量的Monitor节点组成。

OSD集群负责存储所有对象的数据。

Monitors集群负责管理Ceph集群中所有成员、关系、属性以及数据分发等信息。

1.2. Ceph客户端接口(Clients)我们将Ceph架构中除了底层基础RADOS之上的LIBRADOS、RADOSGW、RBD以及Ceph FS统一称为Ceph客户端接口。

而LIBRADOS又是Ceph其它如RADOSGW、RBD以及Ceph FS的基础。

简而言之就是RADOSGW、RBD以及Ceph FS根据LIBRADOS提供的多编程语言接口开发。

所以他们之间是一个阶梯级的关系。

1.2.1. RADOSGWRADOSGW(RADOS Gmeway),又叫Ceph对象存储网关,是一个底层基于librados向客户端提供RESTful接口的对象存储接口。

目前Ceph支持两种API接口:(1)patible:S3兼容的接口,提供与Amazon S3大部分RESTfuI API接口兼容的API接口。

(2)patible:提供与OpenStack Swift大部分接口兼容的API接口。

Ceph的对象存储使用网关守护进程(radosgw), radosgw结构图如图所示:在实际的Ceph集群中,radosgw是一个监听RESTfulAPI访问的后台进程,s3 API和Swift APl使用同一个命名空间,即共享同一个命名空间;所以,你可以用其中一个接口写入数据而又用另外一个接口读出数据。

1.2.2. RBD一个数据块是一个字节序列(例如,一个512字节的数据块)。

基于数据块存储接口最常见的介质,如硬盘,光盘,软盘,甚至是传统的9磁道的磁带的方式来存储数据。

块设备接口的普及使得虚拟块设备成为构建像Ceph海量数据存储系统理想选择。

在一个Ceph的集群中, Ceph的块设备支持自动精简配置,调整大小和存储数据。

Ceph 的块设备可以充分利用RADOS功能,实现如快照,复制和数据一致性。

Ceph的RADOS 块设备(即RBD)通过RADOS协议与内核模块或librbd的库进行交互。

RBD的结构如图所示:在Ceph中,如果客户端要想使用存储集群服务提供的块存储,必须要先安装相应的Linux 内核模块Kernel Module,或者使用librbd编程接口。

1.2.3. Ceph FSCeph文件系统(CEPH FS)是一个POSIX兼容的文件系统,使用Ceph的存储集群来存储其数据。

Ceph的文件系统使用相同的Ceph的存储集群系统比如Ceph的块设备,Ceph 的S3和SwiftAPI对象存储,或本机绑定(librados)。

CEPH FS的结构图如下所示:CEPH FS是一个符合POSIX标准的文件系统接口,同时支持用户空间文件系统FUSE。

在CEPH FS中,与对象存储接口与块存储接口最大的不同就是在集群中增加了文件系统元数据服务节点MDS(Ceph Metadata Server)。

MDS也支持多台机器分布式的部署,以实现系统的高可用性。

文件系统客户端需要安装对应的Linux内核模块Ceph FS KernelObject或者Ceph FS FUSE组件。

二、Ceph数据存储2.1. 数据存储过程Ceph存储集群从客户端接收文件,每个文件都会被客户端切分成一个或多个对象,然后将这些对象进行分组,再根据一定的策略存储到集群的OSD节点中,其存储过程如图所示:图中,对象的分发需要经过两个阶段的计算,才能得到存储该对象的OSD,然后将对象存储到OSD中对应的位置。

(1)对象到PG的映射。

PG(PlaccmentGroup)是对象的逻辑集合。

PG是系统向OSD节点分发数据的基本单位,相同PG里的对象将被分发到相同的OSD节点中(一个主OSD节点多个备份OSD节点)。

对象的PG是由对象ID号通过Hash算法,结合其他一些修正参数得到的。

(2)PG到相应的OSD的映射,RADOS系统利用相应的哈希算法根据系统当前的状态以及PG的ID号,将各个PG分发到OSD集群中。

OSD集群是根据物理节点的容错区域(比如机架、机房等)来进行划分的。

Ceph中的OSD节点将所有的对象存储在一个没有分层和目录的统一的命名空问中。

每个对象都包含一个ID号、若干二进制数据以及相应的元数据。

ID号在整个存储集群中是唯一的;元数据标识了所存储数据的属性。

一个对象在OSD节点中的存储方式大致如图所示。

而对存储数据的语义解释完全交给相应的客户端来完成,比如,Ceph FS客户端将文件元数据(比如所有者、创建日期、修改日期等)作为对象属性存储在Ceph中。

2.2. CRUSH算法Ceph作为一个高可用、高性能的对象存储系统,其数据读取及写入方式是保证其高可用性及高性能的重要手段。

对于已知的数据对象,Ccph通过使用CRUSH(ControlledReplication Under Scalable Hashing)算法计算出其在Ceph集群中的位置,然后直接与对应的OSD设备进行交互,进行数据读取或者写入。

例如其写入数据的其主要过程如图所示。

首先,客户端获取Ceph存储系统的状态信息Cluster Map,然后根据状态信息以及将要写入的Pool的CRUSH相关信息,获取到数据将要写入的OSD,最后OSD将数据写入到其中相应的存储位置。

其中相关概念的解释如下:(1)集群地图(Cluster Map):Ceph依赖于客户端以及OSD进程中保存有整个集群相关的拓扑信息,来实现集群的管理和数据的读写。

整个集群相关的拓扑信息就称之为“Cluster Map”。

Cluster Map主要保存Monitor集群、OSD集群、MDS集群等相关的拓扑结构信息以及状态信息。

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

在传统的存储系统中,要查找数据通常是依赖于查找系统的的文件索引表找到对应的数据在磁盘中的位置。

而在Ceph对象存储系统中,客户端与OSD节点都使用CRUSH算法来高效的计算所存储数据的相关信息。

相对于传统的方式,CRUSH提供了一种更好的数据管理机制,它能够将数据管理的大部分工作都分配给客户端和OSD节点,这样为集群的扩大和存储容量的动态扩展带来了很大的方便。

CRUSH是一种伪随机数据分布算法,它能够在具有层级结构的存储集群中有效的分发对象副本。

CRUSH算法是根据集群中存储设备的权重来进行数据分发的,数据在各个OSD设备上近似均匀概率分布。

CRUSH中,数据在存储设备上的分布是根据一个层次化的集群地图(Cluster Map)来决定的。

集群地图是由可用的存储资源以及由这些存储资源构建的集群的逻辑单元组成。

比如一个Ceph存储集群的集群地图的结构可能是一排排大型的机柜,每个机柜中包含多个机架,每个机架中放置着存储设备。

数据分发策略是依照数据的存放规则(placement rules)进行定义的,存放规则是指数据在备份以及存放时应该遵循的相关约定,比如约定一个对象的三个副本应该存放在三个不同的物理机架上。

给定一个值为x的整数,CRUSH将根据相应的策略进行哈希计算输出一个有序的包含n个存储目标的序列:CRUSH(x)=(osd1,osd2,osd3osdn)CRUSH利用健壮的哈希函数,其得到的结果依赖于集群地图Cluster Map、存放规贝则(placementmles)和输入x。

并且CRUSH是一个伪随机算法,两个相似的输入得到的结果是没有明显的相关性的。

这样就能确保Ceph中数据分布是随机均匀的。

2.3. 数据一致性Ceph中,为了保持数据的一致性,在PG内部通常会进行对象的净化过程(scrubobjects)。

相关文档
最新文档