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 ls、ceph 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 ls、ceph 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 tree、ceph osd stat。 -
PG 状态:
ceph pg stat、ceph 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 健康状态和集群容量,避免单点故障。