Ceph分布式存储系统入门

Ceph分布式存储系统入门

Ceph分布式存储系统入门

Ceph是一个开源的分布式存储系统,设计用于提供高性能、可靠性和可扩展性。本文介绍Ceph的基本概念、架构和使用场景。

Ceph概述

Ceph是一个统一的分布式存储系统,设计用于提供:

  • 对象存储
  • 块存储
  • 文件存储

核心特性:

  • 高可用性
  • 高可扩展性
  • 自我修复
  • 无单点故障
  • 开源软件

Ceph架构

Ceph存储集群主要由以下组件组成:

监视器 (Monitor)

维护集群状态映射的主副本,包括:

  • Monitor map
  • OSD map
  • PG map
  • CRUSH map
  • MDS map

管理器 (Manager)

负责跟踪运行时指标和集群状态,包括:

  • 存储利用率
  • 当前性能指标
  • 系统负载

Ceph OSD (Object Storage Daemon)

负责存储数据、处理数据复制、恢复、再平衡,以及向Ceph监视器和管理器提供监控信息。

Ceph MDS (Metadata Server)

为Ceph文件系统存储元数据。

RADOS (Reliable Autonomic Distributed Object Store)

Ceph存储集群的基础,提供所有Ceph存储功能的基础。

Ceph存储类型

RADOS块设备 (RBD)

提供块存储功能,类似于SAN存储。

特点:

  • 精简配置
  • 可调整大小
  • 数据条带化
  • 快照支持
  • 克隆支持

使用场景:

  • 虚拟机磁盘
  • 数据库存储
  • OpenStack Cinder后端

RADOS网关 (RGW)

提供对象存储功能,兼容S3和Swift API。

特点:

  • RESTful接口
  • S3和Swift兼容
  • 多租户支持
  • 元数据管理

使用场景:

  • 云存储
  • 静态网站托管
  • 大数据存储
  • 备份归档

CephFS

提供POSIX兼容的文件系统。

特点:

  • POSIX语义
  • 元数据与数据分离
  • 动态子树分区
  • 快照支持

使用场景:

  • 共享文件系统
  • 大数据分析
  • HPC (高性能计算)
  • 内容管理系统

Ceph数据存储原理

CRUSH算法

Controlled Replication Under Scalable Hashing,一种伪随机数据分布算法,用于确定如何存储和检索数据。

优势:

  • 无中心查询
  • 数据分布均匀
  • 最小化数据迁移
  • 故障域隔离

数据分布流程

  1. 客户端计算对象的位置
  2. CRUSH算法决定对象的存储位置
  3. 数据被写入主OSD
  4. 主OSD复制数据到其他OSD

数据复制与纠删码

Ceph支持两种数据保护方式:

复制 (Replication):

  • 简单直接,创建多个数据副本
  • 通常使用3个副本
  • 高可靠性但存储效率低

纠删码 (Erasure Coding):

  • 将数据分割为多个数据块和编码块
  • 存储效率高,可达到约2倍的存储效率
  • 计算开销较大
  • 适合冷数据存储

Ceph集群部署

最低硬件要求

  • 监视器节点

    • 2核CPU
    • 4GB内存
    • 60GB存储空间
  • OSD节点

    • 2核CPU (每OSD)
    • 4GB内存 (每OSD)
    • 数据存储磁盘
    • 单独的日志磁盘 (推荐SSD)

网络规划

推荐至少两个网络:

  • 公共网络:客户端访问
  • 集群网络:OSD间数据复制和心跳

部署工具

  • cephadm:基于容器的部署工具
  • ceph-ansible:基于Ansible的部署工具
  • Rook:Kubernetes原生的Ceph部署

基本部署步骤

使用cephadm部署示例:

# 安装cephadm
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/octopus/src/cephadm/cephadm
chmod +x cephadm

# 引导监视器节点
./cephadm bootstrap --mon-ip <mon-ip>

# 添加主机
ceph orch host add <hostname> <ip>

# 部署OSD
ceph orch daemon add osd <host>:<device-path>

# 部署MDS
ceph orch apply mds <fs-name> --placement="<num-daemons> [<host-pattern>]"

# 部署RGW
ceph orch apply rgw <realm>.<zone> --placement="<num-daemons> [<host-pattern>]"

Ceph监控与管理

Ceph Dashboard

基于Web的管理界面,提供:

  • 集群状态监控
  • 资源利用率
  • 性能指标
  • 配置管理

命令行工具

  • ceph:主要管理工具
  • rbd:管理RADOS块设备
  • radosgw-admin:管理RADOS网关
  • cephfs-shell:管理CephFS

常用监控命令

# 检查集群状态
ceph -s

# 检查集群健康
ceph health detail

# 检查OSD状态
ceph osd stat
ceph osd tree

# 检查PG状态
ceph pg stat

# 检查存储池
ceph df

# 性能统计
ceph osd perf

Ceph故障排除

常见问题

PG处于不一致状态

# 检查不一致的PG
ceph health detail

# 修复不一致
ceph pg repair <pg_id>

OSD离线

# 检查OSD状态
ceph osd tree

# 启动离线的OSD
systemctl start ceph-osd@<osd_id>

# 如果OSD需要替换
ceph osd out <osd_id>
ceph osd purge <osd_id>

监视器仲裁丢失

# 检查监视器状态
ceph mon stat

# 从单个监视器强制形成仲裁
ceph-mon -i <mon_id> --extract-monmap /tmp/monmap
ceph-mon -i <mon_id> --inject-monmap /tmp/monmap

Ceph性能优化

OSD优化

  • 使用SSD作为日志设备
  • 调整OSD线程数
  • 优化文件系统选择 (XFS, BlueStore)

网络优化

  • 使用专用集群网络
  • 增加网络带宽
  • 调整网络缓冲区大小

客户端优化

  • 调整RBD缓存设置
  • 优化客户端与OSD的连接数
  • 使用适当的I/O调度器

Ceph与云平台集成

OpenStack集成

  • Cinder (块存储) 与RBD集成
  • Glance (镜像服务) 与RBD集成
  • Swift (对象存储) 与RGW集成
  • Manila (共享文件系统) 与CephFS集成

Kubernetes集成

  • 使用Rook操作符
  • 提供持久卷
  • CSI驱动支持

Ceph最佳实践

  • 为监视器使用奇数个节点(通常为3或5个)
  • 为不同工作负载使用不同的存储池
  • 定期备份监视器数据库
  • 监控集群性能和容量
  • 规划适当的故障域
  • 逐步扩展集群
  • 保持软件版本更新