Ceph分布式存储实战块存储RBD、对象网关RGW与文件系统CephFS详解一、前言在前三篇文章中我们分别介绍了Ceph的入门架构、集群部署、配置管理、存储池以及认证授权。本文将深入Ceph的三大存储接口RBD块存储、RGW对象存储和CephFS文件系统。通过本文你将掌握如何创建和使用RBD镜像、部署RADOS网关并提供S3/Swift兼容的对象存储、以及搭建POSIX兼容的共享文件系统。这些是Ceph生产环境中最常用的功能。二、Ceph块存储RBD管理2.1 RBD简介RADOS Block DeviceRBD是Ceph提供的块存储接口将存储池中的对象组合成虚拟块设备支持虚拟磁盘存储用于虚拟机Linux内核挂载krbd模块QEMU/KVM和OpenStack Cinder启动支持快照、克隆、精简配置2.2 RBD数据写入流程客户端创建Pool指定PG数量创建RBD镜像并挂载用户写入的数据被切分为4MB大小的对象块默认每个对象通过PG映射到一组OSD主从客户端直接与主OSD通信主OSD将数据同步到从OSDOSD底层使用XFS文件系统存储对象文件2.3 创建RBD池与镜像# 创建存储池并初始化ceph osd pool create images_pool3232rbd pool init images_pool# 等同于启用rbd应用类型# 创建专用用户推荐ceph auth get-or-create client.rbd monprofile rbdosdprofile rbd-o/etc/ceph/ceph.client.rbd.keyring# 创建1GB大小的RBD镜像rbd create images_pool/webapp1--size1G# 列出镜像rbdlsimages_pool2.4 使用内核模块krbd挂载RBD在客户端安装ceph-common复制配置和密钥环# 客户端安装dnfinstall-yceph-common# 从集群复制配置和keyringscp/etc/ceph/ceph.conf /etc/ceph/ceph.client.rbd.keyring rootclient:/etc/ceph/# 映射镜像到块设备rbd map images_pool/webapp1# 生成 /dev/rbd0# 格式化并挂载mkfs.xfs /dev/rbd0mkdir/mnt/webappmount/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特性位值说明layering1支持快照和克隆striping2分条v2exclusive-lock4独占锁object-map8对象映射依赖exclusive-lockfast-diff16快速比较差异deep-flatten32扁平化所有快照journaling64日志用于mirror默认启用layering, exclusive-lock, object-map, fast-diff, deep-flatten。# 禁用/启用特性rbd feature disable images_pool/webapp1 object-map rbd featureenableimages_pool/webapp1 object-map2.7 RBD快照与克隆快照操作# 创建快照建议先卸载或冻结文件系统rbd snap create images_pool/webappsnap1# 列出快照rbd snaplsimages_pool/webapp# 回滚快照rbd snap rollback images_pool/webappsnap1# 删除快照rbd snaprmimages_pool/webappsnap1# 删除所有快照rbd snap purge images_pool/webapp克隆需要先保护快照# 保护快照rbd snap protect images_pool/webappsnap1# 创建克隆可读写rbd clone images_pool/webappsnap1 images_pool/webapp-clone# 查看克隆关系rbd children images_pool/webappsnap1# 扁平化克隆脱离父镜像rbd flatten images_pool/webapp-clone克隆后的镜像与父镜像有相同文件系统UUID需修改UUID如xfs_admin -U才能同时挂载。2.8 RBD导出与导入# 导出到文件rbdexportimages_pool/webapp webapp.img# 从文件导入rbdimportwebapp.img images_pool/webapp-backup# 通过管道跨集群复制rbdexportimages_pool/webapp -|sshremoterbd import - images_pool/webapp# 仅导出增量变化rbd export-diff --from-snap snap1 rbd/datasnap2 diff.bin# 导入增量rbd import-diff diff.bin rbd/data2.9 RBD镜像跨集群同步RBD MirrorCeph支持在两个集群之间异步复制RBD镜像用于灾备。两种模式单向active-passive主集群可读写备集群只读双向active-active两个集群均可读写需双方向同步配置要点两个集群创建同名池启用journaling特性在池上启用mirrorrbd mirror pool enable rbd pool在主集群生成引导tokenrbd 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 GatewayRGW是构建在librados之上的对象存储接口兼容Amazon S3 API使用存储桶bucket和对象OpenStack Swift API使用容器container和对象RGW守护进程radosgw提供HTTP/HTTPS服务支持多站点部署和负载均衡。3.2 RGW部署使用Ceph编排器部署RGW服务# 创建realm域radosgw-admin realm create --rgw-realmwebapp--default# 创建zonegroup区域组radosgw-admin zonegroup create --rgw-realmwebapp --rgw-zonegroupvideo--master--default# 创建zone区域radosgw-admin zone create --rgw-realmwebapp --rgw-zonegroupvideo --rgw-zonestorage1--master--default# 提交配置radosgw-admin period update--commit# 部署RGW服务3个实例端口8080ceph orch apply rgw webapp--placement3 ceph1 ceph2 ceph3--realmwebapp--zonestorage1--port8080使用YAML服务规格文件service_type:rgwservice_id:webappplacement:count:3hosts:-ceph1-ceph2-ceph3spec:rgw_frontend_port:8080应用ceph orch apply -i rgw_service.yaml3.3 RGW用户管理# 创建S3用户radosgw-admin user create--uidoperator --display-nameS3 Operator--access-key12345--secret-key67890# 列出用户radosgw-admin user list# 查看用户信息radosgw-admin user info--uidoperator# 生成新密钥radosgw-admin key create--uidoperator --gen-secret# 禁用/启用用户radosgw-admin usersuspend--uidoperator radosgw-admin userenable--uidoperator# 删除用户同时删除数据radosgw-admin userrm--uidoperator --purge-data3.4 使用AWS CLI访问RGW# 安装awsclipip3installawscli# 配置凭据endpoint指向RGW节点aws configure AWS Access Key ID:12345AWS Secret Access Key:67890# 创建bucketaws--endpointhttp://ceph1:8080 s3 mb s3://mybucket# 上传文件aws--endpointhttp://ceph1:8080 s3cpfile.txt s3://mybucket/# 列出对象aws--endpointhttp://ceph1:8080 s3lss3://mybucket/# 下载对象aws--endpointhttp://ceph1:8080 s3cps3://mybucket/file.txt ./# 删除bucket需先清空aws--endpointhttp://ceph1:8080 s3rms3://mybucket--recursiveaws--endpointhttp://ceph1:8080 s3 rb s3://mybucket3.5 使用Swift客户端访问RGW# 安装python-swiftclientpip3installpython-swiftclient# 创建子用户Swift需要radosgw-admin subuser create--uidoperator--subuseroperator:swift--accessfull# 设置环境变量exportST_AUTHhttp://ceph1:8080/auth/1.0exportST_USERoperator:swiftexportST_KEYsecret_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 mycontainer3.6 配额管理# 用户配额最大对象数radosgw-adminquotaenable--quota-scopeuser--uidoperator radosgw-adminquotaset--quota-scopeuser--uidoperator --max-objects1024# 桶配额最大容量radosgw-adminquotaenable--quota-scopebucket--bucketmybucket radosgw-adminquotaset--quota-scopebucket--bucketmybucket --max-size10G# 全局配额影响所有用户/桶radosgw-admin globalquotaset--quota-scope user --max-objects2048radosgw-admin globalquotaenable--quota-scope user radosgw-admin period update--commit3.7 多站点RGWCeph 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_meta3232ceph osd pool create cephfs_data3232# 设置元数据池副本数建议更高ceph osd poolsetcephfs_meta size3# 创建文件系统ceph fs new myfs cephfs_meta cephfs_data# 部署MDS服务ceph orch apply mds myfs--placement3 ceph1 ceph2 ceph3方式二卷部署推荐# 一行命令创建文件系统自动创建池和MDSceph fs volume create myfs--placement3 ceph1 ceph2 ceph34.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-commondnfinstall-yceph-common# 复制ceph.conf和client密钥环scprootceph1:/etc/ceph/ceph.conf /etc/ceph/scprootceph1:/etc/ceph/ceph.client.myuser.keyring /etc/ceph/# 挂载mount-tceph ceph1,ceph2,ceph3:/ /mnt/myfs-onamemyuser# 挂载子目录mount-tceph ceph1:/subdir /mnt/sub-onamemyuser,fsmyfs永久挂载/etc/fstabceph1,ceph2,ceph3:/ /mnt/myfs ceph namemyuser,_netdev 0 0FUSE挂载dnfinstall-yceph-fuse ceph-fuse-nclient.myuser /mnt/myfs# 挂载子目录ceph-fuse-nclient.myuser-r/subdir /mnt/sub4.5 CephFS快照管理快照存储在目录下的.snap隐藏目录中。# 启用快照功能默认启用ceph fssetmyfs allow_new_snapstrue# 创建快照需要用户有s权限mkdir/mnt/myfs/.snap/snap1# 恢复文件cp/mnt/myfs/.snap/snap1/deleted_file /mnt/myfs/# 删除快照rmdir/mnt/myfs/.snap/snap14.6 配额管理使用setfattr设置目录配额# 设置目录最大容量10GBsetfattr-nceph.quota.max_bytes-v10000000000/mnt/myfs/dir# 设置最大文件数1000setfattr-nceph.quota.max_files-v1000/mnt/myfs/dir# 查看配额getfattr-nceph.quota.max_bytes /mnt/myfs/dir4.7 CephFS镜像MirrorCephFS支持跨集群异步镜像基于快照。配置要点源集群和目标集群均需启用CephFS部署cephfs-mirror守护进程在目标集群创建引导token源集群导入指定需要镜像的目录五、总结本文详细介绍了Ceph的三大存储接口接口访问方式典型场景关键特性RBD块设备内核/QEMU虚拟机磁盘、数据库快照、克隆、精简配置、跨集群镜像RGWS3/Swift API对象存储、备份、静态网站多站点复制、用户配额、兼容公有云APICephFSPOSIX文件系统共享存储、HPC、容器持久化MDS多活、快照、配额、跨集群镜像通过掌握这三种存储方式你可以利用Ceph构建统一的云存储平台满足不同应用的存储需求。
Ceph分布式存储实战:块存储RBD、对象网关RGW与文件系统CephFS详解
发布时间:2026/6/5 1:34:01
Ceph分布式存储实战块存储RBD、对象网关RGW与文件系统CephFS详解一、前言在前三篇文章中我们分别介绍了Ceph的入门架构、集群部署、配置管理、存储池以及认证授权。本文将深入Ceph的三大存储接口RBD块存储、RGW对象存储和CephFS文件系统。通过本文你将掌握如何创建和使用RBD镜像、部署RADOS网关并提供S3/Swift兼容的对象存储、以及搭建POSIX兼容的共享文件系统。这些是Ceph生产环境中最常用的功能。二、Ceph块存储RBD管理2.1 RBD简介RADOS Block DeviceRBD是Ceph提供的块存储接口将存储池中的对象组合成虚拟块设备支持虚拟磁盘存储用于虚拟机Linux内核挂载krbd模块QEMU/KVM和OpenStack Cinder启动支持快照、克隆、精简配置2.2 RBD数据写入流程客户端创建Pool指定PG数量创建RBD镜像并挂载用户写入的数据被切分为4MB大小的对象块默认每个对象通过PG映射到一组OSD主从客户端直接与主OSD通信主OSD将数据同步到从OSDOSD底层使用XFS文件系统存储对象文件2.3 创建RBD池与镜像# 创建存储池并初始化ceph osd pool create images_pool3232rbd pool init images_pool# 等同于启用rbd应用类型# 创建专用用户推荐ceph auth get-or-create client.rbd monprofile rbdosdprofile rbd-o/etc/ceph/ceph.client.rbd.keyring# 创建1GB大小的RBD镜像rbd create images_pool/webapp1--size1G# 列出镜像rbdlsimages_pool2.4 使用内核模块krbd挂载RBD在客户端安装ceph-common复制配置和密钥环# 客户端安装dnfinstall-yceph-common# 从集群复制配置和keyringscp/etc/ceph/ceph.conf /etc/ceph/ceph.client.rbd.keyring rootclient:/etc/ceph/# 映射镜像到块设备rbd map images_pool/webapp1# 生成 /dev/rbd0# 格式化并挂载mkfs.xfs /dev/rbd0mkdir/mnt/webappmount/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特性位值说明layering1支持快照和克隆striping2分条v2exclusive-lock4独占锁object-map8对象映射依赖exclusive-lockfast-diff16快速比较差异deep-flatten32扁平化所有快照journaling64日志用于mirror默认启用layering, exclusive-lock, object-map, fast-diff, deep-flatten。# 禁用/启用特性rbd feature disable images_pool/webapp1 object-map rbd featureenableimages_pool/webapp1 object-map2.7 RBD快照与克隆快照操作# 创建快照建议先卸载或冻结文件系统rbd snap create images_pool/webappsnap1# 列出快照rbd snaplsimages_pool/webapp# 回滚快照rbd snap rollback images_pool/webappsnap1# 删除快照rbd snaprmimages_pool/webappsnap1# 删除所有快照rbd snap purge images_pool/webapp克隆需要先保护快照# 保护快照rbd snap protect images_pool/webappsnap1# 创建克隆可读写rbd clone images_pool/webappsnap1 images_pool/webapp-clone# 查看克隆关系rbd children images_pool/webappsnap1# 扁平化克隆脱离父镜像rbd flatten images_pool/webapp-clone克隆后的镜像与父镜像有相同文件系统UUID需修改UUID如xfs_admin -U才能同时挂载。2.8 RBD导出与导入# 导出到文件rbdexportimages_pool/webapp webapp.img# 从文件导入rbdimportwebapp.img images_pool/webapp-backup# 通过管道跨集群复制rbdexportimages_pool/webapp -|sshremoterbd import - images_pool/webapp# 仅导出增量变化rbd export-diff --from-snap snap1 rbd/datasnap2 diff.bin# 导入增量rbd import-diff diff.bin rbd/data2.9 RBD镜像跨集群同步RBD MirrorCeph支持在两个集群之间异步复制RBD镜像用于灾备。两种模式单向active-passive主集群可读写备集群只读双向active-active两个集群均可读写需双方向同步配置要点两个集群创建同名池启用journaling特性在池上启用mirrorrbd mirror pool enable rbd pool在主集群生成引导tokenrbd 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 GatewayRGW是构建在librados之上的对象存储接口兼容Amazon S3 API使用存储桶bucket和对象OpenStack Swift API使用容器container和对象RGW守护进程radosgw提供HTTP/HTTPS服务支持多站点部署和负载均衡。3.2 RGW部署使用Ceph编排器部署RGW服务# 创建realm域radosgw-admin realm create --rgw-realmwebapp--default# 创建zonegroup区域组radosgw-admin zonegroup create --rgw-realmwebapp --rgw-zonegroupvideo--master--default# 创建zone区域radosgw-admin zone create --rgw-realmwebapp --rgw-zonegroupvideo --rgw-zonestorage1--master--default# 提交配置radosgw-admin period update--commit# 部署RGW服务3个实例端口8080ceph orch apply rgw webapp--placement3 ceph1 ceph2 ceph3--realmwebapp--zonestorage1--port8080使用YAML服务规格文件service_type:rgwservice_id:webappplacement:count:3hosts:-ceph1-ceph2-ceph3spec:rgw_frontend_port:8080应用ceph orch apply -i rgw_service.yaml3.3 RGW用户管理# 创建S3用户radosgw-admin user create--uidoperator --display-nameS3 Operator--access-key12345--secret-key67890# 列出用户radosgw-admin user list# 查看用户信息radosgw-admin user info--uidoperator# 生成新密钥radosgw-admin key create--uidoperator --gen-secret# 禁用/启用用户radosgw-admin usersuspend--uidoperator radosgw-admin userenable--uidoperator# 删除用户同时删除数据radosgw-admin userrm--uidoperator --purge-data3.4 使用AWS CLI访问RGW# 安装awsclipip3installawscli# 配置凭据endpoint指向RGW节点aws configure AWS Access Key ID:12345AWS Secret Access Key:67890# 创建bucketaws--endpointhttp://ceph1:8080 s3 mb s3://mybucket# 上传文件aws--endpointhttp://ceph1:8080 s3cpfile.txt s3://mybucket/# 列出对象aws--endpointhttp://ceph1:8080 s3lss3://mybucket/# 下载对象aws--endpointhttp://ceph1:8080 s3cps3://mybucket/file.txt ./# 删除bucket需先清空aws--endpointhttp://ceph1:8080 s3rms3://mybucket--recursiveaws--endpointhttp://ceph1:8080 s3 rb s3://mybucket3.5 使用Swift客户端访问RGW# 安装python-swiftclientpip3installpython-swiftclient# 创建子用户Swift需要radosgw-admin subuser create--uidoperator--subuseroperator:swift--accessfull# 设置环境变量exportST_AUTHhttp://ceph1:8080/auth/1.0exportST_USERoperator:swiftexportST_KEYsecret_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 mycontainer3.6 配额管理# 用户配额最大对象数radosgw-adminquotaenable--quota-scopeuser--uidoperator radosgw-adminquotaset--quota-scopeuser--uidoperator --max-objects1024# 桶配额最大容量radosgw-adminquotaenable--quota-scopebucket--bucketmybucket radosgw-adminquotaset--quota-scopebucket--bucketmybucket --max-size10G# 全局配额影响所有用户/桶radosgw-admin globalquotaset--quota-scope user --max-objects2048radosgw-admin globalquotaenable--quota-scope user radosgw-admin period update--commit3.7 多站点RGWCeph 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_meta3232ceph osd pool create cephfs_data3232# 设置元数据池副本数建议更高ceph osd poolsetcephfs_meta size3# 创建文件系统ceph fs new myfs cephfs_meta cephfs_data# 部署MDS服务ceph orch apply mds myfs--placement3 ceph1 ceph2 ceph3方式二卷部署推荐# 一行命令创建文件系统自动创建池和MDSceph fs volume create myfs--placement3 ceph1 ceph2 ceph34.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-commondnfinstall-yceph-common# 复制ceph.conf和client密钥环scprootceph1:/etc/ceph/ceph.conf /etc/ceph/scprootceph1:/etc/ceph/ceph.client.myuser.keyring /etc/ceph/# 挂载mount-tceph ceph1,ceph2,ceph3:/ /mnt/myfs-onamemyuser# 挂载子目录mount-tceph ceph1:/subdir /mnt/sub-onamemyuser,fsmyfs永久挂载/etc/fstabceph1,ceph2,ceph3:/ /mnt/myfs ceph namemyuser,_netdev 0 0FUSE挂载dnfinstall-yceph-fuse ceph-fuse-nclient.myuser /mnt/myfs# 挂载子目录ceph-fuse-nclient.myuser-r/subdir /mnt/sub4.5 CephFS快照管理快照存储在目录下的.snap隐藏目录中。# 启用快照功能默认启用ceph fssetmyfs allow_new_snapstrue# 创建快照需要用户有s权限mkdir/mnt/myfs/.snap/snap1# 恢复文件cp/mnt/myfs/.snap/snap1/deleted_file /mnt/myfs/# 删除快照rmdir/mnt/myfs/.snap/snap14.6 配额管理使用setfattr设置目录配额# 设置目录最大容量10GBsetfattr-nceph.quota.max_bytes-v10000000000/mnt/myfs/dir# 设置最大文件数1000setfattr-nceph.quota.max_files-v1000/mnt/myfs/dir# 查看配额getfattr-nceph.quota.max_bytes /mnt/myfs/dir4.7 CephFS镜像MirrorCephFS支持跨集群异步镜像基于快照。配置要点源集群和目标集群均需启用CephFS部署cephfs-mirror守护进程在目标集群创建引导token源集群导入指定需要镜像的目录五、总结本文详细介绍了Ceph的三大存储接口接口访问方式典型场景关键特性RBD块设备内核/QEMU虚拟机磁盘、数据库快照、克隆、精简配置、跨集群镜像RGWS3/Swift API对象存储、备份、静态网站多站点复制、用户配额、兼容公有云APICephFSPOSIX文件系统共享存储、HPC、容器持久化MDS多活、快照、配额、跨集群镜像通过掌握这三种存储方式你可以利用Ceph构建统一的云存储平台满足不同应用的存储需求。