ceph 的组件及数据写入流程
组件
主要有 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
评论