美文网首页kettle
ceph(第一步) 基础架构

ceph(第一步) 基础架构

作者: lzp1234 | 来源:发表于2019-08-27 11:30 被阅读0次

    前言

    ceph 是什么?
    ceph 是一种开源存储软件。底层实现了对象存储,并以此为基础对外提供对象存储接口、块存储接口、文件级存储接口。

    ceph 结构包含两个部分:

    • ceph client:访问 ceph 底层服务或组件,对外提供各种接口。比如:对象存储接口、块存储接口、文件级存储接口。
    • ceph node:ceph 底层服务提供端,也就是 ceph 存储集群。

    环境

    ceph 版本:Nautilus

    正文

    架构图

    官网的一张架构图:


    ceph 架构图 - 1

    对于这张图,一开始没有看懂它想表达什么,后来明白了。如下图:

    ceph 架构图 - 2

    相关名词解释:

    • RADOS:Reliable Autonomic Distributed Object Store(可靠的,自主的,分布式的对象存储)。在 ceph 中这个名词经常出现,有时会以 R 表示 RADOS。实际上这个词仅仅是对 ceph 的一个修饰词,并不代表 ceph 的组件什么的。粗暴的认为, RADOS = ceph 对象存储集群 即可。
    • RGW、RBD、CEPH FS: 这三个就是 ceph clients。
      RGW:对象存储网关,也就是对象存储接口。
      RBD:块设备,也就是块存储接口。
      CEPH FS:ceph 文件系统,也就是文件级存储接口。

    ceph 基础架构

    ceph 组件分为两部分:

    • ceph node:构成 ceph 集群的基础组件。
    • ceph client:对外提供多种方式使用 ceph 存储的组件。
    ceph 基础组件

    此部分介绍构成 ceph 集群的基础组件。
    其中包含 OSD、Manager、MDS、Monitor。

    • OSD(ceph-osd):object storage daemon,对象存储进程。ceph 管理物理硬盘时,引入了OSD概念,每一块盘都会针对的运行一个OSD进程。换句话说,ceph 集群通过管理 OSD 来管理物理硬盘。OSD 一般功能为:存储数据、维护数据副本、数据恢复、数据再平衡以及对ceph monitor组件提供相关监控信息。

    • Manager(ceph-mgr):用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供 ceph dashboard(ceph ui)和 resetful api。Manager组件开启高可用时,至少2个。

    • MDS(ceph-mds):Metadata server,元数据服务。为ceph 文件系统提供元数据服务(ceph 对象存储和块存储不需要MDS)。为 posix 文件系统用户提供性能良好的基础命令(ls,find等)。

    • Monitor(ceph-mon):维护集群的状态,包含monitor组件信息,manger 组件信息,osd组件信息,mds组件信息,crush 算法信息。还负责ceph集群的身份验证功能,client在连接ceph集群时通过此组件进行验证。Monitor组件开启高可用时,至少3个。

    ceph clients

    此部分介绍 ceph 对外提供各种功能的组件。
    其中包含:Block Device、Object Storage、Filesystem。

    • Block Device:块存储设备,RBD。
    • Object Storage: 对象存储,RGW。对外可提供 swift 、s3 接口类型的restful api。
    • Filesystem:文件系统,CephFS。提供一个兼容POSIX的文件系统。
    ceph 存储过程

    前面两个部分主要介绍了 ceph 的一些组件及对外提供的功能。
    这部分主要介绍 ceph 的存储逻辑。

    首先,在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(obj)。存储 obj 如下图:


    image.png

    ceph 在对象存储的基础上提供了更加高级的思想。

    当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一个 pg 就是一组对象的集合。如下图:


    image.png

    obj 和 pg 之间的映射由 ceph client 计算得出。

    讨论 pg 时,不得不提的另外一个名词:pgp。
    pgp 决定了 pg 和 osd 之间的映射关系。一般将 pgp_num 设置成和 pg_num 一样大小。

    这里还有一个名词需要提一下,在 ceph 中会经常见到 crush 算法。简单来说,crush 算法就是指 ceph 中数据如何存储、读取的过程。

    由于 ceph 集群面对许多的独立项目,因此 ceph 还引入了 ceph pool 的概念用于划分不同的项目。
    ceph pool 是对 ceph 对象的逻辑划分,并不是物理划分。

    pg 和 ceph pool 的区别:

    • pg 对于用户来说是透明的,只是底层的一种优化方案。
    • ceph pool 对于用户来说,就像 mysql 中的 database。

    像大多数集群软件一样,ceph 也提供了缓存的概念。称之为 Cache Tier(缓存层,在具体使用时有时会称之为缓存池)。
    缓存池对用户来说是透明的,因此不会改变用户的原有使用逻辑。以下缓存池的介绍,均为底层逻辑。
    在没有缓存池时,ceph client 直接指向存储池。
    在添加缓存池后,ceph client 指向缓存池,缓存池再指向存储池。

    扩展

    1. 关于 osd、pg、pgp 的猜想

    官方原话:
    When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
    Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
    By Karan Singh
    个人翻译:
    当一个池增加 pg 数量时,这个池中的所有 pg 都会变化。但是原 pg 的实际物理存储位置不会改变。
    当一个池增加 pgp 的数量时,pg 的实际物理存储位置会发生改变。

    首先,截至目前,没有具体查到资料证明以下观点。(基于一致性hash的猜想)

    宏观上,大量的 obj 存储过程如下:
    image.png
    由上图,引发几个问题:
    1. obj 如何存储到 pg 上?
    2. pg 如何存储到 osd 上?
    3. 那 pgp 又是什么?
    4. 为什么要有 pg 这个东西?
    一幅猜想图:
    猜想图.png

    图中出现了一个新词: vosd ,这个是指虚拟 osd。它的数量等于 pgp 的数量,而 pgp 一般又等于 pg。

    猜想:
    1. obj 在存储时,首先经过 hash 算法决定存储在哪个 pg 上。
    2. 再次经过 hash 算法,计算出 pg 位于哪个 vosd 上。
    3. vosd 中存储了与物理 osd 之间的映射。

    pgp 的数量就是 vosd 的数量。

    引入 pg 可以实现 pool 概念,以及优化碎片管理(这一点十分不确定)。

    引入 pgp(vosd),是为了在增加 osd 时可以让数据更加均衡的分布。

    如猜想图:
    当我们增加池的 pg 数量时,不会改变 vosd,因此原 pg 与 vosd 之间的映射未变,原 pg 的实际物理位置也不会发生变化。只是会影响同一个池中 obj 的分布。
    当我们增加池的 pgp 数量时,相当于改变了 vosd,通过 hash 计算出的部分 pg 与 vosd 之间的映射就要发生改变,从而导致 pg 的实际物理位置发生改变。

    与一致性hash不同的地方:
    一般情况下,一致性hash只有一层虚拟化层,并且虚拟化层是根据物理硬件而变化的。但是ceph却是一种反着来的意思。

    当 ceph 增加一个 osd 时,pg 的物理位置也会发生改变。
    在该猜想下:
    当增加 osd 时,并不会增加 vosd 的数量,原部分 vosd 会映射到新的 osd 上,因此产生一种部分 pg 的实际物理位置发生变化的情况。

    2. 关于 pg pgp 数量设定

    创建池时,会分配固定的 pg,以及设置与 pg 一样大小的 pgp。
    注意,一般 pg 数量都设置为 2 的次方。

    严格意义上,我们无论为池分配多少个 pg 都没有问题。但有时候 pg num 配置小了会报错,配置大了也会报错。这不是因为这么配置不对,是因为有其它的参数在限制我们随意配置 pg num。

    比如:
    osd 有两个配置,当每个 osd 的 pg num 过少(默认30)时会告警,当每个 osd 的 pg num 过多(默认300)也会告警。

    所以,想要入门使用 ceph,还是需要了解许多基础知识才可以。否则,各种意外。

    参考

    https://docs.ceph.com/docs/master/architecture/

    https://ceph.com/pgcalc/

    相关文章

      网友评论

        本文标题:ceph(第一步) 基础架构

        本文链接:https://www.haomeiwen.com/subject/hztrectx.html