写点什么

ceph 的组件及数据写入流程

作者:好吃不贵
  • 2022-12-18
    浙江
  • 本文字数:756 字

    阅读完需:约 2 分钟

组件

主要有 3 个核心组件,1 个辅助组件。

核心组件

Monitor(ceph-mon): 维护运行图

有 monitor map,manager map,ODS map,MDS map,CRUSH map 等多种 map。这些映射是 ceph 守护程序相互协调所需的关键集群状态。至少需要 3 个。

Manager(ceph-mgr):做监控

跟踪运行时指标和集群当前状态,包括存储利用率,当前性能指标和系统负载。托管基于 python 的模块管理和公开 ceph 集群信息。至少需要 2 个。

OSD(ceph-osd):提供数据读写

一个磁盘就是一个 OSD 守护程序,OSD 处理集群数据复制,恢复,重新平衡。至少 3 个才能实现高可用。

可选组件

MDS(Metadata server):存文件元数据

代表 ceph 文件系统存元数据,,块设备和对象存储不需要 MDS。ceph 有 3 种存储方式,分别是块存储,对象存储,以及文件存储。只有文件存储才会用到这个 MDS。

数据写入流程

流程是文件写到 Objects,再写 PGs,再 OSGs,有三次映射。

File(inode, ono) -> Objects(oid) -> PGs(pgid) -> OSGs(osd1, osd2, osd3)。

文件转为对象,

Failure domain 是故障域,会过滤掉故障节点。通过 hash 计算映射到相应的 OSD 里。

File->Object

文件:

ino,文件的唯一 id。

ono,object 的大小,默认 4M 是一个块。

对象:

oid,object id,ino + ono 的组合。

Object->PGs

RADOS 需要 Object 对象。静态 hash 函数计算 oid 的值,映射成近似均匀分布的伪随机值,然后和 mask 按位相与,得到 pgid。

hash(oid) & mask -> pgid

通过一致性 hash,实现 oid 到 pgid 的 mapping。其中 mask 是 PG 总数 m - 1,PG 需要是 2 的整数幂。

PGs->OSGs

通过 CRUSH 算法,把 PG 映射到 OSG。

PGs(pgid)-CRUSH->OSG(osd1, 2, 3)

vdbench是测试磁盘读写性能的组件。

Linux 的存储系统也是类似的,分层存储。VFS->block layer->Physical devices。


参考资料

极客时间,马哥教育的运维训练营

https://www.thomas-krenn.com/de/wikiDE/images/b/ba/Linux-storage-stack-diagram_v4.0.png


用户头像

好吃不贵

关注

还未添加个人签名 2018-11-20 加入

还未添加个人简介

评论

发布
暂无评论
ceph的组件及数据写入流程_好吃不贵_InfoQ写作社区