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>
相关推荐
蝶豆花2 小时前
基于商城系统的功能,自动化,性能-测试报告
运维·自动化
袋鼠云数栈2 小时前
从前端到基础设施,ACOS 如何打通企业全链路可观测
运维·前端·人工智能·数据治理·数据智能
黎阳之光2 小时前
视频孪生智护供水生命线:黎阳之光赋能医疗与园区水务高质量升级
运维·物联网·算法·安全·数字孪生
志栋智能3 小时前
AI驱动无代码:降低巡检超自动化的门槛
大数据·运维·网络·人工智能·自动化
AOwhisky3 小时前
Ceph系列第六期:Ceph 文件系统(CephFS)精讲
linux·运维·网络·笔记·ceph
Land03294 小时前
RPA网页自动化:元素定位失效的7种根因与XPath鲁棒性改造方案
运维·selenium·自动化·rpa
zh_yt4 小时前
auto-connect remote ssh server
运维·ssh
Lumbrologist4 小时前
【零基础部署】Docker 部署 AutoGen 多 Agent 对话框架保姆级教程
运维·docker·容器
feng14566 小时前
OpenSREClaw - AI 本体论思维
运维·人工智能