ceph学习笔记

Ceph 学习笔记

1. Ceph 是什么

Ceph 是一个开源的分布式存储系统,可以把多台服务器上的磁盘统一组织成一个存储集群,对外提供对象存储、块存储和文件存储能力。

Ceph 的核心特点:

  1. 分布式:数据分散存放在多台服务器上。
  2. 高可用:某些磁盘或节点故障后,数据仍然可以访问。
  3. 可扩展:容量不够时,可以继续增加服务器和磁盘。
  4. 无单点:核心组件通常可以部署多个实例,避免单点故障。
  5. 统一存储:同一套底层集群可以提供对象、块、文件三种接口。

常见使用场景:

  1. 云平台后端存储,例如 OpenStack、Kubernetes。
  2. 虚拟机磁盘存储,例如 RBD 块设备。
  3. 海量图片、视频、备份文件存储。
  4. 分布式文件共享,例如 CephFS。
  5. 私有云或实验环境中的统一存储平台。

2. Ceph 的三种存储接口

类型 组件 说明 常见用途
对象存储 RGW 兼容 S3 / Swift 的对象存储网关 图片、视频、备份、归档
块存储 RBD RADOS Block Device,提供虚拟块设备 虚拟机磁盘、数据库磁盘、K8s PVC
文件存储 CephFS POSIX 风格的分布式文件系统 共享目录、应用文件、日志目录

一句话记忆:

text 复制代码
RGW 像对象桶,RBD 像一块硬盘,CephFS 像共享文件夹。

3. Ceph 核心架构

Ceph 的底层核心是 RADOS,所有数据最终都会存放到 RADOS 集群中。RGW、RBD、CephFS 都是建立在 RADOS 之上的不同访问方式。

text 复制代码
应用程序
    -> RGW / RBD / CephFS
        -> RADOS
            -> OSD
                -> 磁盘

3.1 MON

MON 是 Monitor 的缩写,负责维护集群的核心状态信息。

主要作用:

  1. 维护集群成员信息。
  2. 保存 OSD Map、MON Map、PG Map、CRUSH Map。
  3. 负责集群状态一致性。
  4. 给客户端提供集群拓扑信息。

生产环境一般至少部署 3 个 MON,数量通常为奇数,例如 3 个或 5 个。

3.2 MGR

MGR 是 Manager 的缩写,负责管理和监控相关功能。

主要作用:

  1. 提供集群运行状态统计。
  2. 支持 Dashboard 图形化管理界面。
  3. 提供 Prometheus 监控数据。
  4. 承担部分管理模块功能。

MGR 一般至少部署 2 个,一个 active,一个 standby。

3.3 OSD

OSD 是 Object Storage Daemon 的缩写,是 Ceph 中真正负责存储数据的核心进程。

主要作用:

  1. 管理本地磁盘。
  2. 存储对象数据。
  3. 处理数据副本。
  4. 与其他 OSD 进行数据恢复和均衡。

通常一块磁盘对应一个 OSD。生产环境中,OSD 数量越多,集群整体容量和并发能力越强。

3.4 MDS

MDS 是 Metadata Server 的缩写,只在使用 CephFS 时需要。

主要作用:

  1. 管理 CephFS 的文件系统元数据。
  2. 处理目录、文件名、权限等信息。
  3. 提高文件系统访问性能。

如果只使用 RBD 或 RGW,可以不部署 MDS。

3.5 RGW

RGW 是 RADOS Gateway 的缩写,负责提供对象存储访问入口。

主要作用:

  1. 提供类似 Amazon S3 的接口。
  2. 支持 bucket、object、access key、secret key。
  3. 适合存储非结构化数据。

4. Ceph 中的重要概念

4.1 Pool

Pool 是存储池,用来划分数据存储区域。不同业务可以使用不同的 Pool。

Pool 中可以配置:

  1. 副本数量。
  2. PG 数量。
  3. CRUSH 规则。
  4. 应用类型,例如 rbd、cephfs、rgw。

示例:

bash 复制代码
ceph osd pool create rbd_pool 32
ceph osd pool application enable rbd_pool rbd

4.2 PG

PG 是 Placement Group 的缩写,可以理解为数据分布和管理的逻辑分组。

Ceph 不会直接把数据对象分配到 OSD,而是先把对象映射到 PG,再把 PG 映射到 OSD。

text 复制代码
Object -> PG -> OSD

PG 的作用:

  1. 降低数据管理复杂度。
  2. 方便数据迁移和恢复。
  3. 帮助数据均匀分布到不同 OSD。

PG 数量不是越大越好,过多会增加 MON、OSD 的管理压力;过少会导致数据分布不均。

4.3 CRUSH

CRUSH 是 Ceph 的数据分布算法,用来决定数据应该存放在哪些 OSD 上。

CRUSH 的特点:

  1. 不依赖中心化元数据表。
  2. 可以根据故障域分布数据。
  3. 支持按照主机、机柜、机房等层级放置副本。
  4. 增加或减少 OSD 时,可以尽量减少数据迁移量。

常见故障域:

故障域 含义
osd 单块磁盘
host 单台服务器
rack 单个机柜
room 单个机房

生产环境通常不希望多个副本落在同一台主机上,因此故障域一般设置为 host

4.4 副本与纠删码

Ceph 常见的数据保护方式有两种:

方式 说明 优点 缺点
副本模式 保存多份完整数据 性能好、恢复简单 空间利用率低
纠删码 数据切片并计算校验块 空间利用率高 计算开销大、恢复复杂

实验环境常用 2 副本或 3 副本。生产环境中,3 副本更常见。

5. Ceph 集群状态查看

5.1 查看集群健康状态

bash 复制代码
ceph -s
ceph status

重点关注:

  1. health:集群健康状态。
  2. mon:MON 是否正常。
  3. mgr:MGR 是否正常。
  4. osd:OSD 总数、在线数量、加入集群数量。
  5. pg:PG 是否处于 active+clean。

常见健康状态:

状态 含义
HEALTH_OK 集群正常
HEALTH_WARN 有警告,需要检查
HEALTH_ERR 有严重问题,需要尽快处理

5.2 查看 OSD 状态

bash 复制代码
ceph osd status
ceph osd tree
ceph osd df

ceph osd tree 可以看到 OSD 所在主机、权重、状态。

常见状态:

状态 说明
up OSD 进程正在运行
down OSD 进程未运行
in OSD 参与数据分布
out OSD 不参与数据分布

正常情况下,OSD 应该是 upin

5.3 查看 Pool

bash 复制代码
ceph osd pool ls
ceph osd pool ls detail
ceph df

ceph df 可以查看集群总容量、已用容量、可用容量,以及各个 Pool 的使用情况。

5.4 查看 PG

bash 复制代码
ceph pg stat
ceph pg dump

正常情况下,大部分 PG 应该处于:

text 复制代码
active+clean

常见异常状态:

状态 说明
degraded 副本不足,正在降级运行
recovering 正在恢复数据
backfilling 正在回填数据
peering OSD 正在协商 PG 状态
inactive PG 不可用,需要排查
undersized 副本数量低于要求

6. RBD 块存储常用操作

6.1 创建 RBD Pool

bash 复制代码
ceph osd pool create rbd_pool 32
ceph osd pool application enable rbd_pool rbd
rbd pool init rbd_pool

6.2 创建块设备镜像

bash 复制代码
rbd create rbd_pool/test.img --size 10G
rbd ls rbd_pool
rbd info rbd_pool/test.img

6.3 映射到本机

bash 复制代码
rbd map rbd_pool/test.img

查看映射结果:

bash 复制代码
rbd showmapped
lsblk

格式化并挂载:

bash 复制代码
mkfs.xfs /dev/rbd0
mkdir -p /mnt/rbd-test
mount /dev/rbd0 /mnt/rbd-test
df -h

6.4 取消挂载和映射

bash 复制代码
umount /mnt/rbd-test
rbd unmap /dev/rbd0

6.5 删除 RBD 镜像

bash 复制代码
rbd rm rbd_pool/test.img

注意:删除 RBD 镜像前,需要确认业务已经不再使用,否则可能造成数据丢失。

7. CephFS 文件存储常用操作

7.1 创建 CephFS

CephFS 需要至少两个 Pool:

  1. metadata pool:保存元数据。
  2. data pool:保存文件数据。

示例:

bash 复制代码
ceph osd pool create cephfs_metadata 32
ceph osd pool create cephfs_data 64
ceph fs new myfs cephfs_metadata cephfs_data

查看文件系统:

bash 复制代码
ceph fs ls
ceph fs status

7.2 挂载 CephFS

内核方式挂载:

bash 复制代码
mkdir -p /mnt/cephfs
mount -t ceph 192.168.1.10:6789:/ /mnt/cephfs -o name=admin,secret=你的密钥

也可以使用 FUSE 方式挂载:

bash 复制代码
mkdir -p /mnt/cephfs
ceph-fuse /mnt/cephfs

查看挂载结果:

bash 复制代码
df -h
mount | grep ceph

8. RGW 对象存储常用操作

8.1 创建对象存储用户

bash 复制代码
radosgw-admin user create --uid="testuser" --display-name="Test User"

创建成功后会生成:

  1. access_key
  2. secret_key

这两个密钥用于 S3 客户端访问对象存储。

8.2 使用 S3 客户端访问

常见 S3 客户端:

  1. s3cmd
  2. awscli
  3. mc
  4. 应用程序中的 S3 SDK

s3cmd 为例:

bash 复制代码
s3cmd --configure
s3cmd mb s3://test-bucket
s3cmd ls
s3cmd put ./test.txt s3://test-bucket/
s3cmd get s3://test-bucket/test.txt

9. 常见故障排查思路

9.1 集群不是 HEALTH_OK

先查看整体状态:

bash 复制代码
ceph -s
ceph health detail

排查顺序:

  1. 看是否有 OSD down。
  2. 看是否有 MON 或 MGR 异常。
  3. 看 PG 是否长时间不 clean。
  4. 看磁盘容量是否接近满。
  5. 看网络是否中断或延迟过高。

9.2 OSD down

常用命令:

bash 复制代码
ceph osd tree
systemctl status ceph-osd@0
journalctl -u ceph-osd@0 -xe

排查方向:

  1. OSD 进程是否启动。
  2. 磁盘是否损坏。
  3. 挂载点是否异常。
  4. 网络是否正常。
  5. 认证 keyring 是否正确。

9.3 磁盘空间不足

查看容量:

bash 复制代码
ceph df
ceph osd df

处理思路:

  1. 删除无用数据。
  2. 扩容 OSD。
  3. 检查是否有某些 OSD 使用率明显偏高。
  4. 检查 CRUSH 权重是否合理。
  5. 检查 Pool 副本数和 PG 数是否合理。

9.4 PG 长时间异常

查看 PG 状态:

bash 复制代码
ceph pg stat
ceph health detail

如果 PG 长时间处于 degradedundersizedinactive,需要重点检查对应 OSD 是否正常。

10. 常用命令汇总

命令 作用
ceph -s 查看集群整体状态
ceph health detail 查看详细健康告警
ceph osd tree 查看 OSD 拓扑
ceph osd status 查看 OSD 状态
ceph osd df 查看 OSD 容量分布
ceph df 查看集群和 Pool 容量
ceph mon stat 查看 MON 状态
ceph mgr stat 查看 MGR 状态
ceph pg stat 查看 PG 状态
ceph osd pool ls 查看 Pool 列表
rbd ls <pool> 查看 RBD 镜像
rbd info <pool>/<image> 查看 RBD 镜像信息
ceph fs ls 查看 CephFS 文件系统
ceph fs status 查看 CephFS 状态

11. 学习重点总结

学习 Ceph 时,可以按照下面这条主线理解:

text 复制代码
磁盘 -> OSD -> PG -> Pool -> RBD / CephFS / RGW -> 应用

需要重点掌握:

  1. Ceph 三种存储接口:RGW、RBD、CephFS。
  2. MON、MGR、OSD、MDS、RGW 的作用。
  3. Pool、PG、CRUSH 的关系。
  4. ceph -sceph osd treeceph df 等常用查看命令。
  5. OSD down、PG 异常、容量不足等常见故障的排查思路。

一句话总结:

text 复制代码
Ceph 的本质是把多台机器上的多块磁盘组织成一个可靠、可扩展、可统一访问的分布式存储集群。
相关推荐
晓梦林1 小时前
ximai靶场学习笔记
android·笔记·学习
nashane1 小时前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
IT19951 小时前
Dify笔记-创建自定义工具连接到自建的OpenAPI Schema服务
笔记
一口吃俩胖子2 小时前
【脉宽调制DCDC功率变换学习笔记021】时域性能准则
笔记·学习
starvapour3 小时前
SSH笔记
笔记·ssh
@杰克成3 小时前
Java学习30
java·开发语言·学习
三品吉他手会点灯4 小时前
C语言学习笔记 - 40.数据类型 - scanf函数的编程规范与非法输入处理
c语言·开发语言·笔记·学习
大G的笔记本4 小时前
synchronized 的原理(简单版)
笔记
Bechamz5 小时前
大数据开发学习Day36
大数据·学习