Ceph分布式存储系统技术指南
目录
概述
什么是Ceph
Ceph是一个开源的、统一的分布式存储系统,旨在提供卓越的性能、可靠性和可扩展性。它最初由Sage Weil于2004年作为博士论文项目开始开发,后来成为Linux基金会旗下的顶级开源项目。
Ceph的核心特性
- 统一存储平台:同时支持对象存储、块存储和文件系统存储
- 无中心架构:没有单点故障,完全分布式设计
- 自愈能力:自动检测和恢复故障节点
- 线性可扩展:性能和容量随节点增加线性增长
- 智能数据分布:使用CRUSH算法实现高效的数据放置
- 企业级可靠性:支持多副本和纠删码(Erasure Coding)
Ceph的发展历程
| 2004年 | Sage Weil开始Ceph项目作为博士论文 |
| 2006年 | Ceph首次公开发布 |
| 2012年 | 成为Linux基金会项目 |
| 2014年 | 纳入Red Hat产品线 |
| 2016年 | Ceph Luminous版本发布,引入BlueStore |
| 2020年 | Ceph Pacific版本发布,增强管理功能 |
核心架构
架构图
#mermaid-svg-T0PhTElZ0pjNPyJu{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-T0PhTElZ0pjNPyJu .error-icon{fill:#552222;}#mermaid-svg-T0PhTElZ0pjNPyJu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-T0PhTElZ0pjNPyJu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-T0PhTElZ0pjNPyJu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-T0PhTElZ0pjNPyJu .marker.cross{stroke:#333333;}#mermaid-svg-T0PhTElZ0pjNPyJu svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-T0PhTElZ0pjNPyJu p{margin:0;}#mermaid-svg-T0PhTElZ0pjNPyJu .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu .cluster-label text{fill:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu .cluster-label span{color:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu .cluster-label span p{background-color:transparent;}#mermaid-svg-T0PhTElZ0pjNPyJu .label text,#mermaid-svg-T0PhTElZ0pjNPyJu span{fill:#333;color:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu .node rect,#mermaid-svg-T0PhTElZ0pjNPyJu .node circle,#mermaid-svg-T0PhTElZ0pjNPyJu .node ellipse,#mermaid-svg-T0PhTElZ0pjNPyJu .node polygon,#mermaid-svg-T0PhTElZ0pjNPyJu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-T0PhTElZ0pjNPyJu .rough-node .label text,#mermaid-svg-T0PhTElZ0pjNPyJu .node .label text,#mermaid-svg-T0PhTElZ0pjNPyJu .image-shape .label,#mermaid-svg-T0PhTElZ0pjNPyJu .icon-shape .label{text-anchor:middle;}#mermaid-svg-T0PhTElZ0pjNPyJu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-T0PhTElZ0pjNPyJu .rough-node .label,#mermaid-svg-T0PhTElZ0pjNPyJu .node .label,#mermaid-svg-T0PhTElZ0pjNPyJu .image-shape .label,#mermaid-svg-T0PhTElZ0pjNPyJu .icon-shape .label{text-align:center;}#mermaid-svg-T0PhTElZ0pjNPyJu .node.clickable{cursor:pointer;}#mermaid-svg-T0PhTElZ0pjNPyJu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-T0PhTElZ0pjNPyJu .arrowheadPath{fill:#333333;}#mermaid-svg-T0PhTElZ0pjNPyJu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-T0PhTElZ0pjNPyJu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-T0PhTElZ0pjNPyJu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T0PhTElZ0pjNPyJu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-T0PhTElZ0pjNPyJu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T0PhTElZ0pjNPyJu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-T0PhTElZ0pjNPyJu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-T0PhTElZ0pjNPyJu .cluster text{fill:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu .cluster span{color:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-T0PhTElZ0pjNPyJu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-T0PhTElZ0pjNPyJu rect.text{fill:none;stroke-width:0;}#mermaid-svg-T0PhTElZ0pjNPyJu .icon-shape,#mermaid-svg-T0PhTElZ0pjNPyJu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-T0PhTElZ0pjNPyJu .icon-shape p,#mermaid-svg-T0PhTElZ0pjNPyJu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-T0PhTElZ0pjNPyJu .icon-shape rect,#mermaid-svg-T0PhTElZ0pjNPyJu .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-T0PhTElZ0pjNPyJu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-T0PhTElZ0pjNPyJu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-T0PhTElZ0pjNPyJu :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
存储层
Ceph集群
客户端层
客户端应用
RBD客户端
CephFS客户端
RGW S3/Swift客户端
Monitor MON
Manager MGR
OSD节点
MDS元数据服务器
FileStore
BlueStore
磁盘存储
架构设计原则
核心组件
1. Monitor (MON)
功能:
- 维护集群状态映射图
- 监控集群健康状态
- 处理客户端认证
- 仲裁选举机制
关键特性:
- 通常部署奇数个节点(3、5、7)以形成仲裁
- 使用Paxos算法保证一致性
- 存储集群映射图(Cluster Map)
- 轻量级,资源占用低
集群映射图包含:
- Monitor Map (monmap)
- OSD Map (osdmap)
- MDS Map (mdsmap)
- PG Map (pgmap)
- CRUSH Map (crushmap)
2. OSD (Object Storage Daemon)
功能:
- 存储实际数据对象
- 处理数据复制和恢复
- 向Monitor报告状态
- 参与数据再平衡
状态机:
初始化 → 启动中 → 活跃 → 清理 → 擦除 → 停止
OSD状态类型:
- up:OSD正在运行
- down:OSD离线
- in:OSD在CRUSH映射中
- out:OSD不在CRUSH映射中
存储后端:
- FileStore:传统文件系统(XFS、btrfs)后端
- BlueStore:直接管理裸设备,性能更优
3. Manager (MGR)
功能:
- 提供监控和管理接口
- 收集集群统计信息
- 运行管理模块(Dashboard、Prometheus等)
- 执行管理命令
常用模块:
- dashboard:Web管理界面
- prometheus:Prometheus指标导出
- influx:InfluxDB指标导出
- restful:REST API接口
- zabbix:Zabbix集成
4. MDS (Metadata Server)
功能:
- 管理CephFS文件系统元数据
- 处理目录和文件元数据操作
- 缓存元数据以提升性能
- 支持多MDS活跃/备用模式
部署模式:
- 单MDS模式
- 多MDS主动/被动模式
- 多MDS主动/主动模式(元数据分片)
5. RADOS (Reliable Autonomic Distributed Object Store)
功能:
- Ceph的核心存储引擎
- 提供对象存储接口
- 实现数据分布和复制
- 处理故障恢复
RADOS操作流程:
CRUSH算法
CRUSH概述
CRUSH (Controlled Replication Under Scalable Hashing) 是Ceph的核心数据分布算法,它解决了传统哈希算法在动态集群环境下的局限性。
CRUSH的优势
| 数据重分布 | 大量数据迁移 | 最小化数据迁移 |
| 故障域感知 | 无 | 支持机架、机房等 |
| 权重感知 | 无 | 支持设备权重 |
| 可扩展性 | 有限 | 线性扩展 |
CRUSH层次结构
#mermaid-svg-PNOudH79Yc3yl3c7{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-PNOudH79Yc3yl3c7 .error-icon{fill:#552222;}#mermaid-svg-PNOudH79Yc3yl3c7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-PNOudH79Yc3yl3c7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-PNOudH79Yc3yl3c7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-PNOudH79Yc3yl3c7 .marker.cross{stroke:#333333;}#mermaid-svg-PNOudH79Yc3yl3c7 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-PNOudH79Yc3yl3c7 p{margin:0;}#mermaid-svg-PNOudH79Yc3yl3c7 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 .cluster-label text{fill:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 .cluster-label span{color:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 .cluster-label span p{background-color:transparent;}#mermaid-svg-PNOudH79Yc3yl3c7 .label text,#mermaid-svg-PNOudH79Yc3yl3c7 span{fill:#333;color:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 .node rect,#mermaid-svg-PNOudH79Yc3yl3c7 .node circle,#mermaid-svg-PNOudH79Yc3yl3c7 .node ellipse,#mermaid-svg-PNOudH79Yc3yl3c7 .node polygon,#mermaid-svg-PNOudH79Yc3yl3c7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-PNOudH79Yc3yl3c7 .rough-node .label text,#mermaid-svg-PNOudH79Yc3yl3c7 .node .label text,#mermaid-svg-PNOudH79Yc3yl3c7 .image-shape .label,#mermaid-svg-PNOudH79Yc3yl3c7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-PNOudH79Yc3yl3c7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-PNOudH79Yc3yl3c7 .rough-node .label,#mermaid-svg-PNOudH79Yc3yl3c7 .node .label,#mermaid-svg-PNOudH79Yc3yl3c7 .image-shape .label,#mermaid-svg-PNOudH79Yc3yl3c7 .icon-shape .label{text-align:center;}#mermaid-svg-PNOudH79Yc3yl3c7 .node.clickable{cursor:pointer;}#mermaid-svg-PNOudH79Yc3yl3c7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-PNOudH79Yc3yl3c7 .arrowheadPath{fill:#333333;}#mermaid-svg-PNOudH79Yc3yl3c7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-PNOudH79Yc3yl3c7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-PNOudH79Yc3yl3c7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PNOudH79Yc3yl3c7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-PNOudH79Yc3yl3c7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PNOudH79Yc3yl3c7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-PNOudH79Yc3yl3c7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-PNOudH79Yc3yl3c7 .cluster text{fill:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 .cluster span{color:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-PNOudH79Yc3yl3c7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-PNOudH79Yc3yl3c7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-PNOudH79Yc3yl3c7 .icon-shape,#mermaid-svg-PNOudH79Yc3yl3c7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-PNOudH79Yc3yl3c7 .icon-shape p,#mermaid-svg-PNOudH79Yc3yl3c7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-PNOudH79Yc3yl3c7 .icon-shape rect,#mermaid-svg-PNOudH79Yc3yl3c7 .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-PNOudH79Yc3yl3c7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-PNOudH79Yc3yl3c7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-PNOudH79Yc3yl3c7 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
root
datacenter1
datacenter2
rack1
rack2
rack3
rack4
host1
host2
host3
host4
host5
host6
host7
host8
osd.0
osd.1
osd.2
osd.3
CRUSH规则
CRUSH规则定义了数据如何分布到存储设备上。
规则类型:
- replicated:副本规则
- erasure:纠删码规则
规则步骤:
示例规则:
rule replicated_rule {
ruleset 0
type replicated
min_size 1
max_size 10
step take default
step chooseleaf firstn 0 type host
step emit
}
PG (Placement Group)
PG是对象到OSD映射的中间层,用于管理大规模对象。
PG的作用:
- 减少映射表大小
- 简化数据再平衡
- 优化性能
PG状态:
- creating:正在创建
- active:正常工作
- clean:所有副本完整
- degraded:部分副本缺失
- recovering:正在恢复
- recovery_wait:等待恢复
- remapped:映射关系变更
- stale:OSD未更新状态
PG数量计算:
PG总数 = (OSD总数 * 100) / 副本数
存储接口
1. RBD (RADOS Block Device)
概述:提供块设备接口,可挂载为虚拟机磁盘。
特性:
- 支持精简配置
- 支持快照和克隆
- 支持动态调整大小
- 支持镜像和复制
- 与KVM、QEMU、Libvirt集成
使用场景:
- 虚拟机磁盘
- 容器存储
- 数据库存储
RBD命令示例:
# 创建镜像
rbd create myimage –size 1024 –pool rbd
# 列出镜像
rbd ls -p rbd
# 映射设备
rbd map rbd/myimage
# 取消映射
rbd unmap /dev/rbd0
2. CephFS (Ceph File System)
概述:提供POSIX兼容的文件系统接口。
特性:
- POSIX兼容
- 支持目录层级
- 元数据与数据分离
- 支持快照
- 支持多客户端并发访问
架构:
- 元数据服务器(MDS)管理元数据
- OSD存储实际数据
- 客户端通过FUSE或内核模块挂载
使用场景:
- 共享文件存储
- 传统应用迁移
- 用户主目录
CephFS命令示例:
# 创建文件系统
ceph fs volume create myfs
# 挂载文件系统
mount -t ceph :/ /mnt/cephfs -o name=admin
3. RGW (RADOS Gateway)
概述:提供对象存储接口,兼容S3和Swift API。
特性:
- S3 API兼容
- Swift API兼容
- 支持多租户
- 支持访问控制
- 支持生命周期管理
使用场景:
- 云存储服务
- 备份归档
- 静态网站托管
- 大数据存储
RGW命令示例:
# 创建用户
radosgw-admin user create –uid=testuser –display-name="Test User"
# 创建子用户
radosgw-admin subuser create –uid=testuser –subuser=testuser:s3 –access=full
网络通信
网络架构
#mermaid-svg-MTOjkNzHbMlorOlB{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-MTOjkNzHbMlorOlB .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-MTOjkNzHbMlorOlB .error-icon{fill:#552222;}#mermaid-svg-MTOjkNzHbMlorOlB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-MTOjkNzHbMlorOlB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-MTOjkNzHbMlorOlB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-MTOjkNzHbMlorOlB .marker.cross{stroke:#333333;}#mermaid-svg-MTOjkNzHbMlorOlB svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-MTOjkNzHbMlorOlB p{margin:0;}#mermaid-svg-MTOjkNzHbMlorOlB .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-MTOjkNzHbMlorOlB .cluster-label text{fill:#333;}#mermaid-svg-MTOjkNzHbMlorOlB .cluster-label span{color:#333;}#mermaid-svg-MTOjkNzHbMlorOlB .cluster-label span p{background-color:transparent;}#mermaid-svg-MTOjkNzHbMlorOlB .label text,#mermaid-svg-MTOjkNzHbMlorOlB span{fill:#333;color:#333;}#mermaid-svg-MTOjkNzHbMlorOlB .node rect,#mermaid-svg-MTOjkNzHbMlorOlB .node circle,#mermaid-svg-MTOjkNzHbMlorOlB .node ellipse,#mermaid-svg-MTOjkNzHbMlorOlB .node polygon,#mermaid-svg-MTOjkNzHbMlorOlB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-MTOjkNzHbMlorOlB .rough-node .label text,#mermaid-svg-MTOjkNzHbMlorOlB .node .label text,#mermaid-svg-MTOjkNzHbMlorOlB .image-shape .label,#mermaid-svg-MTOjkNzHbMlorOlB .icon-shape .label{text-anchor:middle;}#mermaid-svg-MTOjkNzHbMlorOlB .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-MTOjkNzHbMlorOlB .rough-node .label,#mermaid-svg-MTOjkNzHbMlorOlB .node .label,#mermaid-svg-MTOjkNzHbMlorOlB .image-shape .label,#mermaid-svg-MTOjkNzHbMlorOlB .icon-shape .label{text-align:center;}#mermaid-svg-MTOjkNzHbMlorOlB .node.clickable{cursor:pointer;}#mermaid-svg-MTOjkNzHbMlorOlB .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-MTOjkNzHbMlorOlB .arrowheadPath{fill:#333333;}#mermaid-svg-MTOjkNzHbMlorOlB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-MTOjkNzHbMlorOlB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-MTOjkNzHbMlorOlB .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MTOjkNzHbMlorOlB .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-MTOjkNzHbMlorOlB .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MTOjkNzHbMlorOlB .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-MTOjkNzHbMlorOlB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-MTOjkNzHbMlorOlB .cluster text{fill:#333;}#mermaid-svg-MTOjkNzHbMlorOlB .cluster span{color:#333;}#mermaid-svg-MTOjkNzHbMlorOlB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-MTOjkNzHbMlorOlB .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-MTOjkNzHbMlorOlB rect.text{fill:none;stroke-width:0;}#mermaid-svg-MTOjkNzHbMlorOlB .icon-shape,#mermaid-svg-MTOjkNzHbMlorOlB .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-MTOjkNzHbMlorOlB .icon-shape p,#mermaid-svg-MTOjkNzHbMlorOlB .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-MTOjkNzHbMlorOlB .icon-shape rect,#mermaid-svg-MTOjkNzHbMlorOlB .image-shape rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-MTOjkNzHbMlorOlB .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-MTOjkNzHbMlorOlB .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-MTOjkNzHbMlorOlB :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
Public Network
客户端
MON/MGR
OSD
Cluster Network
OSD复制/恢复
网络类型
| Public Network | 客户端访问 | 高 |
| Cluster Network | OSD间复制恢复 | 极高 |
网络配置
# ceph.conf配置
[global]
public_network = 10.0.0.0/24
cluster_network = 192.168.0.0/24
网络优化
- 使用万兆网络
- 分离Public和Cluster网络
- 启用Jumbo Frames(MTU 9000)
- 使用RDMA(InfiniBand/RoCE)
高可用与容错
副本机制
副本策略:
- 数据副本分布在不同故障域
- 默认3副本
- 可配置副本数
副本放置规则:
不同主机 > 不同机架 > 不同机房
纠删码 (Erasure Coding)
概述:通过纠删码算法提高存储效率。
纠删码 vs 副本:
| 存储效率 | 低 | 高 |
| 计算开销 | 低 | 高 |
| 恢复速度 | 快 | 慢 |
| 适用场景 | 热数据 | 冷数据 |
纠删码配置:
# 创建纠删码profile
ceph osd erasure-code-profile set myprofile \\
k=4 m=2 crush-failure-domain=host
# 创建纠删码pool
ceph osd pool create ec-pool 64 erasure myprofile
故障检测与恢复
故障检测:
- OSD心跳机制
- Monitor仲裁
- 自动标记down
恢复流程:
脑裂防护
机制:
- Monitor仲裁机制
- OSD心跳超时
- 自动fencing
部署架构
最小部署
3个MON + 3个OSD
生产环境部署
– 3-5个MON节点
– 每个节点3-12个OSD
– 分离的Cluster Network
– 专用的MGR节点
– 可选的RGW节点
部署方式
1. ceph-deploy(已废弃)
传统的部署工具,已不再推荐使用。
2. ceph-ansible
基于Ansible的自动化部署工具。
3. cephadm(推荐)
Ceph官方推荐的容器化部署工具。
cephadm特点:
- 容器化部署
- 集成管理
- 自动化运维
- 支持Rook集成
cephadm部署示例:
# 安装cephadm
curl –silent –remote-name –location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
chmod +x cephadm
./cephadm add-repo –release quincy
./cephadm install
# 创建集群
cephadm bootstrap –mon-ip <mon-ip>
# 添加OSD
ceph orch device ls
ceph orch apply osd –all-available-devices
硬件推荐
| CPU | 多核处理器 |
| 内存 | 每OSD 2-4GB |
| 网络 | 10GbE+ |
| 磁盘 | SSD用于journal/WAL,HDD用于数据 |
| 电源 | 冗余电源 |
性能优化
OSD优化
BlueStore优化:
# 启用RocksDB压缩
bluestore_compression_algorithm = snappy
# 调整WAL大小
bluestore_block_db_size = 64G
bluestore_block_wal_size = 4G
线程优化:
# 调整OSD线程数
osd_op_threads = 8
osd_disk_threads = 4
网络优化
# 调整TCP缓冲区
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
PG优化
# 调整PG数量
ceph osd pool set <pool> pg_num <pg_num>
ceph osd pool set <pool> pgp_num <pgp_num>
缓存优化
# 启用OSD缓存
osd_memory_target = 4G
osd_memory_target_autoscale = true
性能调优检查清单
- 使用BlueStore存储后端
- SSD用于journal/WAL
- 分离Public和Cluster网络
- 调整PG数量
- 启用RocksDB压缩
- 优化网络参数
- 使用NVMe SSD用于元数据
- 启用OSD内存自动扩展
应用场景
1. 虚拟化平台
场景:OpenStack、KVM虚拟机存储
优势:
- 动态扩展
- 实时迁移
- 快照克隆
2. 容器平台
场景:Kubernetes、Docker存储
优势:
- CSI驱动支持
- 动态PV创建
- 持久化存储
3. 大数据分析
场景:Hadoop、Spark数据湖
优势:
- 对象存储接口
- 高吞吐量
- 线性扩展
4. 云存储服务
场景:私有云对象存储
优势:
- S3 API兼容
- 多租户支持
- 成本效益
5. 备份归档
场景:企业数据备份
优势:
- 纠删码节省空间
- 自动恢复
- 长期存储
最佳实践
1. 规划阶段
- 评估容量和性能需求
- 设计合理的故障域
- 规划网络架构
- 选择合适的硬件
2. 部署阶段
- 使用cephadm容器化部署
- 分离Public和Cluster网络
- 配置合理的CRUSH规则
- 设置监控告警
3. 运维阶段
日常监控:
# 集群健康状态
ceph -s
# OSD状态
ceph osd tree
# PG状态
ceph pg stat
# 性能指标
ceph osd perf
定期维护:
- 监控磁盘使用率
- 检查网络延迟
- 优化CRUSH映射
- 更新Ceph版本
4. 故障处理
常见问题:
| PG状态degraded | OSD故障 | 检查OSD状态,等待恢复 |
| 性能下降 | 网络拥塞 | 检查网络,分离流量 |
| 磁盘满 | 容量不足 | 扩容集群,清理数据 |
| MON仲裁失败 | MON故障 | 恢复MON节点 |
5. 安全建议
- 启用CephX认证
- 使用TLS加密通信
- 限制网络访问
- 定期更新密钥
- 审计访问日志
总结
Ceph是一个功能强大、高度可扩展的分布式存储系统,适用于各种企业级存储场景。其核心优势在于:
通过合理规划、正确部署和有效运维,Ceph可以为企业提供可靠、高效、经济的存储解决方案。
参考资料
- Ceph官方文档
- Ceph GitHub仓库
- CRUSH论文
- BlueStore设计文档





