当前位置: 首页 > news >正文

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数据写入流程

  1. 客户端创建Pool,指定PG数量
  2. 创建RBD镜像并挂载
  3. 用户写入的数据被切分为4MB大小的对象块(默认)
  4. 每个对象通过PG映射到一组OSD(主+从)
  5. 客户端直接与主OSD通信,主OSD将数据同步到从OSD
  6. OSD底层使用XFS文件系统存储对象文件

2.3 创建RBD池与镜像

# 创建存储池并初始化ceph osd pool create images_pool3232rbd 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--size1G# 列出镜像rbdlsimages_pool

2.4 使用内核模块(krbd)挂载RBD

在客户端安装ceph-common,复制配置和密钥环:

# 客户端安装dnfinstall-yceph-common# 从集群复制配置和keyringscp/etc/ceph/ceph.conf /etc/ceph/ceph.client.rbd.keyring root@client:/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分条v2
exclusive-lock4独占锁
object-map8对象映射(依赖exclusive-lock)
fast-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-map

2.7 RBD快照与克隆

快照操作

# 创建快照(建议先卸载或冻结文件系统)rbd snap create images_pool/webapp@snap1# 列出快照rbd snaplsimages_pool/webapp# 回滚快照rbd snap rollback images_pool/webapp@snap1# 删除快照rbd snaprmimages_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导出与导入

# 导出到文件rbdexportimages_pool/webapp webapp.img# 从文件导入rbdimportwebapp.img images_pool/webapp-backup# 通过管道跨集群复制rbdexportimages_pool/webapp -|sshremote"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):两个集群均可读写,需双方向同步

配置要点:

  1. 两个集群创建同名池,启用journaling特性
  2. 在池上启用mirror:rbd mirror pool enable rbd pool
  3. 在主集群生成引导token:rbd mirror pool peer bootstrap create --site-name prod rbd > token
  4. 在备集群导入token并部署rbd-mirror守护进程
  5. 验证状态:rbd mirror pool statusrbd 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:rgwservice_id:webappplacement:count:3hosts:-ceph1-ceph2-ceph3spec: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 usersuspend--uid=operator radosgw-admin userenable--uid=operator# 删除用户(同时删除数据)radosgw-admin userrm--uid=operator --purge-data

3.4 使用AWS CLI访问RGW

# 安装awsclipip3installawscli# 配置凭据(endpoint指向RGW节点)aws configure AWS Access Key ID:12345AWS Secret Access Key:67890# 创建bucketaws--endpoint=http://ceph1:8080 s3 mb s3://mybucket# 上传文件aws--endpoint=http://ceph1:8080 s3cpfile.txt s3://mybucket/# 列出对象aws--endpoint=http://ceph1:8080 s3lss3://mybucket/# 下载对象aws--endpoint=http://ceph1:8080 s3cps3://mybucket/file.txt ./# 删除bucket(需先清空)aws--endpoint=http://ceph1:8080 s3rms3://mybucket--recursiveaws--endpoint=http://ceph1:8080 s3 rb s3://mybucket

3.5 使用Swift客户端访问RGW

# 安装python-swiftclientpip3installpython-swiftclient# 创建子用户(Swift需要)radosgw-admin subuser create--uid=operator--subuser=operator:swift--access=full# 设置环境变量exportST_AUTH=http://ceph1:8080/auth/1.0exportST_USER=operator:swiftexportST_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-adminquotaenable--quota-scope=user--uid=operator radosgw-adminquotaset--quota-scope=user--uid=operator --max-objects=1024# 桶配额(最大容量)radosgw-adminquotaenable--quota-scope=bucket--bucket=mybucket radosgw-adminquotaset--quota-scope=bucket--bucket=mybucket --max-size=10G# 全局配额(影响所有用户/桶)radosgw-admin globalquotaset--quota-scope user --max-objects=2048radosgw-admin globalquotaenable--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_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--placement="3 ceph1 ceph2 ceph3"

方式二:卷部署(推荐)

# 一行命令创建文件系统,自动创建池和MDSceph 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-commondnfinstall-yceph-common# 复制ceph.conf和client密钥环scproot@ceph1:/etc/ceph/ceph.conf /etc/ceph/scproot@ceph1:/etc/ceph/ceph.client.myuser.keyring /etc/ceph/# 挂载mount-tceph ceph1,ceph2,ceph3:/ /mnt/myfs-oname=myuser# 挂载子目录mount-tceph ceph1:/subdir /mnt/sub-oname=myuser,fs=myfs

永久挂载(/etc/fstab):

ceph1,ceph2,ceph3:/ /mnt/myfs ceph name=myuser,_netdev 0 0

FUSE挂载

dnfinstall-yceph-fuse ceph-fuse-nclient.myuser /mnt/myfs# 挂载子目录ceph-fuse-nclient.myuser-r/subdir /mnt/sub

4.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/snap1

4.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/dir

4.7 CephFS镜像(Mirror)

CephFS支持跨集群异步镜像(基于快照)。配置要点:

  1. 源集群和目标集群均需启用CephFS
  2. 部署cephfs-mirror守护进程
  3. 在目标集群创建引导token,源集群导入
  4. 指定需要镜像的目录

五、总结

本文详细介绍了Ceph的三大存储接口:

接口访问方式典型场景关键特性
RBD块设备(内核/QEMU)虚拟机磁盘、数据库快照、克隆、精简配置、跨集群镜像
RGWS3/Swift API对象存储、备份、静态网站多站点复制、用户配额、兼容公有云API
CephFSPOSIX文件系统共享存储、HPC、容器持久化MDS多活、快照、配额、跨集群镜像

通过掌握这三种存储方式,你可以利用Ceph构建统一的云存储平台,满足不同应用的存储需求。

http://www.jsqmd.com/news/952129/

相关文章:

  • 华夏之光永存:量子计算机为何迟迟无法商用
  • 避坑指南:Quartus II 16.0安装后License配置失败的常见原因与解决方案
  • 大型下载站部署美国大带宽服务器成本高吗?
  • 2026年最新武汉科思特仪器|在线腐蚀监检测设备实力剖析 - 品牌评测官
  • 深圳 ai 智能开发公司哪家便宜:独家排名最新深度推荐 - 17322238651
  • 终极Windows系统清理工具:免费快速解决C盘爆红问题
  • 计算机毕业设计之基于LSTM模型的NBA小前锋综合实力分析与预测
  • Bootstrap-Select 企业级下拉组件架构解析:高性能UI组件实现原理与最佳实践
  • STM32平衡小车PID调参避坑实录:从‘怀疑人生’到稳定站立的5个关键步骤
  • 深圳办公 ai 培训机构哪家评价好:最新排名专业精选指南 - 19120507004
  • vue-router-link实现导航高亮效果
  • 单招培训
  • 2026年当下,如何甄别一家真正可靠的废钢回收企业? - 2026年企业资讯
  • 从防晒霜到光伏板:生活中无处不在的‘吸收、反射、透射’原理大揭秘
  • 图像的视觉显著性模型理论与方法解析【附数据】
  • 外贸独立站技术复盘:无货源代购订单履约技术实现
  • Spotify AI战略能否破局音乐流媒体同质化?AI音乐商业化三条路径解析
  • 斐波那契渐近线为何是Y=X+d
  • MTKClient深度解析:5步搞定联发科设备刷机救砖与底层调试
  • 深圳办公 ai 培训机构哪家经验丰富:TOP5 官方测评揭秘 - 17322238651
  • 2026正规输送机服务商场景适配指南:靠谱非标定制这样选
  • 保姆级教程:Quartus II 16.0在Win10/Win11下的完整安装与破解流程(含网卡ID获取与License配置)
  • TrollInstallerX:iPhone 6s在iOS 15.8.3安装失败的终极解决方案
  • 从零到像素艺术大师:Pixelorama完全指南
  • 画个饼,给数据点颜色看看——在 HarmonyOS 模拟器上手搓一个饼图/环形图组件
  • 提升stm32f103c8t6开发效率:用快马一键生成uart、adc、定时器驱动模块
  • 深圳办公 ai 培训机构哪家值得合作:权威深度 TOP5 推 - 13724980961
  • java键盘录入
  • 深圳办公 ai 培训机构哪家口碑好:权威榜单专业测评攻略 - 19120507004
  • DMXAPI:企业大模型 API 集中采购服务商,优化企业 AI 采购全链路成本