LiSheng's blog LiSheng's blog
首页
笔记
个人简历
随笔集
GitHub (opens new window)
首页
笔记
个人简历
随笔集
GitHub (opens new window)
  • golang

  • cplus

  • leetcode

  • 存储技术

    • 学习大纲
    • 命令ls的执行过程
    • mmap && write
    • 命令write的执行过程
    • 块
    • VFS层
    • Ceph

      • Ceph架构设计
      • Crash算法
      • osd上的数据管理
        • ceph分布式存储-对象存储(RGW)搭建
        • ceph分布式存储-管理crushmap
        • ceph分布式存储-集群客户端连接
        • ceph分布式存储-集群容量评估
        • ceph分布式存储-集群通信
        • ceph分布式存储-块存储BlueStore性能测试
        • ceph分布式存储-日志和调试
        • ceph分布式存储-数据不均衡调整
        • ceph分布式存储-用户管理
        • ceph分布式存储-MDS介绍
        • ceph分布式存储-MON模块内部结构分析
        • ceph分布式存储-OS调优
        • ceph分布式存储-PG和PGP的区别
      • Daos

    • 分布式系统

    • 计算机网络

    • Linux操作系统

    • Redis

    • 其他

    • 笔记
    • 存储技术
    • Ceph
    lisheng
    2024-09-10
    目录

    osd上的数据管理

    在Ceph系统中,客户端通过CRUSH(Controlled Replication Under Scalable Hashing)算法计算出数据对象应该存储在哪些OSD上。确定数据对象存储在特定的OSD后,OSD需要知道数据在其内部存储设备(磁盘或SSD)上的具体位置。

    Ceph实现这一过程的方式涉及多个步骤和数据结构,主要通过以下过程来完成:

    # 1. 客户端使用CRUSH算法确定OSD

    • CRUSH算法的作用: 客户端根据对象的名字或ID,以及CRUSH map(包含集群拓扑和数据分布策略),计算出对象所属的放置组(Placement Group,PG),然后根据PG确定存储该对象的主OSD及其副本OSD。

    • PG(Placement Group): PG是Ceph中的一个逻辑分区,表示一组对象的集合。CRUSH算法通过计算,将对象分配到PG,再将PG映射到具体的OSD上。PG作为中间层,简化了对象与OSD之间的映射关系,减少了数据分布的复杂度。

    # 2. 数据对象与PG的映射

    • 对象映射到PG: 在Ceph中,每个数据对象都会映射到一个特定的PG中。这个映射关系是通过哈希函数计算对象ID,并将其映射到一个PG范围中来实现的。Ceph客户端根据对象ID和集群配置,计算出该对象所属的PG。

    • PG映射到OSD: PG通过CRUSH算法进一步映射到具体的OSD上。CRUSH算法基于PG ID和集群拓扑结构(如OSD数量、故障域等)计算出该PG对应的主OSD和副本OSD。

    # 3. OSD内的对象存储管理

    一旦对象被分配到某个OSD,该OSD负责管理该对象在其存储设备上的具体存放位置。这是通过OSD的内部文件系统或对象存储机制来实现的。

    • BlueStore和Filestore: Ceph支持两种OSD后端存储引擎,BlueStore和Filestore。BlueStore是Ceph的默认后端,直接管理磁盘上的块设备;Filestore则依赖于底层文件系统(如XFS或EXT4)来存储对象数据。

    # 3.1 使用BlueStore(现代Ceph OSD的默认存储引擎)

    • 直接管理块设备: BlueStore直接在块设备上存储数据,不依赖于传统文件系统,这提供了更高的性能和更好的控制能力。它使用一个内部数据库(如RocksDB)来管理元数据和数据的映射关系。

    • 对象数据存储: 当客户端将数据写入到OSD时,BlueStore将数据对象切分为块并存储在分配的块设备区域中。对象元数据(如数据块的位置、大小、校验和等)存储在RocksDB中。

    • 数据读取流程: 当OSD需要读取某个数据对象时,它查询RocksDB中的元数据来找到对象数据在块设备上的位置,然后直接访问块设备的相应位置进行数据读取。

    # 3.2 使用Filestore(传统的Ceph OSD存储引擎)

    • 依赖于底层文件系统: Filestore在传统的文件系统(如XFS或EXT4)之上操作。对象数据作为文件存储在文件系统的目录中。Filestore使用文件名来编码对象的相关信息(如对象ID和版本)。

    • 对象数据存储: 在Filestore中,每个Ceph对象作为文件存储在底层文件系统的目录结构中。目录路径和文件名编码了PG ID、对象ID等信息。

    • 数据读取流程: Filestore在读取数据时,通过文件系统的目录结构和文件名定位到目标文件,从而读取对象数据。

    # 4. 客户端与OSD的数据交互

    • 数据访问流程:
      • 客户端请求数据: 客户端首先通过CRUSH算法计算出目标对象所在的PG及对应的OSD。
      • OSD查询存储位置: OSD根据其内部的存储引擎(BlueStore或Filestore),查询对象在磁盘上的具体存放位置。
      • 数据返回客户端: OSD从磁盘中读取数据并将其返回给客户端。

    # 总结

    客户端通过CRUSH算法确定数据对象应该存储在哪些OSD上,但并不需要知道对象在OSD内部磁盘上的具体位置。OSD负责管理其内部存储设备上的数据布局。通过BlueStore或Filestore等存储引擎,OSD可以高效地管理对象数据的存放位置,提供高性能的数据读写操作。BlueStore使用RocksDB来管理对象到物理磁盘位置的映射,而Filestore则依赖传统的文件系统路径结构来存储和检索对象数据。

    编辑 (opens new window)
    上次更新: 2024/09/13, 11:59:12
    Crash算法
    ceph分布式存储-对象存储(RGW)搭建

    ← Crash算法 ceph分布式存储-对象存储(RGW)搭建→

    最近更新
    01
    ceph分布式存储-对象存储(RGW)搭建
    10-27
    02
    ceph分布式存储-集群客户端连接
    10-27
    03
    ceph分布式存储-管理crushmap
    10-27
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式