首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【答疑】Ceph统一存储:文件、对象、块如何存储到同一个系统中

【答疑】Ceph统一存储:文件、对象、块如何存储到同一个系统中

作者头像
早起的鸟儿有虫吃
发布2025-10-10 13:11:20
发布2025-10-10 13:11:20
1100
代码可运行
举报
运行总次数:0
代码可运行

提问:

疑问:文件、对象、块 是什么 怎么存储到同一个系统中呢?

回答:

Ceph最核心的设计就是"统一":文件、块、对象这三种存储接口,

最终都转化为对底层**RADOS(可靠分布式对象存储)**的操作。

🎯 设计哲学

统一底层:所有存储类型都基于RADOS对象存储

接口抽象:不同接口提供不同的访问方式

数据转换:将不同格式的数据转换为对象存储


1. 对象存储 (RADOS Gateway - RGW)

🎯 特点:最直接的方式

为什么最直接? 因为底层本身就是对象存储!

用户视角

看到的结构:一个桶(Bucket),里面放着一个个对象

代码语言:javascript
代码运行次数:0
运行
复制
RGW索引结构:
┌─────────────────────────────────┐
│ Bucket索引                      │
│ ├── bucket1/                    │
│ │   ├── object1.jpg             │
│ │   └── object2.pdf             │
│ └── bucket2/                    │
│     └── document.docx           │
└─────────────────────────────────┘

使用方式:直接上传文件,通过API访问

🔄 存储到RADOS的过程

1

直接映射:RGW将用户上传的每个文件直接映射为一个或多个RADOS对象

2

元数据存储:对象数据、元数据(如用户自定义的键值对)都存储在这些RADOS对象中

3

扁平命名空间

扁平结构:所有对象都在同一层级

无目录概念:通过对象ID直接访问

代码语言:javascript
代码运行次数:0
运行
复制
           /------+------------------------------+----------------\
           | ID   | Binary Data                  | Metadata       |
           +------+------------------------------+----------------+
           | 1234 | 0101010101010100110101010010 | name1 = value1 |
           |      | 0101100001010100110101010010 | name2 = value2 |
           |      | 0101100001010100110101010010 | nameN = valueN |
           \------+------------------------------+----------------/

2. 块存储 (RBD - RADOS Block Device)

🎯 特点:需要切分处理

为什么需要切分? 块设备是连续的线性地址空间,需要被切分后存入RADOS。

用户视角

看到的结构:一块虚拟硬盘(如/dev/rbd0),可以分区、格式化文件系统

使用方式:像使用物理硬盘一样,可以挂载到虚拟机

存储到RADOS的过程

1

条带化切割:RBD将这块完整的虚拟硬盘切分成固定大小的块(例如4MB)

2

映射为对象每一块都被存储在一个独立的RADOS对象

📊 举例:一个1GB的RBD镜像大约对应256个4MB的RADOS对象

🎯 优势

高性能:可以并行读写多个对象

可扩展:块设备大小不受单对象限制


3. 文件存储 (CephFS - Ceph File System)

🎯 特点:最复杂的架构

为什么最复杂? 文件系统有目录树结构和文件元数据(权限、创建时间等)。

霞浦, 楊家溪, 風景
霞浦, 楊家溪, 風景

👀 用户视角

看到的结构:传统的目录树结构(/home/user/file.txt)

使用方式:像使用本地文件系统一样,支持POSIX语义

🔄 存储到RADOS的过程

🗂️ 数据分离架构

CephFS采用数据和元数据分离的架构:

1

文件数据

一个文件的内容会被切分成条带

分布存储在多个RADOS对象

这些对象存放在专门的数据池(Data Pool)

2

元数据

所有文件的元信息(文件名、目录结构、权限、大小等)由**MDS(元数据服务器)**管理

最终也存储在RADOS对象

这些对象存放在专门的元数据池(Metadata Pool)

🎯 优势

高性能访问:MDS集群缓存元数据

强一致性:所有数据都持久化在RADOS中

POSIX兼容:完全兼容传统文件系统接口


📊 三种存储方式对比总结

存储接口

用户视角

Ceph的"翻译"过程

最终存储在RADOS中的形式

对象

桶和对象

直接映射

一个文件对应一个或多个RADOS对象

一块虚拟硬盘

切块后映射

一个块设备对应很多个RADOS对象

文件

目录和文件

数据和元数据分离,数据切条带后映射,元数据由MDS管理

文件内容对应很多对象,元数据也对应专门的对象

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端开发成长指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提问:
  • 回答:
    • 🎯 设计哲学
  • 1. 对象存储 (RADOS Gateway - RGW)
    • 🎯 特点:最直接的方式
    • 用户视角
    • 🔄 存储到RADOS的过程
  • 2. 块存储 (RBD - RADOS Block Device)
    • 🎯 特点:需要切分处理
    • 用户视角
    • 存储到RADOS的过程
    • 🎯 优势
  • 3. 文件存储 (CephFS - Ceph File System)
    • 🎯 特点:最复杂的架构
    • 👀 用户视角
    • 🔄 存储到RADOS的过程
      • 🗂️ 数据分离架构
    • 🎯 优势
  • 📊 三种存储方式对比总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档