对象网关的定位
Ceph 底层只有对象接口,radosgw(RGW)在其上实现 S3 与 Swift 兼容的 HTTP API,应用不必改造就能使用标准对象存储 SDK。RGW 实例本身无状态,可以横向扩展多个实例并置于负载均衡之后,桶索引与对象数据则落在 RADOS 池中。
基本信息
| 服务名 | radosgw(软件包 ceph-radosgw) |
|---|---|
| 兼容接口 | S3 与 Swift,多站点可组织为 realm、zonegroup、zone |
| 前端 | 内置 civetweb 或 beast,默认端口与 TLS 配置以官方文档为准 |
| 依赖池 | 根池、元数据池、桶索引池、数据池与日志池 |
| 鉴权方式 | S3 使用访问密钥对,需与上层网关配合控制来源 |
| 扩展方式 | 多实例无状态,前置 HAProxy 或 nginx 做负载均衡 |
典型使用场景
- 应用从公有云对象存储迁到自建:S3 兼容接口可复用现有 SDK
- 需要容量大、单位成本可控的备份与归档落点
- 多机房容灾:用 realm 与 zonegroup 建立单向或双向同步
- 与容器平台或大数据组件集成:这些生态多数只认 S3 接口
- 本地开发与测试:用兼容接口替代线上对象存储做联调
用户与桶管理
用户与桶管理
radosgw-admin user create --uid=app1 --display-name=app1 # 建用户并生成访问密钥
radosgw-admin user info --uid=app1 # 查看密钥与用量
radosgw-admin bucket stats --bucket=bk1 # 单桶对象数与容量
radosgw-admin sync status # 多站点同步状态
radosgw-admin period update --commit # 提交周期变更,多站点场景
ceph osd pool application enable <pool> rgw # 标记池用途便于识别与调优网关依赖池作用
| 池 | 用途 | 注意点 |
|---|---|---|
| 根池 | 保存 realm、zonegroup 与用户等元数据 | 必须存在,不可随意删除或重建 |
| 元数据池 | 保存用户、桶等元数据对象 | 占用随对象数量增长,容量要留余量 |
| 索引池 | 保存桶内对象索引,可分片 | 分片不足时大桶写入形成热点 |
| 数据池 | 保存对象数据本体 | 可用纠删码池降低空间成本 |
| 日志池 | 运行日志与用量统计 | 可定期清理,占用会持续增长 |
对象数据可以放在纠删码池上节省空间,但桶索引池必须使用副本池,因为索引需要频繁的原地更新。索引分片数偏小时,单个大桶的写入会集中到少数分片,表现为延迟抖动。具体池名与分片配置以官方文档和当前版本为准。
根池保存着 realm 与用户元数据,删除或重建会导致所有访问密钥失效、桶映射丢失。清理存储池之前先确认它不属于对象网关的根池或元数据池。
能力边界
对象网关提供的是对象语义,不支持文件系统的目录结构与原地随机写,需要 POSIX 语义的应用应改用 CephFS。S3 特性覆盖度随版本演进,分段上传、桶策略、版本控制等能力在不同版本存在差异,落地前应先按官方文档的功能矩阵逐项核对。