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>
相关推荐
吴声子夜歌7 小时前
Shell编程——函数
linux·运维·shell
PC2005-cloud7 小时前
Qdrant 连接失败排查:localhost 解析到 __1,而 Docker 只绑了 IPv4
运维·docker·容器
电子制造自留地7 小时前
AI服务器PCB的超低损耗材料选型逻辑
运维·服务器·人工智能·科技·制造·科普·pcb工艺
蓝速科技8 小时前
会议室门牌触控预约选型与落地实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
PatrickYao04228 小时前
Linux安装UV
linux·运维·uv
蓝速科技8 小时前
企业展厅数字人导览效果提升与选型实战指南丨蓝速科技
大数据·运维·数据库·人工智能·科技·microsoft
顶点多余8 小时前
面试题总结 ---Linux篇
linux·运维·服务器
normanhere8 小时前
防火墙来回路径不一致导致的网速异常
运维·服务器·网络
zx_741484819 小时前
【Linux入门】Shell 与第一个 Shell 脚本:认识命令行解释器,写出 Hello World
linux·运维
2601_962218479 小时前
万象生鲜系统智能报表引擎技术为生鲜企业提供数字化经营分析能力
大数据·运维·微服务·云原生·架构