ceph分布式存储
详细总结
1. 基础概述
-
核心定义:Ceph 是开源、分布式、软件定义存储系统,用于存储海量数据,具备极高可用性、扩展性和易用性。
-
核心技术
:
- 基于 RADOS(可靠的自主分布式对象存储),所有数据以对象形式存储。
- 采用 CRUSH 算法,客户端自主计算对象存储位置,无需中央查找表。
-
支持架构:可部署在 x86 或 ARM 架构通用服务器,支持同一集群混合部署。
-
版本管理
:
版本系列 最新版本 发布日期 退役日期 Reef 18.2.4 2023-08-07 2025-08-01 Squid 19.2.0 2024-09-26 2026-09-19 Quincy 17.2.7 2022-04-19 2024-06-01 -
企业版由红帽提供,基于社区 LTS 版本,支持周期比上游长 1 年(36 个月)。
2. 用户角色与组织适配
-
核心角色
:
- 存储管理员:负责集群安装、配置、维护、培训、自动化集成等。
- 存储操作员:协助日常操作,通过 Ceph Dashboard 响应告警、更换故障设备。
-
其他角色:应用开发人员、云操作员、基础架构架构师、数据中心操作员等,需与存储管理员协同。
-
组织适配差异
:
- 电信 / 云服务商:常见云操作员、存储操作员,多消费存储不维护。
- 银行 / 金融机构:所有角色内部配备,存储管理员等充当服务提供商。
- 大学 / 小型实施:技术支持人员承担所有角色。
3. 架构组成
-
核心组件
:
- 监控器(MON):维护集群状态映射,需配置奇数个,超过半数正常方可提供服务。
- 对象存储设备(OSD):存储数据,处理复制、恢复、平衡,每个物理磁盘可对应一个 OSD。
- 管理器(MGR):跟踪运行时指标,提供 Web 仪表板,建议部署 2 个以上。
- 元数据服务器(MDS):管理 CephFS 元数据,支持 POSIX 命令高效执行。
-
访问方式
:
- 原生 API(librados):C/C++/Java 等多语言支持,性能最优。
- 块设备(RBD):支持虚拟机启动、Linux 内核挂载,适合块存储场景。
- 对象网关(RGW):RESTful API,兼容 Amazon S3 和 OpenStack Swift。
- 文件系统(CephFS):并行文件系统,支持快照,适合共享存储场景。
-
集群映射:包含 MON、OSD、PG、CRUSH、MDS 等映射,客户端通过映射确定数据位置。
4. 部署与安装
-
部署方式
:
- 推荐:Cephadm(容器化,支持 Octopus+)、Rook(K8s 部署,支持 Nautilus+)。
- 其他:ceph-ansible(Ansible 部署)、手动部署,ceph-deploy 已废弃。
-
最小硬件规格
:
组件 CPU 内存 存储空间 网络 ceph-osd ≥1 核 4G 整块硬盘 + 1 个 SSD 分区 ≥1G(推荐 10G) ceph-mon ≥2 核 2-4G 60G 1G+ ceph-mds ≥2 核 ≥2G 1M 1G+ -
部署流程
:
- 准备虚拟机:克隆模板、配置主机名解析、关闭 SELinux 和防火墙、配置 yum 仓库。
- 安装 cephadm:自动安装 podman,提前下载 Ceph 镜像。
- 集群初始化:通过 cephadm bootstrap 创建单节点集群,生成 Dashboard 登录信息(默认端口 8443)。
- 添加节点:推送 SSH 公钥,通过 ceph orch host add 添加节点。
- 部署组件:部署 MON、MGR、OSD 等,验证集群状态(ceph -s)。
5. 核心功能管理
-
集群配置
:
- 配置来源:默认值、集中配置数据库、本地配置文件、环境变量、命令行参数。
- 配置命令:ceph config set/get/rm(设置 / 获取 / 删除配置)、ceph tell(运行时临时修改)。
-
池管理
:
- 池类型:复本池(多副本冗余,适合高访问量)、纠删码池(K+M 区块,省空间,适合归档)。
- PG 数量:计算公式为(OSD 数 ×100)/ 最大副本数 / 池数,需取 2 的 N 次幂;OSD<5 时设 128,5-10 时设 512,10-50 时设 4096。
- 操作命令:创建(ceph osd pool create)、删除(ceph osd pool rm)、快照(ceph osd pool mksnap)、配额(ceph osd pool set-quota)。
-
认证与授权
:
- 认证协议:cephx,基于共享密钥加密通信。
- 用户管理:创建(ceph auth add)、删除(ceph auth rm)、权限配置(ceph auth caps)。
- 密钥环:存储在 /etc/ceph 目录,需严格控制文件权限。
-
块存储(RBD)
:
- 核心操作:镜像创建(rbd create)、映射(rbd map)、快照(rbd snap create)、克隆(rbd clone)、导入导出(rbd import/export)。
- 缓存配置:支持回写(write-back)、直写(write-through)模式,默认缓存大小 32MB。
- 多集群同步:支持单向 / 双向镜像,基于日志或快照复制。
-
对象存储(RGW)
:
- 架构:支持域(realm)、区域组(zonegroup)、区域(zone)的多站点部署。
- 用户操作:创建用户(radosgw-admin user create)、配置配额(radosgw-admin quota set)。
- API 访问:支持 S3(aws cli)和 Swift(python-swiftclient)客户端。
-
文件系统(CephFS)
:
- 部署:需创建元数据池和数据池,部署 MDS 守护进程。
- 挂载方式:Kernel 挂载(需内核≥4.0)、FUSE 挂载(支持配额和 ACL)。
- 快照与镜像:支持快照创建(mkdir .snap/ 快照名)、跨集群镜像同步(cephfs-mirror)。
6. 监控与维护
-
监控工具
:
- Dashboard GUI:基于 Web,支持集群状态查看、用户管理、配置修改。
- Prometheus+Grafana:监控指标导出(端口 9283)、可视化展示。
-
集群状态
:
- 健康状态:HEALTH_OK(正常)、HEALTH_WARN(告警)、HEALTH_ERR(严重错误)。
- 查看命令:ceph status(集群状态)、ceph osd tree(OSD 结构)、ceph df(容量使用)。
-
故障处理
:
- OSD 故障:替换故障设备后,集群自动恢复数据。
- 节点删除:需先停止服务、清理数据、从集群移除。
关键问题
问题 1:Ceph 的三种核心存储访问方式(RBD、RGW、CephFS)各自适用场景是什么?如何选择?
答案:
- RBD(块存储):适用于虚拟机(KVM/QEMU)、云实例(OpenStack Cinder)、数据库等需要块设备的场景,优势是兼容性强、性能稳定,支持快照和克隆。
- RGW(对象存储):适用于海量非结构化数据存储(如图片、视频、日志)、备份归档、云存储服务,优势是支持 S3/Swift 标准 API,易于集成,支持多站点复制。
- CephFS(文件系统):适用于需要共享文件系统的场景(如容器存储、HPC 集群、共享存储服务器),优势是 POSIX 兼容,支持目录层次结构和高并发访问。
- 选择原则:根据数据类型(块 / 对象 / 文件)、访问模式(随机读写 / 批量存储 / 共享访问)、性能需求(低延迟 / 高吞吐量)决定;高访问量低延迟选 RBD,海量归档选 RGW,共享文件选 CephFS。
问题 2:Ceph 集群部署时,PG 数量的设置原则是什么?为何不能过大或过小?
答案:
- 设置原则:① 计算公式为(OSD 数 ×100)/ 最大副本数 / 池数,结果需取最接近的 2 的 N 次幂;② 单 OSD 关联的 PG 数建议 100-200,确保负载均衡;③ 不同 OSD 数量对应默认值:OSD<5 时设 128,5-10 时设 512,10-50 时设 4096,OSD>50 时用官方工具计算(https://old.ceph.com/pgcalc/)。
- 过大影响:每个 PG 维护的数据量过少,集群需消耗大量 CPU 和内存计算 PG 映射与平衡,导致客户端 I/O 延迟增加,集群响应变慢。
- 过小影响:单个 PG 存储数据过多,数据迁移(如 OSD 故障时)会占用大量网络带宽,且故障恢复时间长,影响数据可用性。
问题 3:Ceph 如何保障数据的高可用性和一致性?核心机制有哪些?
答案:
- 高可用性机制:① 多副本 / 纠删码:复本池默认 3 副本,纠删码池支持 M 个 OSD 故障;② 去中心化设计:无单点故障,MON 集群(奇数个)通过仲裁机制保障状态一致性,OSD 自动数据恢复与平衡;③ 组件冗余:MGR、MDS 支持备用节点,故障时自动切换。
- 数据一致性机制:① 强一致性写入:数据需写入主 OSD 和所有备 OSD 的日志后,才向客户端返回写入成功;② 数据校验:OSD 定期检查数据一致性,发现损坏自动通过副本恢复;③ CRUSH 算法:确保数据均匀分布在不同故障域(主机 / 机架),避免单点故障导致数据丢失;④ 快照技术:支持快照回滚,保障数据可恢复性。