• 001.Ceph简介概述


    一 Ceph简介

    Red Hat Ceph是一个分布式的数据对象存储,系统设计旨在性能、可靠性和可扩展性上能够提供优秀的存储服务。分布式对象存储是存储的未来,因为它们适应非结构化数据,并且客户端可以同时使用当前及传统的对象接口进行数据存取。例如:
    • 本地语言绑定接口(C/C++, Java, Python)
    • RESTful 接口(S3/Swift)
    • 块设备接口
    • 文件系统接口
    Red Hat Ceph具有非常好的可扩展性——数以千计的客户端可以访问PB级到EB级甚至更多的数据。

    二 Ceph优势及特点

    2.1 Ceph优势

    Ceph区别于其他文件系统(如glusterfs、swift等)主要具有以下优势:
    1. CRUSH算法
    CRUSH算法运行在Ceph Clients和Ceph OSD上,用于计算对象的位置信息,它代替了传统的查表的思想,把工作分摊到所有Ceph Clients和Ceph OSD上,增强了弹性扩展和高可用性,是ceph的两大创新之一。ceph摒弃了传统的集中式存储元数据寻址的方案,而使用CRUSH算法完成数据的寻址操作。CRUSH在一致性哈希基础上很好的考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。Crush算法有相当强大的扩展性,理论上支持数千个存储节点。
    1. 高可用
    Ceph中的数据副本数量可以由管理员自行定义,并可以通过CRUSH算法指定副本的物理存储位置以分隔故障域,支持数据强一致性;ceph可以忍受多种故障场景并自动尝试并行修复。
    1. 高扩展性
    Ceph不同于swift,客户端所有的读写操作都要经过代理节点,一旦集群并发量增大时,代理节点很容易成为单点瓶颈。Ceph本身并没有主控节点,扩展起来比较容易,并且理论上,它的性能会随着磁盘数量的增加而线性增长。
    1. 特性丰富
    Ceph支持三种调用接口:对象存储,块存储,文件系统挂载。三种方式可以一同使用。
    2.2 Ceph特点
    1. 统一存储
    2. 无任何单点故障
    3. 数据多份冗余
    4. 存储容量可扩展
    5. 自动容错及故障自愈

    三 体系架构

    体系架构示意图(来源于官方):
    001

    3.1 RADOS

    Ceph的底层核心为RADOS(Reliable, Autonomic Distributed Object Store),RADOS本身也是分布式存储系统,CEPH所有的存储功能都是基于RADOS实现。Ceph的上层应用调用本机上的librados API,再由后者通过socket与RADOS集群中的其他节点通信并完成各种操作。
    Ceph的本质是一个对象存储。RADOS由两个组件组成:OSD和Monitor。
    OSD主要提供存储资源,每一个disk、SSD、RAID group或者一个分区都可以成为一个OSD,而每个OSD还将负责向该对象的复杂节点分发和恢复;
    Monitor维护Ceph集群并监控Ceph集群的全局状态,提供一致性的决策。
    RADOS分发策略依赖于CRUSH(Controlled Replication Under Scalable Hashing)算法(基于可扩展哈希算法的可控复制)。

    3.2 RADOS GW和RBD

    RADOS GateWay、RBD其作用是在librados库的基础上提供抽象层次更高、更便于应用或客户端使用的上层接口。其中,RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。
    RBD则提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建volume。目前,Red Hat已经将RBD驱动集成于KVM/QEMU中,以提高虚拟机访问性能。这两种方式目前在云计算中应用的比较多。

    3.3 CEPHFS

    CEPHFS则提供了POSIX接口,用户可直接通过客户端挂载使用。它是内核态的程序,所以无需调用用户空间的librados库。它通过内核中的net模块来与Rados进行交互。

    四 Ceph角色及原理

    4.1 角色及作用

    002
    所有Ceph存储集群的部署都始于部署一个个Ceph节点、网络和Ceph存储集群。Ceph存储集群至少需要一个Ceph Monitor和两个OSD守护进程。而运行Ceph文件系统客户端时,则必须要有元数据服务器(Metadata Server)。
    • Ceph OSDs:Ceph OSD守护进程( Ceph OSD )的功能是存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。当Ceph存储集群设定为有2个副本时,至少需要2个OSD守护进程,集群才能达到active+clean状态(Ceph默认有3个副本)。
    • Monitors:Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、OSD图、归置组(PG)图、和CRUSH 图。Ceph 保存着发生在Monitors、OSD和PG上的每一次状态变更的历史信息(称为epoch)。
    • MDSs: Ceph元数据服务器(MDS)为Ceph文件系统存储元数据(也就是说,Ceph块设备和Ceph 对象存储不使用MDS)。元数据服务器使得POSIX文件系统的客户端,可以在不对Ceph存储集群造成负担的前提下,执行诸如ls、find等基本命令。

    4.2 存储通信机制

    03
    当一个OSD需要存储数据时(不管是来自Ceph块设备、Ceph对象存储、Ceph文件系统、还是基于librados的自定义实现),Ceph OSD在扁平的命名空间内把所有数据都存储为对象。
    004
    提示:对象包含一个标识符、二进制数据、和由名字/值对组成的元数据,元数据语义完全取决于Ceph客户端。例如,CephFS用元数据存储文件属性,如文件所有者、创建日期、最后修改日期等等。一个对象ID不止在本地唯一 ,它在整个集群内都是唯一的。
    Ceph客户端维护对象ID和存储对象的存储池名称,但它们既不需要维护对象到OSD的索引,也不需要与一个集中的对象索引进行通信来查找数据对象的位置。
    为了能够存储并获取数据,Ceph客户端首先会访问一台Ceph mon并得到最新的存储集群映射关系,然后Ceph客户端可以通过提供的对象名称与存储池名称,使用集群映射关系和CRUSH算法(可控的、可扩展的、分布式的副本数据放置算法)来计算出提供对象所在的归置组(PG)和主Ceph OSD。
    最后,Ceph客户端连接到可执行读写操作的主OSD上进而达到数据的存储与获取。客户端和OSD之间没有中间服务器,中间件或总线。

    五 Ceph应用场景

    Ceph的应用场景主要由它的架构确定,Ceph提供对象存储、块存储和文件存储。

    5.1 LIBRADOS应用

    通俗理解,Librados提供了应用程序对RADOS的直接访问,目前Librados已经提供了对C、C++、Java、Python、Ruby和PHP的支持。它支持单个单项的原子操作,如同时更新数据和属性、CAS操作,同时有对象粒度的快照操作。它的实现是基于RADOS的插件API,也就是在RADOS上运行的封装库。

    5.2 RADOSGW应用

    此类场景基于Librados之上,增加了HTTP协议,提供RESTful接口并且兼容S3、Swfit接口。RADOSGW将Ceph集群作为分布式对象存储,对外提供服务。

    5.3 RBD应用

    此类场景也是基于Librados之上的,细分为下面两种应用场景。
    第一种应用场景为虚拟机提供块设备。通过Librbd可以创建一个块设备(Container),然后通过QEMU/KVM附加到VM上。通过Container和VM的解耦,使得块设备可以被绑定到不同的VM上。
    第二种应用场景为主机提供块设备。这种场景是传统意义上的理解的块存储。
    以上两种方式都是将一个虚拟的块设备分片存储在RADOS中,都会利用数据条带化提高数据并行传输,都支持块设备的快照、COW(Copy-On-Write)克隆。最重要的是RBD还支持Live migration。

    5.4 CephFS(Ceph文件系统)应用

    此类场景是基于RADOS实现的PB级分布式文件系统,其中引入MDS(Meta Date Server),它主要为兼容POSIX文件系统提供元数据,比如文件目录和文件元数据。同时MDS会将元数据存储在RADOS中,这样元数据本身也达到了并行化,可以大大加快文件操作的速度。MDS本身不为Client提供数据文件,只为Client提供对元数据的操作。当Client打开一个文件时,会查询并更新MDS相应的元数据(如文件包括的对象信息),然后再根据提供的对象信息直接从RADOS中得到文件数据。
     
    更多有趣知识可见:https://blog.csdn.net/sunhf_csdn/article/details/79797186
    官方文档:http://docs.ceph.org.cn
    参考:http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/
    https://www.jianshu.com/p/25163032f57f
    http://www.51niux.com/?id=161
  • 相关阅读:
    Python解释器
    js子节点children和childnodes的用法
    添加jar包需注意
    Class.forName("com.mysql.jdbc.driver");
    java集合类总结
    interface思考练习一
    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    Struts2的配置文件中, <package>的作用,<action><result>重名?
    在Struts2的Action中获得request response session几种方法
    学习一直都是一个相见恨晚的过程,我希望我的相见恨晚不会太晚。
  • 原文地址:https://www.cnblogs.com/itzgr/p/10265103.html
Copyright © 2020-2023  润新知