十、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 严重故障,元数据池必须保证高可靠性,优先高副本。
相关推荐
一个天蝎座 白勺 程序猿6 小时前
KingbaseES数据库归档重做日志文件管理:从配置到运维的实战指南
运维·数据库·oracle·kingbasees·金仓数据库
分布式存储与RustFS10 小时前
镜像仓库的层别堆本地盘:用 RustFS 给 Docker Registry 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
陈希12310 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
@兽血沸腾12 小时前
Windows系统安装Jenkins部署应用至远程Windows服务器操作指南
运维·服务器·jenkins
闲云自留地17 小时前
K8s 的记忆大脑!ETCD 集群部署、etcdctl 命令与备份恢复全通关
容器·kubernetes·etcd
讯捷蓝达17 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落19 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
lisanmengmeng20 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮21 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹21 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器