news 2026/9/29 2:10:57

十、Ceph 分布式存储5-8

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
十、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
  1. 镜像基础操作
#创建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
  1. 内核映射(客户端主机执行)
#将远端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
  1. 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 严重故障,元数据池必须保证高可靠性,优先高副本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 2:10:56

PyCharm 的安装与更新方法

PyCharm 是 JetBrains 公司开发的一款广受欢迎的 Python 集成开发环境(IDE),为开发者提供了强大的代码编辑、调试和项目管理功能。为了确保最佳的运行体验,用户需要了解 PyCharm 的系统要求,并掌握其安装、启动、配置和…

作者头像 李华
网站建设 2026/9/29 2:09:42

Starnet:面向边缘AI与低功耗IoT的星型去中心化网络架构

1. 项目概述:Starnet不是某个具体产品,而是一类分布式网络架构的统称最近在技术社区和开发者群聊里,“starnet”这个词出现频率明显升高,但翻遍主流技术文档、开源平台和厂商白皮书,都找不到一个叫“Starnet”的官方项…

作者头像 李华
网站建设 2026/9/29 2:09:38

CentOS 7.x 配置 Django、Nginx 与 uWSGI 服务

在 CentOS 7.x 上部署 Django Nginx uWSGI 是一种高效且稳定的 Web 应用部署方案。为了简化安装与配置流程,本指南提供了 最直接、最简洁 的方式,帮助开发者快速完成 Nginx 安装、uWSGI 配置、Django 运行以及 DNS 设置,确保项目能够稳定运…

作者头像 李华
网站建设 2026/9/29 2:08:50

Java连接Redis报SocketTimeoutException?一文拆解超时根因与排查方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:08:27

FastSVDD加速实战:随机特征映射与增量更新实现实时异常检测

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/29 2:06:51

wecom-cli完整指南:让人类与AI Agent都能在终端操作企业微信的官方CLI

wecom-cli完整指南:让人类与AI Agent都能在终端操作企业微信的官方CLI 【免费下载链接】wecom-cli 企业微信开放平台命令行工具 — 让人类和 AI Agent 都能在终端中操作企业微信 项目地址: https://gitcode.com/gh_mirrors/we/wecom-cli wecom-cli 是企业微信…

作者头像 李华