Ceph分布式存储对象块文件

wen java案例 1

本文目录导读:

Ceph分布式存储对象块文件

  1. 核心思想:底层统一,接口多样
  2. 对象存储 (Object Storage) - RADOS Gateway (RGW)
  3. 块存储 (Block Storage) - RADOS Block Device (RBD)
  4. 文件系统存储 (File System Storage) - CephFS
  5. 总结与对比
  6. 如何选择?

这是一个关于Ceph分布式存储的非常核心的问题,Ceph之所以强大,很大程度上是因为它能够在同一套系统上提供三种数据访问接口:对象存储块存储文件系统存储

下面我为你详细解释这三个概念在Ceph中是如何实现的、它们的区别以及适用场景。

核心思想:底层统一,接口多样

Ceph的底层核心是一个名为 RADOS(Reliable Autonomic Distributed Object Store,可靠自主分布式对象存储)的存储系统,所有数据,无论是作为对象、块设备还是文件存储,最终在RADOS层都会被切分成若干个大小固定的 Object(对象)(默认大小为4MB),然后分布在多个OSD(Object Storage Daemon,对象存储守护进程)上,并通过 CRUSH算法 实现数据的分布和冗余(如副本或纠删码)。

基于RADOS,Ceph提供了三个上层接口(网关或驱动):


对象存储 (Object Storage) - RADOS Gateway (RGW)

这是最接近底层RADOS概念的一种存储方式。

  • 接口: 遵循 RESTful API 标准,即 Amazon S3OpenStack Swift 兼容的API。
  • 工作原理
    • 用户通过HTTP/HTTPS请求访问RGW。
    • RGW是一个守护进程,充当客户端和RADOS集群之间的代理。
    • RGW将用户上传的文件(如一个图片、视频)作为一个对象,存储在RADOS集群中。
    • 每个对象有一个唯一的 Key(键),可以组织在 Bucket(容器)中。
  • 特点
    • 无限扩展: 通过增加RGW节点和OSD节点实现性能和容量的水平扩展。
    • 高并发: 适合大量小文件和大文件的非结构化数据。
    • 无文件系统限制: 不依赖传统文件系统(如ext4)的元数据限制。
    • 元数据丰富: 支持自定义元数据(如图片的Exif信息)。
    • 访问控制: 有完善的权限模型(Bucket Policy, User/Group)。
  • 典型场景
    • 云存储(如网盘、备份、归档)。
    • 静态网站托管。
    • 媒体存储(图片、视频、音频流)。
    • 大数据分析(如Hadoop/Spark的数据源)。
    • S3兼容应用: 几乎所有现代应用(如Kuberenetes的Velero, OpenStack的Glance, 移动/Web App后端)都默认支持。

块存储 (Block Storage) - RADOS Block Device (RBD)

这是最接近于传统硬盘的存储方式。

  • 接口: 标准 块设备接口(如 /dev/rbd0),可以被客户端(通常是云主机)像普通硬盘一样格式化、挂载和使用。
  • 工作原理
    • 客户端(如QEMU/KVM虚拟机、OpenStack Nova节点)加载一个名为 rbd 的内核模块。
    • 客户端直接跟RADOS集群中的Monitor (MON)OSD 通信,无需经过任何网关。
    • RBD将客户端对块设备的读写请求,映射为对RADOS对象的读写。
    • 每个RBD设备被分割成若干个 Object,分布在集群中。
  • 特点
    • 高性能: 绕过文件系统的元数据开销,直接操作裸设备。
    • 低延迟: 客户端直接与OSD通信,网络路径最短(无网关瓶颈)。
    • 功能丰富: 支持快照、克隆(写时复制)、精简配置、在线扩容、一致性组等。
    • 弹性扩展: 可以动态调整块设备的大小。
  • 典型场景
    • 虚拟化: 为OpenStack、Kuberenetes(通过CSI驱动)、VMware等提供虚拟机硬盘(云硬盘)。
    • 数据库: 为MySQL、PostgreSQL、MongoDB等提供高性能、低延迟的存储后端。
    • 容器化应用: 为容器提供持久化存储(如Kuberenetes的PersistentVolume)。
    • 裸金属服务器: 通过iSCSI或内核驱动挂载Ceph RBD块设备。

文件系统存储 (File System Storage) - CephFS

这是在块设备之上构建了一个符合POSIX标准的分布式文件系统。

  • 接口POSIX兼容的文件系统接口,可以通过 NFSSMB/CIFS(通过Samba)或Linux内核的 ceph 文件系统驱动挂载。
  • 工作原理
    • 需要部署 Ceph Metadata Server (MDS) 守护进程。
    • MDS负责管理文件系统的元数据(目录结构、文件名、权限、文件到对象的映射)。
    • 客户端通过内核驱动或FUSE挂载,读取MDS获取元数据,然后直接向OSD读写数据(通过RADOS)。
    • CephFS的数据存储也使用RADOS的对象,但元数据由MDS专门管理。
  • 特点
    • POSIX语义: 对用户友好,上层应用无需修改即可使用(如cp, mv, cat, ls命令)。
    • 共享访问: 多个客户端可以同时挂载同一个CephFS,并发读写同一个文件(需要软件处理锁冲突)。
    • 强一致性: 保证写入后立即可读(与S3的最终一致性不同)。
    • 动态子树分区: MDS可以将不同的目录子树分配给不同的MDS进程,实现元数据性能的线性扩展。
  • 典型场景
    • HPC / 高性能计算: 需要POSIX接口进行共享工作负载。
    • 共享存储: 多个Web服务器、应用服务器共享同一份网页代码、配置文件。
    • 数据湖 / 大数据分析: 替换HDFS(Hadoop分布式文件系统),作为Spark、Hive等框架的底层存储。
    • 容器编排: Kubernetes的StatefulSetDeployment可以用来挂载CephFS作为共享存储。
    • 传统NAS替代: 提供高性能、可横向扩展的企业级共享文件存储。

总结与对比

特性 对象存储 (RGW) 块存储 (RBD) 文件系统存储 (CephFS)
核心接口 RESTful (S3/Swift) 块设备 (/dev/rbdX) POSIX (NFS, CIFS, 内核)
访问方式 HTTP/HTTPS 内核模块 + RADOS 内核/FUSE + MDS + RADOS
使用对象 应用程序(云原生) 虚拟机 / 数据库 用户 / 系统管理员 / 应用
性能 中等(受网关、网络限制) 最高,低延迟 高 (MDS可能成为瓶颈)
扩展性 容量/性能线性扩展 容量线性扩展 容量线性,元数据需MDS扩展
一致性 最终一致性 强一致性 强一致性
元数据 用户自定义 Key-Value 无(由上层文件系统管理) 由 MDS 管理 (目录、文件名等)
典型用例 云存储、备份、大数据 云硬盘、数据库、容器 共享存储、HPC、NAS替代
复杂度 (部署RGW) (需要客户端驱动) (需要部署MDS)
成本 中等 (RGW是额外进程) (无额外服务) 较高 (MDS需要独立服务器)

如何选择?

  1. 如果你需要标准POSIX文件系统CephFS(共享存储、NAS替代、传统应用)。
  2. 如果你需要高性能、低延迟的块设备RBD(数据库、虚拟机云硬盘)。
  3. 如果你需要海量非结构化数据、RESTful API、云原生RGW (S3对象存储)。

Ceph的最大魅力在于:你可以用一套硬件集群,同时创建RBD块设备给数据库,创建CephFS给共享Web目录,创建S3桶给前端应用上传图片,三者共享底层的RADOS集群,资源可以灵活分配,管理统一。

抱歉,评论功能暂时关闭!