Ceph 对象存储
基于 Ceph RADOS Gateway(RGW),Ceph 实现兼容 S3、Swift 协议的对象存储,无需修改底层 RADOS 集群,对外提供 HTTP/HTTPS 对象访问能力。
一、什么是 Ceph 对象网关 RGW
RGW(RADOS Gateway)是构建在librados之上的 HTTP 服务守护进程radosgw,作为 Ceph 对象存储前端网关。
- 对外兼容两套主流对象存储 API:Amazon S3 API、OpenStack Swift API;
- 网关用户不能直接访问 Ceph 集群,请求先经过 RGW 鉴权,再由 RGW 使用 cephx 账号访问底层 RADOS 集群;
- 支持负载均衡,可部署多个 RGW 实例,前端搭配 LB 做高可用;
- 支持对接 LDAP 实现外部身份认证,同时支持多站点跨集群对象复制,满足异地容灾需求。
对象存储基础概念
对象由三部分组成:
- Key(对象键):对象唯一名称,桶内不能重复;
- Metadata 元数据:对象属性,包含系统元数据(大小、修改时间、ETag)和用户自定义 KV 元数据;
- Data 数据:实际存储的文件二进制内容。
桶(Bucket):对象的存储容器,对象存储是扁平命名空间,没有文件系统的多级目录,所有对象直接存放在桶内;每个桶可以配置权限、存储类别、所属区域。
对象存储访问特点:使用 HTTP/HTTPS 协议,不受局域网限制,SDK、浏览器、客户端都可以接入。
二、RGW 内部自动生成的池
部署 RGW 之后,网关会自动创建一系列专用 RADOS 存储池,用来存放元数据、日志、桶索引、业务对象数据:
表格
| 池名 | 作用 |
|---|---|
.rgw.root | 全局信息记录 |
.default.rgw.control | RGW 控制池 |
.default.rgw.meta | 用户密钥、账户元数据 |
.default.rgw.log | 桶、对象操作日志 |
.default.rgw.buckets.index | 桶对象索引 |
.default.rgw.buckets.data | 真正存放业务对象数据 |
.default.rgw.buckets.non‑ec | 对象元数据上传使用 |
如果自定义区域,池名会带上区域前缀,例如
.us‑east‑1.rgw.buckets.data。
三、RGW 整体架构流程
- 客户端(S3/Swift 应用)发起 HTTP 请求,请求经过负载均衡到达 RGW 实例;
- RGW 校验网关层用户账号密码(S3 access_key/secret_key 或者 Swift 账号);
- 校验通过后,RGW 内部使用 cephx 认证,调用 librados 接口读写底层 Ceph RADOS 集群;
- 底层 OSD 完成对象读写,结果原路返回给业务客户端。
关键点:两套用户体系隔离:RGW 网关用户(S3/Swift 用户)≠CephX 集群用户;网关用户只由 RGW 管理,看不到 MON/OSD 等集群组件。 RGW 支持多实例横向扩展,多个 RGW 节点共用一套底层 RADOS 存储,数据一致性由底层 Ceph 保证。
四、核心能力
- 双协议兼容
- S3:亚马逊对象存储 API,大量云原生应用、SDK 支持;
- Swift:OpenStack 对象存储 API,OpenStack 生态对接首选。
- 高可用扩展:多 radosgw 实例,配合负载均衡实现水平扩容,无状态网关。
- 多站点复制(Multi‑Site)
- 支持多个地理隔离 Ceph 集群之间对象异步复制,实现异地灾备;
- 支持主从(主动‑被动)、双活(主动‑主动)复制模式;
- 可以配置整个 zone、zonegroup 复制,桶级别复制策略。
- 权限与身份管理
- 内置用户管理:创建用户、access_key/secret_key 密钥;
- 支持桶策略、对象 ACL 访问控制;
- 对接 LDAP 实现外部账号登录认证。
- 配套功能:版本控制、对象生命周期、静态网站托管、加密、日志审计等对象存储标准能力。
五、RGW 与 RBD、CephFS 简单对比
表格
| 组件 | 存储类型 | 访问接口 | 使用场景 |
|---|---|---|---|
| RGW | 对象存储 | HTTP S3/Swift | 图片、视频、备份归档,互联网海量非结构化数据 |
| RBD | 块存储 | 内核块设备 librbd | 虚拟机磁盘、数据库盘,需要块设备的业务 |
| CephFS | 文件存储 | POSIX 文件挂载 | 需要多层目录,多客户端共享读写文件业务 |
三者底层全部复用 RADOS 对象存储,只是上层对外接口不一样。
六、实践部署要点(cephadm)
- 使用
ceph orch apply rgw <服务名> --placement=节点部署 radosgw 服务; - 可以部署多个 rgw 实例,前端部署 Nginx/Haproxy 负载均衡;
- 创建 RGW 用户,生成 S3 的 access_key、secret_key;
- 使用 S3cmd、aws cli、各类 S3 SDK 连接网关地址,创建 bucket、上传下载对象;
- 多站点场景,配置 zone、zonegroup,开启跨集群对象同步,用于灾备。
七、适用场景 & 局限性
✅适合场景
- 图片、音视频、备份归档、日志存储;
- 云平台对象服务,对接 OpenStack;
- 异地多活、跨地域数据复制;
- 海量非结构化数据,不需要 POSIX 目录。
❌不适合场景
- 需要频繁随机修改文件内部一小块数据(对象是整体覆盖更新,不能局部修改);
- 需要传统多层文件目录强语义(对象存储只是模拟目录);
- 数据库直接读写(优先 RBD 块存储)。
对象存储对象只能整体上传、整体覆盖、整体下载,不支持像块 / 文件一样修改文件中间某部分内容。