分布式存储ceph---ceph概念及原理(1) - Wolf_Coder - 博客园

标签: | 发表时间:2020-12-24 19:06 | 作者:
出处:https://www.cnblogs.com

一、Ceph简介:

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

  Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

  官网:https://ceph.com/

  官方文档:http://docs.ceph.com/docs/master/#

二、Ceph特点:

1、高性能:

  a. 摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH算法,数据分布均衡,并行度高。
  b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
  c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

2、高可用性:

  a. 副本数可以灵活控制。
  b. 支持故障域分隔,数据强一致性。
  c. 多种故障场景自动进行修复自愈。
  d. 没有单点故障,自动管理。

3、高可扩展性:

  a. 去中心化。
  b. 扩展灵活。
  c. 随着节点增加而线性增长。

4、特性丰富:

  a. 支持三种存储接口:块存储、文件存储、对象存储。
  b. 支持自定义接口,支持多种语言驱动。

三、Ceph应用场景

  Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;其块设备存储可以对接(IaaS),当前主流的IaaS运行平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。

  Ceph是一个高性能、可扩容的分布式存储系统,它提供三大功能:

  (1) 对象存储(RADOSGW):提供RESTful接口,也提供多种编程语言绑定。兼容S3、Swift;
  (2) 块存储(RDB):由RBD提供,可以直接作为磁盘挂载,内置了容灾机制;
  (3) 文件系统(CephFS):提供POSIX兼容的网络文件系统CephFS,专注于高性能、大容量存储;

什么是块存储/对象存储/文件系统存储?

1、对象存储:

  也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;

2、块存储:

  这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;

3、文件系统存储:

  通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;

四、Ceph核心组件

(1) Monitors:监视器,维护集群状态的多种映射,同时提供认证和日志记录服务,包括有关monitor 节点端到端的信息,其中包括 Ceph 集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过 "ceph mon dump"查看 monitor map。

(2) MDS(Metadata Server):Ceph 元数据,主要保存的是Ceph文件系统的元数据。注意:ceph的块存储和ceph对象存储都不需要MDS。

(3) OSD:即对象存储守护程序,但是它并非针对对象存储。是物理磁盘驱动器,将数据以对象的形式存储到集群中的每个节点的物理磁盘上。 OSD负责存储数据、处理数据复制、恢复、回(Backfilling)、再平衡。完成存储数据的工作绝大多数是由 OSD daemon 进程实现。在构建 Ceph OSD的时候,建议采用SSD 磁盘以及xfs文件系统来格式化分区。此外OSD还对其它OSD进行 心跳检测,检测结果汇报给Monitor

(4) RADOS:Reliable Autonomic Distributed Object Store。RADOS是ceph存储集群的基础。在ceph中,所有数据都以 对象的形式存储,并且无论什么数据类型,RADOS对象存储都将负责保存这些对象。 RADOS层可以确保数据始终保持一致

(5) librados:librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的 接口

(6) RADOSGW:网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储建立连接。并且提供S3 和 Swift(openstack)兼容的RESTful API接口。

(7) RBD:块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个OSD上。

(8) CephFS:Ceph文件系统,与POSIX兼容的文件系统,基于librados封装原生接口。

五、Ceph存储系统的逻辑层次结构

六、RADOS的系统逻辑结构

七、Ceph 数据存储过程

  无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成Objects。Objects size大小可以由管理员调整,通常为2M或4M。每个对象都会有一个唯一的OID,由ino与ono生成,虽然这些名词看上去很复杂,其实相当简单。

   ino:即是文件的File ID,用于在全局唯一标识每一个文件
  ono:则是分片的编号

  比如:一个文件FileID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为A0与A1。

  File —— 此处的file就是用户需要存储或者访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。

  Ojbect —— 此处的object是RADOS所看到的“对象”。Object与上面提到的file的区别是,object的最大size由RADOS限定(通常为2MB或4MB),以便实现底层存储的组织管理。因此,当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储。为避免混淆,在本文中将尽量避免使用中文的“对象”这一名词,而直接使用file或object进行说明。

  PG(Placement Group)—— 顾名思义,PG的用途是对object的存储进行组织和位置映射。具体而言,一个PG负责组织若干个object(可以为数千个甚至更多),但一个object只能被映射到一个PG中,即,PG和object之间是“一对多”映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是“多对多”映射关系。在实践当中,n至少为2,如果用于生产环境,则至少为3。一个OSD上的PG则可达到数百个。事实上,PG数量的设置牵扯到数据分布的均匀性问题。关于这一点,下文还将有所展开。

  OSD —— 即object storage device。唯一需要说明的是,OSD的数量事实上也关系到系统的数据分布均匀性,因此其数量不应太少。在实践当中,至少也应该是数十上百个的量级才有助于Ceph系统的设计发挥其应有的优势。

  基于上述定义,便可以对寻址流程进行解释了。具体而言, Ceph中的寻址至少要经历以下三次映射:

   (1)File -> object映射
  (2)Object -> PG映射,hash(oid) & mask -> pgid
  (3)PG -> OSD映射,CRUSH算法

  CRUSH,Controlled Replication Under Scalable Hashing,它表示数据存储的分布式选择算法, ceph 的高性能/高可用就是采用这种算法实现。CRUSH 算法取代了在元数据表中为每个客户端请求进行查找,它通过计算系统中数据应该被写入或读出的位置。CRUSH能够感知基础架构,能够理解基础设施各个部件之间的关系。并CRUSH保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。CRUSH 算是使得 ceph 实现了自我管理和自我修复。

  RADOS 分布式存储相较于传统分布式存储的优势在于:

  1)将文件映射到object后,利用Cluster Map 通过CRUSH 计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和Block MAp的管理。

  2)RADOS充分利用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展。

八、Ceph IO流程及数据分布

1、正常IO流程图:

步骤:

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

2、新主IO流程图:

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

新主IO流程步骤:

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

九、Ceph Pool和PG分布情况

  pool:是ceph存储数据时的逻辑分区,它起到namespace的作用。每个pool包含一定数量(可配置) 的PG。PG里的对象被映射到不同的Object上。pool是分布到整个集群的。 pool可以做故障隔离域,根据不同的用户场景不统一进行隔离。

 

相关 [分布 ceph ceph] 推荐:

分布式存储ceph---ceph概念及原理(1) - Wolf_Coder - 博客园

- -
  Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统. ceph 的统一体现在可以提供. 对象存储,分布式体现在可以. 在国内一些公司的云环境中,通常会采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率.   Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区.

浅析开源项目之Ceph - 知乎

- -
Ceph是一个极其复杂的统一分布式存储系统,运维操作门槛高、稳定性不错,性能差强人意,虽然各大厂都在自研分布式存储,但Ceph是不可或缺的参考对象. 本文参考了Ceph源代码以及网上各路大神文章,如有侵权,联系删除. 简要分析Ceph的架构、重要的模块以及基于Seastar的未来规划,使读者对Ceph有一个大致清晰的认识.

分布式日志

- - Java - 编程语言 - ITeye博客
最近完成一个简单的日志管理系统,拿出来跟大家分享一下. 3、支持文件输出、habse输出、mongodb输出. 基于以上三点功能,我们下面详细说明. 说道支持这个功能,有个同事认为没有这个必要,他的观点是log4j的配置不需要经常变动,不需要支持这样的功能;本人的观点是“配置可以进行统一管理、而且正式机跟测试机的log4j的配置肯定会有一些差异的”,因此这个功能是必须的.

分布式事务简述

- If you are thinking one year ahead, you plant rice. If you are thinking twenty years ahead, you plant trees. If you are thinking a hundred years ahead, you educate people. - BlogJava-首页技术区
  随着系统越来越大,不断的模块化和SOA化,你的系统可能被分散于不同的机器上,这时候,你原先的单机本地事务可能已经无法满足你的需求,你可能要跨系统跨资源的去使用事务.   具体就不多介绍了,相信大家都能明白ACID特性的基本含义. 而一个具体的事务需要涉及到的模型(无论哪种模型)一般由下面几部分组成:.

Hadoop与分布式计算

- 透明 - 丕子
写本文由leftnoteasy发布于http://leftnoteasy.cnblogs.com 本文可以被全部或者部分的使用,但请注明出处,如果有问题,可以联系wheeleast (at) gmail.com, 也可以加作者的新浪微博:http://weibo.com/leftnoteasy. 很久没有写写博客了,之前主要是换工作,耽误了很多的时间,让人也变得懒散,不想花大时间来写东西.

分布式缓存-Memcached

- - 人月神话的BLOG
分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性). 分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制. 其次是分布式管理和分布式算法,其次是缓存键值管理和路由. 原文: http://wenku.baidu.com/view/8686d46c7e21af45b307a8c3.html.

再谈集中和分布

- - 人月神话的BLOG
上篇文章转载了关于mysql数据库的垂直和水平拆分的相关内容,本篇文章再谈下关于应用集中化后的集中和分布相关策略问题,以及最近关于完全去IOE思路的一些思考和回顾. 现在有一个问题我暂时还没得到比较明确的一些验证,如对于当前x86的pc server服务器好的配置完全可以达到200万TPMC,对于磁盘阵列可以挂接到20T甚至更高的存储容量.

hadoop分布式配置

- - CSDN博客云计算推荐文章
一、前面的部分见伪分布式配置. 二、实现SSH无密码登录远程主机(只在源主机上配置). 注意:以上scp命令表示把authoriezd_keys远程复制到对应主机的相应目录下. slave2是目的主机的名字,需要在源主机的/etc/hosts下配置slave2以及对应的IP地址 192.168.0.5.

浅谈分布式缓存

- - CSDN博客推荐文章
在前面的一些文章中,从实战的角度,讲解了有关 memcached的应用、容灾、监控等等. 但是缺乏对理论的讲解和原理性的剖析. 本文将从理论的角度去介绍,让大家从宏观上对“分布式缓存、nosql”等技术有所了解,以便进一步学习和使用. 在构建大规模的web应用时,缓存技术可以说是必备的,学习的必要性不言而喻.

关于分布式事务

- - Web前端 - ITeye博客
Mysql当前分布式事务只支持Innodb存储引擎. 1个分布式事务由多个行为在不同的数据库上执行,1个分布式事务的执行成功意味着相关数据库上的行为执行均成功. 使用分布式事务的应用程序设计1个或多个资源管理器和一个事务管理器. 资源管理器(RM):用户提供通向事务的途径. 数据库服务器是一个种资源管理器.