ceph技术

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 lsceph 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 lsceph 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 treeceph osd stat

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

相关推荐
神秘面具男036 小时前
ceph分布式存储
分布式·ceph
阎*水7 小时前
Ceph 分布式存储完整实践指南
linux·运维·分布式·ceph
阿方索1 天前
Ceph 分布式存储
分布式·ceph
别多香了2 天前
ceph分布式存储
分布式·ceph
你什么冠军?3 天前
Ceph分布式存储
ceph
wniuniu_3 天前
ceph运维
运维·javascript·ceph
zwxu_5 天前
Ceph基础原理分享
ceph·分布式存储
wniuniu_6 天前
ceph中修改镜像大小
网络·ceph
金海境科技6 天前
【服务器数据恢复】H3C华三Ceph分布式存储文件丢失数据恢复案例
服务器·经验分享·分布式·ceph