十、Ceph 分布式存储5-8

第 5 章 认证和授权管理(Cephx)

5.1 cephx 概述

Cephx 是 Ceph默认启用的身份认证与鉴权协议,对集群内部组件、客户端访问做加密身份校验,防止未授权访问集群。

  • 认证:确认用户是谁;
  • 授权:确认该用户拥有哪些操作权限。

不建议关闭 cephx,关闭会带来重大安全风险。

5.2 Ceph 用户分类

  1. 守护进程用户(内部服务账号) 格式:类型.ID
  • mon.xxx监视器账号、osd.0OSD 账号、mgr.xxx管理器账号、mds.xxx元数据服务器账号。
  • 集群内部各个守护进程互相通信使用,普通客户端不能使用这类账号。
  1. 客户端用户(业务访问账号) 统一前缀:client.
  • 示例:client.admin超级管理员,集群部署默认生成;业务自定义账号client.rbd_user、client.rgw。
  • 业务应用、虚拟机、外部主机访问 Ceph 集群全部使用client.*账号。

5.3 Keyring 密钥环

密钥环(keyring)文件保存用户名称 + 对应的密钥 secret,用于身份认证。

  1. 默认路径:/etc/ceph/ceph.client.admin.keyring,admin 管理员密钥环。
  2. 文件权限要求:严格限制权限,防止密钥泄露。
  3. 分发:外部客户端接入集群,需要拷贝ceph.conf配置文件 + 对应 client 账号的 keyring 密钥环。

5.4 Capability(cap 能力,权限)

cap 定义用户可以在各个组件上执行的权限,权限粒度分为mon、osd、mgr、mds四大模块。 权限标识:

  • r:读权限
  • w:写权限
  • x:执行权限
  • *:全部权限(生产尽量避免使用)

osd 的 cap 还可以做进一步限制:限制只能访问指定存储池 pool、对象前缀、命名空间。

示例:

复制代码
osd allow rw pool=pool_web, pool=rbdpool
mon allow r

最佳实践:遵循最小权限原则,业务账号不给*全部权限,按需分配池权限。

5.5 auth 身份认证管理命令

复制代码
#查看集群全部用户账号
ceph auth list

#创建用户,同时设置cap权限
ceph auth add client.rbduser mon 'allow r' osd 'allow rw pool=pool_web'

#获取或创建用户(账号存在就获取密钥,不存在新建)
ceph auth get-or-create client.rbduser mon 'allow r' osd 'allow rw pool=pool_web'

#导出用户密钥,输出到文件
ceph auth get client.rbduser -o ceph.client.rbduser.keyring

#修改已有用户权限
ceph auth caps client.rbduser mon 'allow r' osd 'allow rw pool=pool_web pool=rbd'

#删除用户
ceph auth del client.rbduser

5.6 客户端接入集群完整流程

  1. 在 Ceph 集群服务端,创建业务client.*账号,配置 cap 权限;
  2. 导出该账号的 keyring 密钥环文件;
  3. 将/etc/ceph/ceph.conf配置文件 + 导出的 keyring 拷贝到客户端主机/etc/ceph目录;
  4. 客户端安装软件包ceph‑common;
  5. 客户端即可执行 ceph/rbd/rados 命令访问集群。

5.7 安全注意事项

  1. 不要禁用 cephx 认证;
  2. 密钥环文件权限设置严格,禁止普通用户读取;
  3. 业务账号使用最小权限,不随意授予*全部权限;
  4. 不要把 admin 超级账号密钥给到业务应用。

第 6 章 块存储管理 RBD(RADOS Block Device)

RBD 即 RADOS 块设备,提供块磁盘服务,广泛用于 KVM/QEMU 虚拟机、OpenStack、Cinder 云硬盘。底层基于 librados,把块 IO 切分为固定大小对象,存储在 Ceph 存储池 Pool。

⚠️RBD只支持副本 replicated 存储池,纠删码池不能用于 RBD。

6.1 RBD 两种使用模式

  1. 内核模式 rbd 模块 :Linux 内核将 RBD 映射成本地块设备/dev/rbdX,可以直接格式化、挂载文件系统。
  2. 用户态 librbd 库 :QEMU/KVM、Cinder 直接调用 librbd 库,不需要在宿主机映射出 /dev 设备,虚拟化场景主流方式。

6.2 RBD 镜像基础管理

  1. 准备:存储池开启 RBD 功能、初始化 RBD 池

    #开启池的RBD应用标记
    ceph osd pool application enable rbd_pool rbd
    #初始化RBD池
    rbd pool init -p rbd_pool

  2. 镜像基础操作

    #创建RBD镜像,--size支持M/G/T
    rbd create -p rbd_pool --size 10G vol01

    #列出池内所有镜像
    rbd ls -p rbd_pool

    #查看镜像详细信息(大小、特性、快照)
    rbd info rbd_pool/vol01

    #扩容镜像大小
    rbd resize rbd_pool/vol01 --size 15G

    #重命名镜像
    rbd rename rbd_pool/vol01 rbd_pool/vol02

    #删除镜像
    rbd rm rbd_pool/vol02

  3. 内核映射(客户端主机执行)

    #将远端RBD镜像映射成本地/dev/rbd0块设备
    rbd map rbd_pool/vol01

    #查看本机已经映射的rbd设备
    rbd showmapped

    #取消映射
    rbd unmap /dev/rbd0

6.3 RBD 快照 Snapshot

快照保存镜像某一时间点只读副本,用于备份、回滚。

复制代码
#为镜像创建快照
rbd snap create rbd_pool/vol01@snap_202609

#查看镜像全部快照
rbd snap ls rbd_pool/vol01

#快照回滚:镜像恢复到快照时刻,快照之后的数据全部丢失!
rbd snap rollback rbd_pool/vol01@snap_202609

#删除单个快照
rbd snap rm rbd_pool/vol01@snap_202609

#清除该镜像全部快照
rbd snap purge rbd_pool/vol01

6.4 RBD 克隆 Clone

基于受保护的快照生成全新可读写镜像。克隆镜像默认依赖父快照。

复制代码
#保护快照,禁止快照被误删除(克隆的前提条件)
rbd snap protect rbd_pool/vol01@snap_202609

#基于快照克隆出新镜像clone_vol
rbd clone rbd_pool/vol01@snap_202609 rbd_pool/clone_vol01

#扁平化flatten:解除克隆镜像对父快照的依赖,完整复制数据;之后父快照可以删除
rbd flatten rbd_pool/clone_vol01

#取消快照保护(flatten完成之后执行)
rbd snap unprotect rbd_pool/vol01@snap_202609

⚠️风险:未执行 flatten 扁平化,直接删除父快照,克隆镜像会损坏不可用。

6.5 RBD 镜像导入导出(备份迁移)

复制代码
#导出RBD镜像为本地raw文件备份
rbd export rbd_pool/vol01 ./vol01.raw

#从本地raw文件导入生成RBD镜像
rbd import ./vol01.raw rbd_pool/vol01_new

6.6 RBD 镜像 Features 特性

layering(快照克隆依赖)、striping、exclusive‑lock 等。老旧 Linux 内核不支持部分高级特性,需要手动关闭对应 feature。


第 7 章 对象存储管理 RGW(RADOS‑Gateway)

RGW 是 Ceph 对象网关,提供兼容 S3、OpenStack Swift 的 RESTful 对象存储 API。

不依赖 MDS 元数据服务器,直接基于 librados 操作 RADOS 对象。支持多实例部署,前端 Nginx 负载均衡实现高可用。

7.1 RGW 核心概念

  1. User(RGW 用户) :对象存储访问账号,生成access_key和secret_key密钥,S3 客户端认证使用。
  2. Bucket 桶 :对象的容器,桶名称全局唯一,同一个集群桶名不能重复。
  3. Object 对象:桶中存储的文件,包含对象 key、数据、元数据。

7.2 cephadm 部署 RGW

复制代码
#部署RGW服务实例,服务实例名称myrgw,指定运行节点
ceph orch apply rgw myrgw --placement="ceph1,ceph2"
  • cephadm 部署 RGW 会自动创建 RGW 所需一系列内部存储池;
  • 默认监听 TCP 80 端口,浏览器 / SDK 通过http://IP访问对象网关。

7.3 RGW 用户管理 radosgw‑admin 工具

复制代码
#创建RGW用户,uid用户名,display‑name显示名称
radosgw‑admin user create --uid=user01 --display‑name="test user01"

#列出全部RGW用户
radosgw‑admin user list

#查看用户详情,输出access_key、secret_key
radosgw‑admin user info --uid=user01

#删除RGW用户
radosgw‑admin user remove --uid=user01

access_key / secret_key提供给 s3cmd、boto3、各类 S3 兼容客户端做身份认证。

7.4 Bucket 桶管理

  1. 桶配额:限制桶最大存储容量、最大对象数量。
  2. 对象版本控制:开启版本,对象覆盖保留历史版本,防止误删。
  3. 生命周期策略:设置规则,过期对象自动删除。

注意:Bucket 名称全局唯一,整个 RGW 集群不可重名。

7.5 客户端访问 RGW

支持多种 S3 兼容客户端:

  1. s3cmd 命令行工具;
  2. Python boto3 SDK 开发;
  3. 各类备份软件、对象存储网关。

7.6 RGW 高可用与异地容灾

  1. 高可用:多台节点部署 RGW 实例,前端 Nginx 做负载均衡。
  2. Multi‑Site 多站点同步:两个独立 Ceph 集群之间,实现 Bucket 对象跨集群异步复制,实现异地对象容灾。

第 8 章 文件系统存储管理 CephFS

CephFS 是POSIX 兼容并行分布式文件系统,支持多客户端同时挂载共享同一个文件目录。

组件区分:

  • MDS 元数据服务器:只管理元数据(文件名、权限、时间戳、inode);
  • 文件真实业务数据存放在 RADOS OSD 磁盘。 CephFS 需要两类存储池:元数据池、数据池,建议使用副本池,元数据池不建议纠删码池。

8.1 CephFS 组件说明

  1. MDS 元数据服务器
    • active主 MDS:处理所有元数据业务请求;
    • standby备用 MDS:主 MDS 故障自动切换,实现高可用。
    • MDS 全部故障,文件系统无法访问,但 OSD 上的实际文件数据不会丢失。
  2. 两个存储池
    • metadata 元数据池:存放 inode、目录权限元数据,对性能可靠性要求高;
    • data 数据池:存放真实的文件内容。

8.2 创建 CephFS 文件系统

复制代码
#1 创建元数据池、数据池(副本模式)
ceph osd pool create cephfs_meta 64 64 replicated
ceph osd pool create cephfs_data 128 128 replicated

#2 创建CephFS实例,绑定元数据池与数据池
ceph fs new cephfs_demo cephfs_meta cephfs_data

#3 部署MDS守护进程,指定节点,一主多备
ceph orch apply mds cephfs_demo --placement="ceph1,ceph2"

#查看文件系统信息
ceph fs ls
ceph fs status

8.3 CephFS 客户端两种挂载方式

  1. 内核挂载 mount‑t ceph(性能高)

    mount -t ceph 192.168.108.11:6789:/ /mnt/cephfs
    -o name=client.admin,secretfile=/etc/ceph/ceph.client.admin.keyring

  2. ceph‑fuse 用户态 FUSE 挂载,兼容性好,旧内核也支持

    ceph‑fuse /mnt/cephfs --name client.admin --keyring /etc/ceph/ceph.client.admin.keyring

8.4 CephFS 高级功能

  1. Subvolume 子卷:CephFS 内部逻辑隔离目录,类似存储池,可独立设置配额、快照。
  2. 目录配额:限制子卷最大存储容量、最大文件数量。
  3. 子卷快照:针对子卷打快照,用于数据备份恢复。

8.5 故障注意事项

  1. MDS 全部挂掉:文件系统挂载访问失败,但OSD 磁盘中原始文件数据完好无损,MDS 恢复后业务即可恢复。
  2. 元数据池损坏会直接造成 CephFS 严重故障,元数据池必须保证高可靠性,优先高副本。
相关推荐
你不是我我1 小时前
【AI 测评】群晖NAS部署CloudSaver:Docker安装、多源搜索、网盘转存与cpolar远程访问
运维·docker·容器
分布式存储与RustFS1 小时前
GitLab 对接 RustFS 实战:OIDC 控制台 SSO + 制品存储落 S3 对象存储
运维·云原生·开源·对象存储·分布式存储·s3
踏雪Vernon1 小时前
[OpenHarmony7.0][环境][教程]OpenHarmony 7.0源码在Docker Ubuntu22.04编译环境搭建与踩坑记录
docker·容器·eureka
霸道流氓气质2 小时前
Graph Studio Web IDE 深度实战:可视化编排、断点调试与生产级运维全指南
运维·前端·ide
YoungStudyAI11 小时前
QA的下一个自动化阶段,可能不是再写更多脚本,而是设计测试Agent
运维·自动化
分布式存储与RustFS12 小时前
纠删码到底吃掉了多少容量:EC:4、EC:8 的利用率与容错怎么算
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
遇见小修修12 小时前
3步解决打印机0x00000709报错 ,广州深圳程序员可自行排查
运维·打印机·维修·打印机报错·打印机运维·打印机故障自查
Huangjin007_14 小时前
【Linux 系统篇(二十五)】文件(二) 系统文件I/O详解
linux·运维·服务器
微小冷14 小时前
Mermaid画甘特图
运维·markdown·甘特图·mermaid·时间图