第 5 章 认证和授权管理(Cephx)
5.1 cephx 概述
Cephx 是 Ceph默认启用的身份认证与鉴权协议,对集群内部组件、客户端访问做加密身份校验,防止未授权访问集群。
- 认证:确认用户是谁;
- 授权:确认该用户拥有哪些操作权限。
不建议关闭 cephx,关闭会带来重大安全风险。
5.2 Ceph 用户分类
- 守护进程用户(内部服务账号)格式:
类型.ID
mon.xxx监视器账号、osd.0OSD 账号、mgr.xxx管理器账号、mds.xxx元数据服务器账号。- 集群内部各个守护进程互相通信使用,普通客户端不能使用这类账号。
- 客户端用户(业务访问账号)统一前缀:
client.
- 示例:
client.admin超级管理员,集群部署默认生成;业务自定义账号client.rbd_user、client.rgw。 - 业务应用、虚拟机、外部主机访问 Ceph 集群全部使用
client.*账号。
5.3 Keyring 密钥环
密钥环(keyring)文件保存用户名称 + 对应的密钥 secret,用于身份认证。
- 默认路径:
/etc/ceph/ceph.client.admin.keyring,admin 管理员密钥环。 - 文件权限要求:严格限制权限,防止密钥泄露。
- 分发:外部客户端接入集群,需要拷贝
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.rbduser5.6 客户端接入集群完整流程
- 在 Ceph 集群服务端,创建业务
client.*账号,配置 cap 权限; - 导出该账号的 keyring 密钥环文件;
- 将
/etc/ceph/ceph.conf配置文件 + 导出的 keyring 拷贝到客户端主机/etc/ceph目录; - 客户端安装软件包
ceph‑common; - 客户端即可执行 ceph/rbd/rados 命令访问集群。
5.7 安全注意事项
- 不要禁用 cephx 认证;
- 密钥环文件权限设置严格,禁止普通用户读取;
- 业务账号使用最小权限,不随意授予
*全部权限; - 不要把 admin 超级账号密钥给到业务应用。
第 6 章 块存储管理 RBD(RADOS Block Device)
RBD 即 RADOS 块设备,提供块磁盘服务,广泛用于 KVM/QEMU 虚拟机、OpenStack、Cinder 云硬盘。底层基于 librados,把块 IO 切分为固定大小对象,存储在 Ceph 存储池 Pool。
⚠️RBD只支持副本 replicated 存储池,纠删码池不能用于 RBD。
6.1 RBD 两种使用模式
- 内核模式 rbd 模块:Linux 内核将 RBD 映射成本地块设备
/dev/rbdX,可以直接格式化、挂载文件系统。 - 用户态 librbd 库:QEMU/KVM、Cinder 直接调用 librbd 库,不需要在宿主机映射出 /dev 设备,虚拟化场景主流方式。
6.2 RBD 镜像基础管理
- 准备:存储池开启 RBD 功能、初始化 RBD 池
#开启池的RBD应用标记 ceph osd pool application enable rbd_pool rbd #初始化RBD池 rbd pool init -p rbd_pool- 镜像基础操作
#创建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- 内核映射(客户端主机执行)
#将远端RBD镜像映射成本地/dev/rbd0块设备 rbd map rbd_pool/vol01 #查看本机已经映射的rbd设备 rbd showmapped #取消映射 rbd unmap /dev/rbd06.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/vol016.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_new6.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 核心概念
- User(RGW 用户):对象存储访问账号,生成
access_key和secret_key密钥,S3 客户端认证使用。 - Bucket 桶:对象的容器,桶名称全局唯一,同一个集群桶名不能重复。
- 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 桶管理
- 桶配额:限制桶最大存储容量、最大对象数量。
- 对象版本控制:开启版本,对象覆盖保留历史版本,防止误删。
- 生命周期策略:设置规则,过期对象自动删除。
注意:Bucket 名称全局唯一,整个 RGW 集群不可重名。
7.5 客户端访问 RGW
支持多种 S3 兼容客户端:
- s3cmd 命令行工具;
- Python boto3 SDK 开发;
- 各类备份软件、对象存储网关。
7.6 RGW 高可用与异地容灾
- 高可用:多台节点部署 RGW 实例,前端 Nginx 做负载均衡。
- Multi‑Site 多站点同步:两个独立 Ceph 集群之间,实现 Bucket 对象跨集群异步复制,实现异地对象容灾。
第 8 章 文件系统存储管理 CephFS
CephFS 是POSIX 兼容并行分布式文件系统,支持多客户端同时挂载共享同一个文件目录。
组件区分:
- MDS 元数据服务器:只管理元数据(文件名、权限、时间戳、inode);
- 文件真实业务数据存放在 RADOS OSD 磁盘。 CephFS 需要两类存储池:元数据池、数据池,建议使用副本池,元数据池不建议纠删码池。
8.1 CephFS 组件说明
- MDS 元数据服务器
active主 MDS:处理所有元数据业务请求;standby备用 MDS:主 MDS 故障自动切换,实现高可用。- MDS 全部故障,文件系统无法访问,但 OSD 上的实际文件数据不会丢失。
- 两个存储池
- 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 status8.3 CephFS 客户端两种挂载方式
- 内核挂载 mount‑t ceph(性能高)
mount -t ceph 192.168.108.11:6789:/ /mnt/cephfs \ -o name=client.admin,secretfile=/etc/ceph/ceph.client.admin.keyring- ceph‑fuse 用户态 FUSE 挂载,兼容性好,旧内核也支持
ceph‑fuse /mnt/cephfs --name client.admin --keyring /etc/ceph/ceph.client.admin.keyring8.4 CephFS 高级功能
- Subvolume 子卷:CephFS 内部逻辑隔离目录,类似存储池,可独立设置配额、快照。
- 目录配额:限制子卷最大存储容量、最大文件数量。
- 子卷快照:针对子卷打快照,用于数据备份恢复。
8.5 故障注意事项
- MDS 全部挂掉:文件系统挂载访问失败,但OSD 磁盘中原始文件数据完好无损,MDS 恢复后业务即可恢复。
- 元数据池损坏会直接造成 CephFS 严重故障,元数据池必须保证高可靠性,优先高副本。