Ceph分布式存储实战:块存储RBD、对象网关RGW与文件系统CephFS详解
Ceph分布式存储实战:块存储RBD、对象网关RGW与文件系统CephFS详解
一、前言
在前三篇文章中,我们分别介绍了Ceph的入门架构、集群部署、配置管理、存储池以及认证授权。本文将深入Ceph的三大存储接口:RBD块存储、RGW对象存储和CephFS文件系统。通过本文,你将掌握如何创建和使用RBD镜像、部署RADOS网关并提供S3/Swift兼容的对象存储、以及搭建POSIX兼容的共享文件系统。这些是Ceph生产环境中最常用的功能。
二、Ceph块存储(RBD)管理
2.1 RBD简介
RADOS Block Device(RBD)是Ceph提供的块存储接口,将存储池中的对象组合成虚拟块设备,支持:
- 虚拟磁盘存储(用于虚拟机)
- Linux内核挂载(krbd模块)
- QEMU/KVM和OpenStack Cinder启动支持
- 快照、克隆、精简配置
2.2 RBD数据写入流程
- 客户端创建Pool,指定PG数量
- 创建RBD镜像并挂载
- 用户写入的数据被切分为4MB大小的对象块(默认)
- 每个对象通过PG映射到一组OSD(主+从)
- 客户端直接与主OSD通信,主OSD将数据同步到从OSD
- OSD底层使用XFS文件系统存储对象文件
2.3 创建RBD池与镜像
# 创建存储池并初始化
ceph osd pool create images_pool 32 32
rbd pool init images_pool # 等同于启用rbd应用类型
# 创建专用用户(推荐)
ceph auth get-or-create client.rbd mon 'profile rbd' osd 'profile rbd' -o /etc/ceph/ceph.client.rbd.keyring
# 创建1GB大小的RBD镜像
rbd create images_pool/webapp1 --size 1G
# 列出镜像
rbd ls images_pool
2.4 使用内核模块(krbd)挂载RBD
在客户端安装ceph-common,复制配置和密钥环:
# 客户端安装
dnf install -y ceph-common
# 从集群复制配置和keyring
scp /etc/ceph/ceph.conf /etc/ceph/ceph.client.rbd.keyring root@client:/etc/ceph/
# 映射镜像到块设备
rbd map images_pool/webapp1 # 生成 /dev/rbd0
# 格式化并挂载
mkfs.xfs /dev/rbd0
mkdir /mnt/webapp
mount /dev/rbd0 /mnt/webapp
持久化挂载:配置/etc/ceph/rbdmap和/etc/fstab,启用rbdmap.service。
2.5 RBD镜像管理命令
| 命令 | 功能 |
|---|---|
rbd info <pool>/<image> |
查看镜像详情 |
rbd resize --size <size> <image> |
调整大小(支持在线扩容) |
rbd cp <src> <dst> |
复制镜像 |
rbd mv <old> <new> |
重命名(不支持跨池) |
rbd trash mv <image> |
移入回收站 |
rbd trash restore -p <pool> <id> |
从回收站恢复 |
rbd rm <image> |
永久删除 |
2.6 RBD镜像特性
格式2的RBD镜像支持以下可选特性(features):
| 特性 | 位值 | 说明 |
|---|---|---|
| layering | 1 | 支持快照和克隆 |
| striping | 2 | 分条v2 |
| exclusive-lock | 4 | 独占锁 |
| object-map | 8 | 对象映射(依赖exclusive-lock) |
| fast-diff | 16 | 快速比较差异 |
| deep-flatten | 32 | 扁平化所有快照 |
| journaling | 64 | 日志(用于mirror) |
默认启用:layering, exclusive-lock, object-map, fast-diff, deep-flatten。
# 禁用/启用特性
rbd feature disable images_pool/webapp1 object-map
rbd feature enable images_pool/webapp1 object-map
2.7 RBD快照与克隆
快照操作:
# 创建快照(建议先卸载或冻结文件系统)
rbd snap create images_pool/webapp@snap1
# 列出快照
rbd snap ls images_pool/webapp
# 回滚快照
rbd snap rollback images_pool/webapp@snap1
# 删除快照
rbd snap rm images_pool/webapp@snap1
# 删除所有快照
rbd snap purge images_pool/webapp
克隆(需要先保护快照):
# 保护快照
rbd snap protect images_pool/webapp@snap1
# 创建克隆(可读写)
rbd clone images_pool/webapp@snap1 images_pool/webapp-clone
# 查看克隆关系
rbd children images_pool/webapp@snap1
# 扁平化克隆(脱离父镜像)
rbd flatten images_pool/webapp-clone
克隆后的镜像与父镜像有相同文件系统UUID,需修改UUID(如
xfs_admin -U)才能同时挂载。
2.8 RBD导出与导入
# 导出到文件
rbd export images_pool/webapp webapp.img
# 从文件导入
rbd import webapp.img images_pool/webapp-backup
# 通过管道跨集群复制
rbd export images_pool/webapp - | ssh remote "rbd import - images_pool/webapp"
# 仅导出增量变化
rbd export-diff --from-snap snap1 rbd/data@snap2 diff.bin
# 导入增量
rbd import-diff diff.bin rbd/data
2.9 RBD镜像跨集群同步(RBD Mirror)
Ceph支持在两个集群之间异步复制RBD镜像,用于灾备。两种模式:
- 单向(active-passive):主集群可读写,备集群只读
- 双向(active-active):两个集群均可读写,需双方向同步
配置要点:
- 两个集群创建同名池,启用
journaling特性 - 在池上启用mirror:
rbd mirror pool enable rbd pool - 在主集群生成引导token:
rbd mirror pool peer bootstrap create --site-name prod rbd > token - 在备集群导入token并部署rbd-mirror守护进程
- 验证状态:
rbd mirror pool status、rbd mirror image status
三、Ceph对象存储(RGW)管理
3.1 RGW简介
RADOS Gateway(RGW)是构建在librados之上的对象存储接口,兼容:
- Amazon S3 API:使用存储桶(bucket)和对象
- OpenStack Swift API:使用容器(container)和对象
RGW守护进程(radosgw)提供HTTP/HTTPS服务,支持多站点部署和负载均衡。
3.2 RGW部署
使用Ceph编排器部署RGW服务:
# 创建realm(域)
radosgw-admin realm create --rgw-realm=webapp --default
# 创建zonegroup(区域组)
radosgw-admin zonegroup create --rgw-realm=webapp --rgw-zonegroup=video --master --default
# 创建zone(区域)
radosgw-admin zone create --rgw-realm=webapp --rgw-zonegroup=video --rgw-zone=storage1 --master --default
# 提交配置
radosgw-admin period update --commit
# 部署RGW服务(3个实例,端口8080)
ceph orch apply rgw webapp --placement="3 ceph1 ceph2 ceph3" --realm=webapp --zone=storage1 --port=8080
使用YAML服务规格文件:
service_type: rgw
service_id: webapp
placement:
count: 3
hosts:
- ceph1
- ceph2
- ceph3
spec:
rgw_frontend_port: 8080
应用:ceph orch apply -i rgw_service.yaml
3.3 RGW用户管理
# 创建S3用户
radosgw-admin user create --uid=operator --display-name="S3 Operator" --access-key=12345 --secret-key=67890
# 列出用户
radosgw-admin user list
# 查看用户信息
radosgw-admin user info --uid=operator
# 生成新密钥
radosgw-admin key create --uid=operator --gen-secret
# 禁用/启用用户
radosgw-admin user suspend --uid=operator
radosgw-admin user enable --uid=operator
# 删除用户(同时删除数据)
radosgw-admin user rm --uid=operator --purge-data
3.4 使用AWS CLI访问RGW
# 安装awscli
pip3 install awscli
# 配置凭据(endpoint指向RGW节点)
aws configure
AWS Access Key ID: 12345
AWS Secret Access Key: 67890
# 创建bucket
aws --endpoint=http://ceph1:8080 s3 mb s3://mybucket
# 上传文件
aws --endpoint=http://ceph1:8080 s3 cp file.txt s3://mybucket/
# 列出对象
aws --endpoint=http://ceph1:8080 s3 ls s3://mybucket/
# 下载对象
aws --endpoint=http://ceph1:8080 s3 cp s3://mybucket/file.txt ./
# 删除bucket(需先清空)
aws --endpoint=http://ceph1:8080 s3 rm s3://mybucket --recursive
aws --endpoint=http://ceph1:8080 s3 rb s3://mybucket
3.5 使用Swift客户端访问RGW
# 安装python-swiftclient
pip3 install python-swiftclient
# 创建子用户(Swift需要)
radosgw-admin subuser create --uid=operator --subuser=operator:swift --access=full
# 设置环境变量
export ST_AUTH=http://ceph1:8080/auth/1.0
export ST_USER=operator:swift
export ST_KEY=<secret_key>
# 创建容器
swift post mycontainer
# 上传对象
swift upload mycontainer file.txt
# 列出容器/对象
swift list
swift list mycontainer
# 下载
swift download mycontainer file.txt
# 删除
swift delete mycontainer file.txt
swift delete mycontainer
3.6 配额管理
# 用户配额(最大对象数)
radosgw-admin quota enable --quota-scope=user --uid=operator
radosgw-admin quota set --quota-scope=user --uid=operator --max-objects=1024
# 桶配额(最大容量)
radosgw-admin quota enable --quota-scope=bucket --bucket=mybucket
radosgw-admin quota set --quota-scope=bucket --bucket=mybucket --max-size=10G
# 全局配额(影响所有用户/桶)
radosgw-admin global quota set --quota-scope user --max-objects=2048
radosgw-admin global quota enable --quota-scope user
radosgw-admin period update --commit
3.7 多站点RGW
Ceph RGW支持多站点主动-主动复制,通过Realm(域)、Zonegroup(区域组)、Zone(区域)三层结构实现。配置流程略(详见实验手册)。
四、Ceph文件系统(CephFS)管理
4.1 CephFS简介
CephFS是一个兼容POSIX的分布式文件系统,构建在RADOS之上。特点:
- 支持多活MDS(元数据服务器)提高元数据性能
- 支持备用MDS实现高可用
- 支持快照、配额、ACL
- 客户端可通过内核驱动(kernel)或FUSE挂载
4.2 部署CephFS
方式一:手动部署
# 创建元数据池和数据池
ceph osd pool create cephfs_meta 32 32
ceph osd pool create cephfs_data 32 32
# 设置元数据池副本数(建议更高)
ceph osd pool set cephfs_meta size 3
# 创建文件系统
ceph fs new myfs cephfs_meta cephfs_data
# 部署MDS服务
ceph orch apply mds myfs --placement="3 ceph1 ceph2 ceph3"
方式二:卷部署(推荐)
# 一行命令创建文件系统,自动创建池和MDS
ceph fs volume create myfs --placement="3 ceph1 ceph2 ceph3"
4.3 授权客户端访问
# 创建客户端用户并授权(/目录完全控制)
ceph fs authorize myfs client.myuser / rwps
# 限制到子目录
ceph fs authorize myfs client.restricted / r /subdir rw
授权选项:
r:读w:写p:允许设置布局和配额s:允许创建快照
4.4 挂载CephFS
内核挂载(krbd风格):
# 客户端安装ceph-common
dnf install -y ceph-common
# 复制ceph.conf和client密钥环
scp root@ceph1:/etc/ceph/ceph.conf /etc/ceph/
scp root@ceph1:/etc/ceph/ceph.client.myuser.keyring /etc/ceph/
# 挂载
mount -t ceph ceph1,ceph2,ceph3:/ /mnt/myfs -o name=myuser
# 挂载子目录
mount -t ceph ceph1:/subdir /mnt/sub -o name=myuser,fs=myfs
永久挂载(/etc/fstab):
ceph1,ceph2,ceph3:/ /mnt/myfs ceph name=myuser,_netdev 0 0
FUSE挂载:
dnf install -y ceph-fuse
ceph-fuse -n client.myuser /mnt/myfs
# 挂载子目录
ceph-fuse -n client.myuser -r /subdir /mnt/sub
4.5 CephFS快照管理
快照存储在目录下的.snap隐藏目录中。
# 启用快照功能(默认启用)
ceph fs set myfs allow_new_snaps true
# 创建快照(需要用户有's'权限)
mkdir /mnt/myfs/.snap/snap1
# 恢复文件
cp /mnt/myfs/.snap/snap1/deleted_file /mnt/myfs/
# 删除快照
rmdir /mnt/myfs/.snap/snap1
4.6 配额管理
使用setfattr设置目录配额:
# 设置目录最大容量10GB
setfattr -n ceph.quota.max_bytes -v 10000000000 /mnt/myfs/dir
# 设置最大文件数1000
setfattr -n ceph.quota.max_files -v 1000 /mnt/myfs/dir
# 查看配额
getfattr -n ceph.quota.max_bytes /mnt/myfs/dir
4.7 CephFS镜像(Mirror)
CephFS支持跨集群异步镜像(基于快照)。配置要点:
- 源集群和目标集群均需启用CephFS
- 部署cephfs-mirror守护进程
- 在目标集群创建引导token,源集群导入
- 指定需要镜像的目录
五、总结
本文详细介绍了Ceph的三大存储接口:
| 接口 | 访问方式 | 典型场景 | 关键特性 |
|---|---|---|---|
| RBD | 块设备(内核/QEMU) | 虚拟机磁盘、数据库 | 快照、克隆、精简配置、跨集群镜像 |
| RGW | S3/Swift API | 对象存储、备份、静态网站 | 多站点复制、用户配额、兼容公有云API |
| CephFS | POSIX文件系统 | 共享存储、HPC、容器持久化 | MDS多活、快照、配额、跨集群镜像 |
通过掌握这三种存储方式,你可以利用Ceph构建统一的云存储平台,满足不同应用的存储需求。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)