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>
相关推荐
Avan_菜菜8 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB1 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220703 天前
如何搭建本地yum源(上)
运维
大树886 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠6 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质6 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工6 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智6 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_6 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化