简介

  • Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。
  • 在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储。
  • 比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。
  • 与其他存储相比的优势:
    • 充分利用了存储节点上的计算能力

      • 在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡。
    • 不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。
      • 采用了CRUSH算法、HASH环等方法。

核心组件

  • Ceph OSD(Object Storage Device):

    • 主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。
    • 一般情况下一块硬盘对应一个OSD,由OSD来对硬盘存储进行管理,当然一个分区也可以成为一个OSD。
    • Ceph OSD的架构实现由物理磁盘驱动器、Linux文件系统和Ceph OSD服务组成。
    • 对于Ceph OSD Deamon而言,Linux文件系统显性的支持了其拓展性,一般Linux文件系统有好几种,比如有BTRFS、XFS、Ext4等,BTRFS。
    • 虽然它们有很多优点特性,但现在还没达到生产环境所需的稳定性,一般比较推荐使用XFS。
    • 一般写数据到Ceph集群时,都是先将数据写入到Journal盘中,然后每隔一段时间比如5秒再将Journal盘中的数据刷新到文件系统中。
    • 一般为了使读写时延更小,Journal盘都是采用SSD,一般分配10G以上,当然分配多点那是更好。
    • Ceph中引入Journal盘的概念是因为Journal允许Ceph OSD功能很快做小的写操作。
    • 一个随机写入首先写入在上一个连续类型的journal,然后刷新到文件系统。
    • 这给了文件系统足够的时间来合并写入磁盘,一般情况下使用SSD作为OSD的journal可以有效缓冲突发负载。
  • Ceph Moniter
    • 是一个监视器,负责监视Ceph集群,维护Ceph集群的健康状态,同时维护着Ceph集群中的各种Map图,比如OSD Map、Monitor Map、PG Map和CRUSH Map。
    • 这些Map统称为Cluster Map,Cluster Map是RADOS的关键数据结构,管理集群中的所有成员、关系、属性等信息以及数据的分发。
    • 比如当用户需要存储数据到Ceph集群时,OSD需要先通过Monitor获取最新的Map图,然后根据Map图和object id等计算出数据最终存储的位置。
  • Ceph MDS(MetaData Server)
    • 主要保存的文件系统服务的元数据,但对象存储和块存储设备是不需要使用该服务的。
    • 查看各种Map的信息: ceph osd(mon、pg) dump

基础架构组件

  • 组件图

  • Rados

    • 是一个完整的分布式对象存储系统,它具有可靠、智能、分布式等特性。
    • Ceph的高可靠、高可拓展、高性能、高自动化都是由这一层来提供的
    • 用户数据的存储最终也都是通过这一层来进行存储的,RADOS可以说就是Ceph的核心。
  • LibRados

    • 是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python等。
  • RadosSGW

    • 一套基于当前流行的RESTFUL协议的网关,并且兼容Amazon S3和Swift。
  • RBD(Reliable Distributed Block)

    • 通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。
  • Ceph Fs(File System)

    • 通过Linux内核客户端和FUSE来提供一个兼容POSIX的文件系统

数据分布算法

  • 在分布式存储系统中比较关注的一点是如何使得数据能够分布得更加均衡,常见的数据分布算法有一致性Hash和Ceph的Crush算法。

  • Ceph是为大规模分布式存储而设计的,数据分布算法必须能够满足在大规模的集群下数据依然能够快速的准确的计算存放位置,同时能够在硬件故障或扩展硬件设备时做到尽可能小的数据迁移。

  • Crush是一种伪随机的控制数据分布、复制的算法。它就是精心为这些特性设计的,可以说CRUSH算法也是Ceph的核心之一。

  • 基本概念理解:

    • 存储数据与object的关系

      • 当用户要将数据存储到Ceph集群时,存储数据都会被分割成多个object,每个object都有一个object id,每个object的大小是可以设置的,默认是4MB,object可以看成是Ceph存储的最小存储单元。
    • object与pg的关系

      • 由于object的数量很多,所以Ceph引入了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的一种排列组合。
      • PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数
      • PG的增加会引起PG内的数据进行分裂,分裂相同的OSD上新生成的PG当中
      • PGP的增加会引起部分PG的分布进行变化,但是不会引起PG内对象的变动
    • pg和pool的关系

      • pool也是一个逻辑存储概念,我们创建存储池pool的时候,都需要指定pg和pgp的数量,逻辑上来说pg是属于某个存储池的,就有点像object是属于某个pg的。
    • 存储数据, object, pg, pool, osd, 存储磁盘的关系

  • 本质上CRUSH算法是根据存储设备的权重来计算数据对象的分布的。

    • 权重的设计可以根据该磁盘的容量和读写速度来设置,比如根据容量大小可以将1T的硬盘设备权重设为1,2T的就设为2。
    • 在计算过程中,CRUSH是根据Cluster Map、数据分布策略和一个随机数共同决定数组最终的存储位置的。
  • Cluster Map里的内容信息包括存储集群中可用的存储资源及其相互之间的空间层次关系

    • 比如集群中有多少个支架,每个支架中有多少个服务器,每个服务器有多少块磁盘用以OSD等
  • 数据分布策略是指可以通过Ceph管理者通过配置信息指定数据分布的一些特点

    • 比如管理者配置的故障域是Host,也就意味着当有一台Host起不来时,数据能够不丢失
    • CRUSH可以通过将每个pg的主从副本分别存放在不同Host的OSD上即可达到,不单单可以指定Host,还可以指定机架等故障域
    • 除了故障域,还有选择数据冗余的方式,比如副本数或纠删码
  • CRUSH计算表达式简单表示:

    CRUSH(x) -> (osd.1, osd.2......osd.n)
    • X为随机数

Ceph 概念理解的更多相关文章

  1. 大数据核心知识点:Hbase、Spark、Hive、MapReduce概念理解,特点及机制

    今天,上海尚学堂大数据培训班毕业的一位学生去参加易普软件公司面试,应聘的职位是大数据开发.面试官问了他10个问题,主要集中在Hbase.Spark.Hive和MapReduce上,基础概念.特点.应用 ...

  2. SpringIOC的概念理解、构造器注入、setter注入、p命名空间注入、IOC容器介绍与比较

    1.IOC概念理解 IOC(Inversion of Control)即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  3. Kubernetes重要概念理解

    Kubernetes重要概念理解 kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者.2018年的kubernetes第一个版本1.10已经发布.下面整理一下,kubernete ...

  4. SNF快速开发平台2019-角色、权限、账户的概念理解-非常全的理论讲解权限控制

    组织模型   资源模型  操作模型 谁能够执行哪些操作    执行资源的范围 资源概念资源就是想要的到的最终物质,我们可以给每一个资源定义一个权限,也可以给某一类资源定义一个权限 权限概念权限是对资源 ...

  5. elasticsearch基本概念理解+elasticsearch 的shards unassigned处理方法 -- 最佳运维实践 - 集群规划

    1.es与MySQL的概念对比 2.概念理解 2.1 Index : 一个索引即是文档的集合 2.2 Document : 一个文档即是一个可被索引的基础单元信息,一条记录: 2.3 Replicas ...

  6. fragment概念理解

    fragment概念理解知识,fragment概念理解图片 fragment概念理解内容,fragment概念理介绍,fragment概念理正文 Fragment是Android honeycomb ...

  7. ubuntn系统下将文件拷贝到优盘中及挂载概念理解

    参考资料:http://jingyan.baidu.com/article/7082dc1c76f178e40a89bdd3.html: http://bbs.csdn.net/topics/3801 ...

  8. 转 Kubernetes 入门 概念理解

    你闺女也能看懂的插画版Kubernetes指南 原创  2016-06-30 作者 周小璐 译 编者按:Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码.有一天女儿走进书 ...

  9. JavaScript的作用域和块级作用域概念理解

    作用域 作用域永远都是任何一门编程语言中的重中之重,因为它控制着变量与参数的可见性与生命周期.说到这里我们需要理解两个概念:块级作用域与函数作用域. 函数作用域 这个应该好理解,函数作用域就是说定义在 ...

随机推荐

  1. C#多态学习总结

    面向对象编程三大特点  封装 继承 多态.今天我把自己学习多态的过程进行总结 多态 就是 同一个方法在不同情况下,会表选不同的效果(多个形态).在代码上表现就是 同一个父类对象 赋予不同的子类对象 就 ...

  2. MessageBox函数

    <Windows程序设计>(第五版)(美Charles Petzold著) https://docs.microsoft.com/zh-cn/windows/desktop/apiinde ...

  3. JVM 学习笔记 - 带你掌握JVM类加载机制

    前言 往期JVM系列: 精美图文带你掌握 JVM 内存布局 本节主要内容: 类的生命周期 类加载阶段描述 数组类和非数组类在加载阶段的差别 父子类初始化顺序 接口的初始化 JVM如何处理 多线程同时初 ...

  4. Github 第三方授权登录教程

    Github 第三方授权登录教程 ####大致流程图 ####1.首先注册一个github帐号,Applications>Developer applications>Register a ...

  5. 中山Day5——普及

    今天题目真是贼难呐...才38... 收获:树状数组单个修改 树状数组区间修改 T1:旅行 题意:有n个数,问;从中取任意个数,他们的和为质数的方案数是多少?(n<=50) 暴力模拟即可,这里不 ...

  6. 常用WinAPI函数整理------------转载

    常用WinAPI函数整理原创 玩撕你 发布于2019-09-04 20:06:55 阅读数 101 收藏展开 之前的博客写了很多关于Windows编程的内容,在Windows环境下的黑客必须熟练掌握底 ...

  7. java并发AtomicIntegerArray

    java并发AtomicIntegerArray AtomicIntegerArray的原子性 AtomicIntegerArray的原子性是对数组的元素的,不是数组. 源码基于openjdk 1.8 ...

  8. 关于2017届学长制作分享软件share(失物招领)的使用体验和需改进的内容

    使用体验 1.注册界面 注册界面提示明显,提示用户输入什么类型的密码,而且输入什么样的用户名不限,注册界面色调比较单一,注册内容比较少,而且比较简单,体验感比较好,但注册界面色调和设计全无,使用感一般 ...

  9. 8核AMD Zen加持:微软Surface这回血拼

    微软定于10月2日在纽约举办Surface新品发布会,几乎全线消费级产品都将更新,比如15英寸Surface Laptop 3. 最新爆料称,15寸Surface Laptop 3预计一口气推出6款型 ...

  10. 重要参考SQL

    --保存问卷调查信息IF ISNULL(OBJECT_ID('P_WebSaveSQRecord'),0) > 0 DROP PROCEDURE P_WebSaveSQRecordGO crea ...