强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Ceph 存储运维完全指南 / 01 - Ceph 架构与概述

01 - Ceph 架构与概述

1.1 Ceph 简介

Ceph 是由 Sage Weil 在博士论文中提出的开源分布式存储系统,遵循 CRUSH(Controlled Replication Under Scalable Hashing) 算法,实现了无中心节点的去中心化数据分布。Ceph 由 Red Hat 主导开发,是 OpenStack、Kubernetes 等云平台的首选后端存储。

核心特性

特性说明
统一存储同时支持块存储(RBD)、文件存储(CephFS)、对象存储(RGW)
无单点故障所有组件均可水平扩展,无中心瓶颈
自我修复自动检测故障并重新平衡数据
线性扩展可从 TB 扩展到 EB 级别
CRUSH 算法无需查表,通过计算确定数据位置
开源免费LGPL 协议,社区活跃

版本演进

版本代号版本号发布时间关键特性
Luminous12.2.x2017BlueStore 稳定、管理器(MGR)
Nautilus14.2.x2019仪表盘改进、异步恢复
Octopus15.2.x2020自动伸缩 PG、改进 scrub
Pacific16.2.x2021CephFS 多活 MDS、RGW 新特性
Quincy17.2.x2022改进的 cephadm、更好的性能
Reef18.2.x2023改进的 EC、更好的 NVMe 支持
Squid19.2.x2024CephFS 多文件系统、改进的安全

1.2 Ceph 统一存储架构

Ceph 的核心设计哲学是统一存储(Unified Storage),即通过一个集群同时提供三种存储接口:

                    ┌──────────────────────────────────────┐
                    │           Ceph 集群                   │
                    │                                      │
   ┌────────────┐  │  ┌────────┐  ┌────────┐  ┌────────┐  │
   │  RBD 块存储 │──│─→│  OSD   │  │  OSD   │  │  OSD   │  │
   │ (QEMU/K8s) │  │  │ Node 1 │  │ Node 2 │  │ Node 3 │  │
   └────────────┘  │  └────────┘  └────────┘  └────────┘  │
                    │       ↑          ↑          ↑        │
   ┌────────────┐  │  ┌──────────────────────────────────┐ │
   │ CephFS 文件 │──│─→│     RADOS (可靠自主分布式对象存储)  │ │
   │   存储      │  │  └──────────────────────────────────┘ │
   └────────────┘  │       ↑                               │
                    │  ┌──────────────────────────────────┐ │
   ┌────────────┐  │  │    MON (监控) + MGR (管理器)       │ │
   │  RGW 对象  │──│─→└──────────────────────────────────┘ │
   │  存储(S3)  │  │                                      │
   └────────────┘  └──────────────────────────────────────┘

三种存储接口对比

存储类型接口协议典型场景性能特点
块存储 (RBD)块设备iSCSI / KRBD / QEMU虚拟机磁盘、数据库低延迟、高 IOPS
文件存储 (CephFS)POSIX 文件系统FUSE / 内核共享目录、日志存储元数据性能关键
对象存储 (RGW)RESTful APIS3 / Swift图片、视频、备份高吞吐、大文件优化

1.3 CRUSH 算法原理

CRUSH 是 Ceph 的灵魂,它是一种伪随机数据分布算法,通过计算而非查表来确定数据存放位置。

传统哈希 vs CRUSH

传统方式:   Client → 查元数据表 → 确定位置 → 访问数据
            (元数据服务器是瓶颈和单点故障)

CRUSH:      Client → CRUSH(placement_info) → 计算位置 → 直接访问数据
            (无中心节点,所有客户端独立计算出相同结果)

CRUSH 核心概念

概念说明示例
CRUSH Map集群的拓扑描述包含所有设备和规则
Bucket(桶)容器层级root → datacenter → room → rack → host
故障域(Failure Domain)数据隔离的层级host、rack、row、room
CRUSH Rule数据放置规则副本数、故障域约束
Placement Group (PG)数据映射的逻辑单元每个池有若干 PG

数据映射流程

File → Object → (pool_id, object_id) → CRUSH(pgid) → [OSD1, OSD2, OSD3]
         ↑                ↑                    ↑
    文件拆分为对象    通过哈希确定 PG     CRUSH 计算 OSD 列表
# 查看 CRUSH Map
ceph osd getcrushmap -o /tmp/crushmap.bin
crushtool -d /tmp/crushmap.bin -o /tmp/crushmap.txt
cat /tmp/crushmap.txt

1.4 Ceph 集群核心组件

组件全称数量建议职责
MONMonitor3 或 5(奇数)维护集群状态映射(cluster map)
OSDObject Storage Daemon每块盘一个存储数据、处理复制、恢复、再平衡
MGRManager2(Active/Standby)提供监控接口、运行管理模块
MDSMetadata Server2+ (CephFS 用)管理 CephFS 元数据
RGWRADOS Gateway2+提供 S3/Swift 对象存储接口

组件交互流程

1. Client 向 MON 获取最新 Cluster Map
2. Client 根据 CRUSH 算法计算数据位置
3. Client 直接与目标 OSD 通信读写数据
4. Primary OSD 负责复制到 Secondary OSDs
5. OSD 定期向 MON 汇报状态
6. MGR 收集指标供监控使用

1.5 适用场景与不适用场景

✅ 适用场景

场景说明使用接口
云平台后端存储OpenStack / Proxmox 虚拟机磁盘RBD
Kubernetes 持久化存储PVC 动态供给RBD / CephFS
对象存储图片/视频/备份/大数据RGW (S3)
共享文件系统多节点共享读写CephFS
大数据分析HDFS 替代方案CephFS / RADOS
邮件/数据库存储需要块设备的场景RBD

❌ 不适用场景

场景原因替代方案
超低延迟(<1ms)网络和复制开销本地 NVMe / Redis
小文件海量存储元数据开销大SeaweedFS / MinIO
3 节点以下集群可靠性不足单机存储 / 云盘
简单文件共享部署和运维复杂度高NFS / SMB
实时流处理延迟不可预测本地 SSD + 应用层优化

1.6 Ceph vs MinIO 对比分析

对比维度CephMinIO
存储类型统一存储(块+文件+对象)纯对象存储
架构分布式、去中心化分布式、去中心化
协议S3/Swift/块/文件S3 兼容
最小节点3 节点(推荐)4 节点(纠删码模式)
数据保护副本 / 纠删码纠删码(Reed-Solomon)
元数据RADOS 内部管理目录结构
小文件性能一般较好
大文件性能优秀优秀
运维复杂度
学习曲线陡峭平缓
社区/生态极其成熟(2004 年起)较新(2016 年起)
适用规模PB~EB 级TB~PB 级
企业支持Red Hat、SUSEMinIO Inc.
许可证LGPLAGPL v3

选型建议

需要块存储/文件存储? ──是──→ Ceph
        │
        否
        ↓
只需对象存储?
        │
        ├─ 规模 > 1PB 且有运维团队 → Ceph RGW
        │
        └─ 规模 < 1PB 且追求简单 → MinIO

1.7 业务场景示例

场景一:OpenStack 云平台

┌─────────────────────────────────┐
│         OpenStack               │
│  Nova ←→ Cinder ←→ Ceph RBD    │
│  Glance ←→ Ceph RBD            │
│  Swift ←→ Ceph RGW             │
└─────────────────────────────────┘

场景二:Kubernetes 持久化存储

# StorageClass 示例
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rbd
provisioner: rbd.csi.ceph.com
parameters:
  clusterID: <cluster-id>
  pool: kubernetes
  imageFormat: "2"
  imageFeatures: layering
reclaimPolicy: Delete
allowVolumeExpansion: true

场景三:视频监控存储

摄像头 → NVR → Ceph RGW (S3 API) → 生命周期管理自动降级/删除
                                      ↓
                              30天后转低频存储
                              90天后自动删除

1.8 快速验证环境

# 使用 cephadm 快速创建测试集群(单节点)
sudo cephadm bootstrap --mon-ip 192.168.1.10

# 检查集群状态
sudo ceph -s

# 预期输出
#   cluster:
#     id:     xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
#     health: HEALTH_OK
#
#   services:
#     mon: 1 daemons, quorum node1
#     mgr: node1.xxxx(active)
#
#   data:
#     pools:   1 pools, 1 pgs
#     objects: 0 objects, 0 B
#     usage:   0 B used, 0 B / 0 B avail
#     pgs:     1 active+clean

扩展阅读

  1. Ceph 官方文档
  2. CRUSH 论文原文
  3. Ceph Architecture Deep Dive
  4. Red Hat Ceph Storage Guide
  5. 《Ceph 分布式存储实战》— 李志云 等著

下一章02 - 安装与部署 — 学习使用 cephadm、手动部署、ROOK 等多种方式安装 Ceph 集群。