ceph技术

Ceph 分布式存储系统全面总结(Markdown 版)

一、Ceph 核心概述

(一)基础定义与特性

Ceph 是一款开源、分布式、软件定义存储系统,具备高可用性、强扩展性和易用性,支持海量数据存储,可部署在 x86 或 ARM 架构的通用服务器上,且支持同一集群内混合架构部署。其核心优势包括:

  • 采用 RADOS(可靠的自主分布式对象存储)系统,所有数据以对象形式存储在存储池中。

  • 去中心化设计,客户端通过 CRUSH 算法自行计算对象存储位置,无需中央查找表。

  • 集群支持自动扩展、数据再平衡和故障自动恢复。

  • 提供统一存储能力,支持对象存储、块存储和文件系统存储三种访问模式。

(二)历史与版本

  • 2003 年由 Sage Weil 作为博士项目开发,2006 年遵循 LGPL 协议开源。

  • 2014 年被红帽收购,企业版与社区 LTS 版本生命周期保持一致,红帽提供 36 个月专业支持。

  • 版本命名采用代号制,当前活跃版本包括 Reef(18.2.x)、Quincy(17.2.x)、Pacific(16.2.x)等,LTS 版本支持周期约 2 年,版本格式 x.y.z 中 x 为发行周期,y=2 表示稳定版。

(三)适用场景

高性能计算、日志留存、智慧城市、虚拟化 / 云平台、资源池化、数据库存储等场景。

二、Ceph 架构组件

(一)核心组件

1. RADOS(核心存储后端)

Ceph 存储系统的基础,提供分布式对象存储、高可用性、自我修复和管理能力,所有数据无论类型均以对象形式存储。

2. 核心守护进程
  • Monitor(MON):维护集群状态映射(含 Monitor Map、OSD Map 等),需配置奇数个以确保仲裁,超过半数正常运行集群方可提供服务。

  • OSD(对象存储设备):存储数据并处理复制、恢复和再平衡,单个存储服务器可运行多个 OSD 进程,通过 CRUSH 算法与客户端协作定位对象。

  • Manager(MGR):跟踪集群运行时指标,提供 Web 仪表盘和 REST API,支持将状态导出到外部监控系统(如 Zabbix),建议部署至少两个保证高可用。

  • MDS(元数据服务器):仅为 CephFS 提供元数据管理(所有权、时间戳等),支持 POSIX 文件系统接口,客户端通过 MDS 获取文件位置信息后直接与 OSD 交互。

(二)集群映射(Cluster Map)

由 MON 维护的五类核心映射,定义集群拓扑与状态:

  • Monitor Map:包含集群 fsid、MON 节点地址与端口。

  • OSD Map:包含池列表、副本大小、OSD 状态等。

  • Placement Group Map:包含 PG 版本、状态及数据使用统计。

  • CRUSH Map:定义存储设备、故障域层次结构及数据放置规则。

  • MDS Map:存储 CephFS 元数据相关配置。

(三)访问方式

访问方式 核心组件 适用场景 关键特性
原生 API(librados) librados 库 高性能需求场景 支持多语言绑定(C++/Java/Python 等),性能最优
块设备(RBD) RBD 镜像、librbd 虚拟化(KVM/QEMU)、云平台(OpenStack Cinder) 支持快照、克隆,数据分散存储实现并行访问
对象网关(RADOSGW) librgw 镜像存储、备份服务、文件共享 兼容 Amazon S3 和 OpenStack Swift API,支持负载均衡
文件系统(CephFS) libcephfs、MDS 并行文件共享场景 兼容 POSIX 接口,支持快照和配额管理

三、Ceph 部署指南

(一)部署方式

部署方式 适用版本 特点
Cephadm Octopus 及以上 基于容器部署,支持命令行和图形界面管理,部署简单
Rook Nautilus 及以上 基于 Kubernetes 部署,可通过 K8s 管理组件 Pod
ceph-ansible 全版本 通过 Ansible 自动化部署,适合大规模集群
手动部署 全版本 灵活度高但步骤繁琐,不推荐生产使用

(二)最小硬件规格

组件 CPU 内存 存储空间 网络 其他要求
ceph-osd 最少 1 核 4G 整块硬盘 至少 1G,推荐 10G 需 1 个 SSD 分区用于高速存储
ceph-mon 最少 2 核 2-4G 60G 1G+ -
ceph-mds 最少 2 核 最少 2G 1M 1G+ -
ceph-mgr 最少 1 核 2G+ 10G+ 1G+ -

(三)默认服务端口

服务名称 端口 描述
Monitor(MON) 6789/TCP、3300/TCP 集群内部通信端口
OSD 6800-7300/TCP 每个 OSD 占用 4 个端口(客户端通信、数据同步、心跳等)
MDS 6800-7300/TCP 元数据服务器通信
MGR(仪表盘) 8443/TCP SSL 方式访问 Web 界面
RGW 80/TCP 对象网关通信,默认端口可配置
Prometheus 模块 9283/TCP 与 Prometheus 插件通信
Grafana 3000/TCP 监控数据可视化界面

(四)典型部署流程(Cephadm 方式)

1. 环境准备(所有节点)
  • 配置主机名解析、关闭 SELinux 和防火墙。

  • 配置 YUM 仓库(推荐阿里云镜像),安装基础软件包(bash-completion、vim、chrony 等)。

  • 配置时间同步,安装 cephadm(自动安装 podman 容器引擎)。

  • 提前下载 Ceph 相关镜像(ceph、ceph-grafana、node-exporter 等)。

2. 集群初始化(引导节点)
复制代码
cephadm bootstrap --mon-ip 192.168.108.11 --allow-fqdn-hostname \\

\--initial-dashboard-user admin --initial-dashboard-password laogao@123 \\

\--dashboard-password-noupdate
  • bootstrap 完成后,Dashboard 可通过https://ceph1.laogao.cloud:8443访问。

  • 生成的配置文件和密钥环存储在/etc/ceph目录。

3. 节点扩展
  • 获取集群公钥:ceph cephadm get-pub-key > ~/ceph.pub

  • 推送公钥到目标节点实现免密登录:ssh-copy-id -f -i ~/ceph.pub root@目标节点

  • 添加节点到集群:ceph orch host add 节点名

4. 组件部署
  • 部署 MON 和 MGR:通过标签指定部署节点,ceph orch apply mon --placement="label:_admin"

  • 部署 OSD:ceph orch apply osd --all-available-devices(自动将闲置硬盘添加为 OSD)。

  • 验证集群状态:ceph -s,显示HEALTH_OK即为正常。

四、核心功能配置与管理

(一)集群配置管理

1. 配置优先级

命令行参数 > 环境变量 > 本地配置文件 > 集中配置数据库 > 编译默认值。

2. 配置文件

默认路径为/etc/ceph/ceph.conf,采用 INI 格式,支持[global][mon][osd]等分区配置,支持元变量(cluster、cluster、cluster、type、$id 等)简化配置。

3. 集中配置数据库操作
  • 查看配置:ceph config ls(列出所有配置条目)、ceph config get 组件类型.实例 配置项

  • 修改配置:ceph config set 组件类型.实例 配置项 值

  • 回滚配置:ceph config reset 版本号

  • 运行时修改:ceph tell 组件类型.实例 config set 配置项 值(临时生效,重启失效)。

(二)存储池(Pool)管理

1. 基础概念
  • 池是 Ceph 集群的逻辑分区,用于分组存储对象,每个池关联特定数量的放置组(PG)。

  • PG(Placement Group)是对象与 OSD 之间的抽象层,通过哈希算法将对象映射到 PG,再由 CRUSH 算法映射到 OSD 组。

2. 池创建与配置
  • 创建复本池:ceph osd pool create 池名 PG数 PGP数 replicated [CRUSH规则名]

  • 创建纠删码池:ceph osd pool create 池名 PG数 PGP数 erasure [配置文件名],纠删码池存储效率更高(如 k=4+m=2 仅需 1.5 倍存储空间)。

  • 核心配置:修改复本数(ceph osd pool set 池名 size 2)、设置配额(ceph osd pool set-quota 池名 max_objects 100000)、启用应用类型(ceph osd pool application enable 池名 rbd)。

3. 池操作命令
  • 列出池:ceph osd pool lsceph osd pool ls detail(含详细配置)。

  • 重命名:ceph osd pool rename 旧名 新名

  • 删除池:需先开启删除权限(ceph config set mon mon_allow_pool_delete true),再执行ceph osd pool rm 池名 池名 --yes-i-really-really-mean-it

(三)认证与授权

1. Cephx 协议

Ceph 默认使用 cephx 协议进行身份验证,通过共享密钥加密通信,支持守护进程间、客户端与集群间的身份验证。

2. 用户管理命令
  • 创建用户:ceph auth add client.用户名 权限ceph auth get-or-create client.用户名 权限 -o 密钥环文件

  • 授权配置:ceph auth caps client.用户名 mon 'allow r' osd 'allow rw pool=池名'(细粒度控制权限)。

  • 导出 / 导入密钥:ceph auth export 用户名 -o 文件名ceph auth import -i 文件名

  • 查看用户:ceph auth lsceph auth get 用户名

(四)三种存储模式实战

1. 块存储(RBD)
  • 创建 RBD 池:ceph osd pool create images_pool 32 32 + rbd pool init images_pool

  • 创建镜像:rbd create images_pool/webapp --size 1G

  • 映射与使用:rbd map images_pool/webapp → 格式化(mkfs.xfs /dev/rbd0)→ 挂载(mount /dev/rbd0 /webapp)。

  • 快照与克隆:创建快照(rbd snap create 池名/镜像名@snap名)→ 保护快照(rbd snap protect)→ 克隆(rbd clone)。

  • 镜像复制:rbd export(导出镜像)、rbd import(导入镜像),支持跨集群复制。

2. 对象存储(RADOSGW)
  • 部署流程:创建域(radosgw-admin realm create)→ 创建区域组(radosgw-admin zonegroup create)→ 创建区域(radosgw-admin zone create)→ 部署 RGW 服务(ceph orch apply rgw 服务名 --placement 节点 --port 8080)。

  • 用户管理:创建网关用户(radosgw-admin user create --uid=用户名 --display-name=显示名),支持生成 S3/Swift 兼容密钥。

  • 访问方式:通过 AWS CLI 或 Swift 客户端访问,支持桶创建(aws s3 mb s3://桶名 --endpoint=http://节点:8080)、对象上传下载等操作。

  • 配额管理:支持用户级、桶级和全局级配额,限制对象数量或存储容量。

3. 文件系统存储(CephFS)
  • 部署条件:至少需要一个元数据池和一个数据池,需部署 MDS 守护进程。

  • 创建文件系统:ceph fs volume create cephfs2 --placement 节点(卷部署方式)或手动创建池 +ceph fs new

  • 挂载方式:

    • Kernel 挂载:mount.ceph 节点IP:/ /挂载点 -o name=用户名,fs=文件系统名

    • FUSE 挂载:ceph-fuse -n client.用户名 /挂载点(需安装 ceph-fuse 包)。

  • 快照管理:在.snap目录创建子目录生成快照,支持文件恢复和快照删除。

五、高级特性与运维

(一)高可用与灾备

  • 多站点部署:支持跨集群数据复制,通过域(Realm)、区域组(Zone Group)、区域(Zone)实现,支持主动 - 主动或主动 - 被动模式。

  • RBD Mirrors:实现两个集群间 RBD 镜像同步,支持单向和双向复制,用于灾难恢复。

  • CephFS Mirror:基于快照的文件系统异步复制,支持增量同步,需部署 cephfs-mirror 守护进程。

(二)监控与运维工具

  • Ceph Dashboard:MGR 内置 Web 界面,端口 8443,支持集群状态监控、用户管理、配置修改等操作。

  • 命令行工具

    • 集群状态:ceph status(简写ceph -s)。

    • OSD 状态:ceph osd treeceph osd stat

    • PG 状态:ceph pg statceph pg dump

  • 第三方集成:支持 Prometheus+Grafana 监控,MGR 可导出指标到 Zabbix 等监控系统。

(三)常见故障处理

  • OSD 故障 :集群自动触发数据恢复,替换故障磁盘后通过ceph orch device zap清理磁盘,重新添加 OSD。

  • MON 故障:确保剩余 MON 数量超过半数,新增 MON 后自动同步集群映射。

  • 数据不一致 :使用ceph pg repair PGID修复不一致的 PG,通过ceph health detail查看故障详情。

六、关键对比与总结

(一)存储模式对比

存储模式 优点 缺点 适用场景
块存储(RBD) 性能优、支持快照克隆 不支持跨平台共享 虚拟机存储、数据库存储
对象存储(RGW) 扩展性强、兼容 S3/Swift 不支持 POSIX 接口 备份服务、海量文件存储
文件系统(CephFS) 兼容 POSIX、支持共享 元数据性能依赖 MDS 并行文件处理、容器共享存储

(二)核心优势总结

  • 去中心化架构,无单点故障,可用性高。

  • 线性扩展能力,支持从 TB 级到 EB 级存储容量扩展。

  • 统一存储架构,降低多存储系统运维复杂度。

  • 开源免费,企业版提供商业支持,适配多种硬件环境。

(三)部署与运维建议

  • 生产环境推荐 Cephadm 或 Rook 部署,简化运维。

  • MON 节点至少 3 个,OSD 节点根据存储需求扩容,MGR 部署 2 个保证高可用。

  • 存储池 PG 数量需合理规划,遵循 "OSD 数 ×100 / 最大副本数" 原则,结果取 2 的幂次方。

  • 定期备份集群配置,监控 OSD 健康状态和集群容量,避免单点故障。

相关推荐
yyyyy_abc1 天前
ceph学习笔记
笔记·ceph·学习
自由且自律2 天前
ceph实战,基于docker部署
运维·ceph·docker·容器·云计算
老wang你好4 天前
Ceph存储全攻略:RBD、CephFS与RGW详解
ceph
珂玥c7 天前
Ceph集群新增osd
ceph
老wang你好8 天前
Ceph分布式存储系统全解析
ceph
一个行走的民21 天前
分布式系统中 Map 增量(Delta)是否需要持久化
ceph
一个行走的民22 天前
BlueStore 核心原理与关键机制
ceph
奋斗的小青年I24 天前
Proxmox VE Ceph 超融合集群落地实战
windows·ceph·vmware·pve·超融合·proxmox
一个行走的民25 天前
深度剖析 Ceph PG 分裂机制:原理、底层、实操、影响、线上避坑(最全完整版)
ceph·算法
一个行走的民25 天前
Ceph 核心概念精讲:彻底搞懂 PG、PGP、pg_num、pgp_num
ceph