当前位置: 首页 > 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.cnnetsun.cn/news/2758484.html

相关文章:

  • 3000-4000元实况拍照手机横评:4款热门手机谁更值得买?
  • 跨境电商防关联浏览器科普|独立环境为什么能防封号
  • 5个实用技巧掌握RISC-V可视化处理器模拟器
  • 用Python实战MUSIC和ESPRIT算法:从理论到代码实现DOA估计(附Pyroomacoustics示例)
  • 口述编程入门:什么是vibe-coding?从写代码到说代码的范式革命(2026程序员必学)
  • 基于数据视角分析斯洛文尼vs塞浦路斯:攻防指标量化拆解
  • 午餐吃什么?让 HarmonyOS 帮你掷骰子——一个“营养搭配抽签”小工具
  • VcXsrv:Windows系统上运行Linux GUI应用的终极解决方案
  • 线上留学论文一对一辅导机构深度测评(客观实测对比)
  • 毕设可用的中文电影对话问答系统:PyTorch版Seq2Seq+Luong注意力实现
  • 从Java字节码到破解实战:深入理解if_icmpgt与iconst指令在软件保护中的应用与对抗
  • 3分钟实现智能图像分层:layerdivider让复杂插画秒变可编辑图层
  • ov5647摄像头模块、MIPI的MCLK主时钟
  • 训练Mask-RCNN时,那个神秘的events文件怎么用TensorBoard打开看损失曲线?
  • SpringBoot+Vue旅行指南系统源码+论文
  • INT8量化致视觉语义对齐失效的分析
  • 星穹铁道自动化助手:三月七小助手完整使用指南
  • 济南全市乡镇街道及区县两级GIS矢量数据(CGCS2000坐标系,含完整SHP文件组)
  • 告别手动分析:用快马平台AI高效构建小说解析工具
  • 从芯片手册到可调模块:手把手拆解SX1308升压电路,看懂那个蓝色电位器到底在调什么
  • Qwen3.6-Plus实战指南:编程智能体如何嵌入真实开发流
  • 系统架构设计师-信息安全核心技术加解密、PKI、访问控制
  • AI工具如何3天重构薪酬体系:从数据孤岛到实时动态调薪的12步落地清单
  • 效率提升:用快马AI自动化工具快速处理付款未获批准事项
  • 实战指南:基于快马ai快速开发can总线监控与诊断上位机软件
  • 计算机毕业设计之基于python的农业人口数据管理系统设计与实现
  • 【算法分析与设计】第46篇:近似难度与不可近似性理论
  • Kimi k2.6 LeetCode 2999. 统计强大整数的数目 C++实现
  • 自动化AI算法训练服务器DLTM零代码私有化一站式AI训练平台技术解析
  • SoybeanAdmin:重新定义企业级管理后台的开发体验