Ceph 三大存储接口深度实践与数据保护指南

块存储(RBD)

核心概念

  • RADOS 块设备提供虚拟块设备,以镜像形式存储在池中,支持精简配置、快照、克隆
  • 数据默认按 4 MiB 切分为对象,对象命名 rbd_data.<image-id>.<object-seq>
  • I/O 流程:librbd → pool → rbd image → object → PG → CRUSH 映射到 OSD → 主 OSD 写入副本

常用命令

命令 功能
rbd create 创建块设备镜像
rbd ls 列出池中镜像
rbd info 查看镜像详细信息
rbd map/unmap 映射/取消映射为本地块设备
rbd showmapped 查看已映射设备
rbd resize 调整镜像大小
rbd rm 删除镜像
rbd trash mv/ls/restore/rm 垃圾箱管理

镜像功能(Features)

  • layering、striping、exclusive-lock、object-map、fast-diff、deep-flatten、journaling、data-pool
  • 默认启用:layering, exclusive-lock, object-map, fast-diff, deep-flatten

访问方式

  • KRBD(内核模块)rbd map 映射为 /dev/rbdX,可格式化挂载;持久化需配置 /etc/ceph/rbdmap/etc/fstab,启用 rbdmap.service
  • librbd:用户空间库,供 QEMU/KVM、OpenStack 等使用,支持 COW/COR

缓存

  • 位于客户端内存(librbd),模式:writearound(默认)、writebackwritethrough
  • 关键参数:rbd_cacherbd_cache_sizerbd_cache_max_dirty

快照

  • 创建:rbd snap create <pool>/<td>@<snap>
  • 列出:rbd snap ls
  • 回滚:rbd snap rollback(需先卸载映射)
  • 删除:rbd snap rmrbd snap purge
  • 存在快照时无法删除镜像,快照为只读

克隆

  • 基于受保护的快照创建可写克隆
  • 步骤:创建快照 → rbd snap protectrbd clone
  • COW(写时复制)默认支持;COR(读时复制)需启用 rbd_clone_copy_on_read
  • 扁平化:rbd flatten 将克隆转为独立镜像

导入导出

  • rbd export / rbd import:完整镜像导入导出
  • rbd export-diff / rbd import-diff:增量导入导出(基于快照)
  • rbd diff:比较两个时间点之间的差异块

镜像(Mirroring)

  • 用于两个集群间异步复制,支持单向(主动-被动)或双向(主动-主动)
  • 模式:池模式(自动镜像池内所有镜像)或镜像模式(选择性启用)
  • 基于日志或基于快照实现
  • 关键命令:rbd mirror pool enable/disablerbd mirror pool peer bootstrap create/import

对象存储(RGW)

基础概念

  • 对象由 Key(对象名)、Metadata(元数据)、Data(数据内容)组成
  • 桶/容器为扁平命名空间,无目录树结构
  • 访问协议:Amazon S3 和 OpenStack Swift(兼容大部分 API)

RADOS 网关架构

  • 守护进程:radosgw(基于 Beast HTTP 库)
  • 域(realm)→ 区域组(zonegroup)→ 区域(zone)→ 期间(period)跟踪配置版本
  • 默认池:.rgw.root.default.rgw.control.default.rgw.meta.default.rgw.log.default.rgw.buckets.index.default.rgw.buckets.data

部署

  • 创建 realm/zonegroup/zone:radosgw-admin realm createzonegroup createzone create
  • 部署网关服务:ceph orch apply rgw <name> --realm=<name> --zone=<name> --port=<port>
  • 支持 YAML 服务规范文件(placement、count、rgw_frontend_port)
  • 删除服务:ceph orch rm rgw.<id>(不删除池中数据)

用户管理

  • 创建用户:radosgw-admin user create --uid=<id> --display-name=<name> [--access-key --secret]
  • 查看/列表:radosgw-admin user info / user list
  • 密钥管理:radosgw-admin key create/rm
  • 启用/禁用用户:radosgw-admin user enable/suspend
  • 子用户(用于 Swift):radosgw-admin subuser create

S3 接口访问

  • 客户端:awscli(pip 安装)
  • 配置:aws configure 设置 access_key/secret_key
  • 常用操作:aws s3 mb(创建桶)、cp(上传/下载)、rmlsrb(删除桶)
  • 匿名访问:wget http://<rgw-host>:<port>/<bucket>/<object>

Swift 接口访问

  • 客户端:python-swiftclient(pip 安装)
  • 环境变量:ST_AUTHST_USERST_KEY(v1.0)或 OS_*(v2.0)
  • 常用命令:swift post(创建容器)、uploaddownloadlistdelete

配额管理

  • 用户配额:radosgw-admin quota set --quota-scope=user --uid=<id> --max-objects=<n> --max-size=<bytes>
  • 桶配额:--quota-scope=bucket --bucket=<name>
  • 全局配额:radosgw-admin global quota set --quota-scope=user/bucket
  • 启用/禁用:radosgw-admin quota enable/disable

多站点对象网关

  • 用于跨集群主动/主动复制,灾难恢复
  • 元数据操作由主区域管理,数据操作为增量同步
  • 配置步骤:
    • 主集群创建 realm、zonegroup、zone,创建系统用户并绑定
    • 备集群拉取 realm 配置:radosgw-admin realm pull
    • 备集群创建非 master zone,部署 RGW
    • 验证同步:radosgw-admin sync status
  • 故障转移:提升次要区域为主区域 radosgw-admin zone modify --master

文件系统(CephFS)

概述

  • POSIX 兼容的分布式文件系统,基于 librados
  • MDS(元数据服务器)管理目录层次结构、文件元数据、客户端缓存一致性
  • 运行模式:活动 MDS + 备用 MDS(高可用)
  • 支持多文件系统(需多个 MDS)

部署

  • 手动部署
    1. 创建数据池和元数据池(至少各一个)
    2. ceph fs new <fs_name> <metadata_pool> <data_pool>
    3. ceph orch apply mds <fs_name> --placement="<hosts>"
  • 卷部署 (简化):ceph fs volume create <fs_name> --placement="..."

挂载

  • Kernel 挂载
    • 命令:mount.ceph <mon_ip>:/ /mnt/cephfs -o name=<client_id>,fs=<fs_name>
    • 支持子目录挂载:mount.ceph <mon_ip>:/subdir ...
    • 持久化:/etc/fstab 添加条目,选项 _netdev
  • FUSE 挂载
    • 安装 ceph-fuse
    • 命令:ceph-fuse -n client.<id> -r /subdir /mnt/cephfs
    • 支持配额和 ACL(需配置 user_allow_other

用户授权

  • ceph fs authorize <fs_name> client.<id> <path> <perms>
  • 权限:r(读)、w(写)、p(布局/配额)、s(快照)
  • 示例:ceph fs authorize cephfs1 client.myuser / rw

快照

  • 存储在目录下的 .snap 隐藏目录中
  • 启用/停用快照:ceph fs set <fs_name> allow_new_snaps true/false
  • 创建快照:在 .snap 下创建子目录(如 mkdir /mnt/cephfs/.snap/snap1
  • 恢复文件:从 .snap/<snap_name>/ 复制
  • 删除快照:rmdir /mnt/cephfs/.snap/<snap_name>

CephFS 镜像(Mirroring)

  • 用于两个集群间异步复制,基于快照实现增量同步
  • 前提:源和目标集群均 ≥ Pacific (v16.2.0)
  • 配置步骤:
    1. 源集群部署 cephfs-mirror 守护进程:ceph orch apply cephfs-mirror <host>
    2. 目标集群创建专用用户:ceph fs authorize cephfs client.cephfs-mirror / rwps
    3. 两端启用 mirroring 模块:ceph mgr module enable mirroring
    4. 源集群启用文件系统镜像:ceph fs snapshot mirror enable <fs_name>
    5. 目标集群创建引导令牌,源集群导入令牌
    6. 指定需要镜像的目录:ceph fs snapshot mirror add <fs_name> <path>
相关推荐
杨云龙UP4 分钟前
Toad for Oracle 调整表空间 Datafile 大小:Usage、Used Pct of Max 与 RESIZE 实战
linux·运维·服务器·数据库·oracle·dba·数据库运维
HiDev_1 小时前
【非标自动化】2、认识元器件(高速计数模块)
运维·自动化
小张同学a.2 小时前
MooseFS 分布式存储实战指南:部署、运维与 Pacemaker+SBD 高可用落地
linux·运维·分布式·pacemaker·moosefs·sbd
Csxyzj2 小时前
Nginx:企业高性能web服务器(一)
运维·服务器·nginx
Eloudy2 小时前
sunshine - ubuntu 22.04, moonlight - mac OS26 远程桌面
linux·运维·ubuntu
旗开得胜马到成功2 小时前
工控系统备份的底层技术解析:老旧协议、零停机窗口与中科热备的专项破局
运维·服务器·vr
AC赳赳老秦2 小时前
企业标签体系搭建:基于 OpenClaw 采集的多维度公开数据,构建企业画像标签库
java·运维·服务器·python·信息可视化·deepseek·openclaw
苍狗T2 小时前
K8s 集群实战:基于 Harbor 私有仓库 + cri‑dockerd 完整部署
linux·运维·云原生·容器·kubernetes
EXI-小洲2 小时前
Docker 容器部署 EMQX|MQTT 消息代理服务安装与配置教程
运维·mqtt·docker·emqx
石小千2 小时前
X86下载 ARM 架构的包
linux·运维