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

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 协议,社区活跃

版本演进

版本代号 版本号 发布时间 关键特性
Luminous 12.2.x 2017 BlueStore 稳定、管理器(MGR)
Nautilus 14.2.x 2019 仪表盘改进、异步恢复
Octopus 15.2.x 2020 自动伸缩 PG、改进 scrub
Pacific 16.2.x 2021 CephFS 多活 MDS、RGW 新特性
Quincy 17.2.x 2022 改进的 cephadm、更好的性能
Reef 18.2.x 2023 改进的 EC、更好的 NVMe 支持
Squid 19.2.x 2024 CephFS 多文件系统、改进的安全

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 API S3 / 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 集群核心组件

组件 全称 数量建议 职责
MON Monitor 3 或 5(奇数) 维护集群状态映射(cluster map)
OSD Object Storage Daemon 每块盘一个 存储数据、处理复制、恢复、再平衡
MGR Manager 2(Active/Standby) 提供监控接口、运行管理模块
MDS Metadata Server 2+ (CephFS 用) 管理 CephFS 元数据
RGW RADOS Gateway 2+ 提供 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 对比分析

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