RADOS是Ceph最为关键的技术,它是一个完整的对象存储系统,所有存储在Ceph系统中的数据最终由这一层来存储。本文主要介绍RADOS的系统架构和IO处理流程,以了解Ceph存储的设计原理。
Ceph存储系统的逻辑结构在“分布式系列之分布式存储ceph初识”介绍过,大致分为4个部分:基于存储系统RADOS、基于RADOS实现的CephFS、基于RADOS的LIBRADOS层应用接口、基于LIBRADOS的应用接口RBD和RADOSGW。
RADOS包括两类节点:存储节点和管理节点,其中存储节点称为OSD(object storage device),只需要包含CPU、网卡、本地缓存和一个磁盘或者RAID,并将传统的块存储方式替换成面向对象的存储。
在大数据量的存储系统中,存储设备会存储新旧设备的替换、大量的数据迁移或恢复,RADOS通过cluster map实现这些动态调配,cluster map是整个RADOS系统的关键数据结构,其中存储了整个集群的数据的分布以及成员信息。cluster map会被复制到存储集群中的所有存储节点、控制节点甚至客户端。
Ceph Monitor负责整个集群运行状况的监控,包括各个节点之间的状态、集群配置信息,这些信息由维护集群成员的守护进程提供的。Monitor集群通过操作cluster map来实现成员的管理,cluster map描述了哪些OSD被包含进存储集群以及所有数据在存储集群中的分布。
Ceph monitor中的cluster map包括OSD Map、PG Map、MDS Map和crush map,这些map不仅存储在monitor节点,也会被复制到集群中的每一个存储节点,以及和集群交互的client。当设备崩溃或数据迁移时,cluster map的内容需要进行更新,cluster map的版本号被增加,map的版本号可以使通信的双方确认自己的map是否是最新的,版本旧的一方会先将map更新成新的map,然后才会进行后续操作。
1)Monitor Map
Monitor Map包括monitor节点端到端信息,其中有Ceph集群id、监控主机名和ip地址及端口号,同时还存储了当前版本信息和最新更改记录,通过命令ceph mon map进行查看:
root@tango-centos01:/osd/data# ceph mon dump
dumped monmap epoch 1
epoch 1
fsid 4387471a-ae2b-47c4-b67e-9004860d0fd0
last_changed 0.000000
created 0.000000
0: 192.168.112.101:6789/0 mon.ceph1
1: 192.168.112.102:6789/0 mon.ceph2
2: 192.168.112.103:6789/0 mon.ceph3
2)OSD Map
OSD Map包括集群ID、创建OSD的版本信息和最新更新信息、Pool相关信息、副本数目,还包括OSD的数量、状态、权重和OSD主机信息。通过命令ceph osd dump进行查看:
root@tango-centos01:~# ceph osd dump
epoch 76
fsid 4387471a-ae2b-47c4-b67e-9004860d0fd0
created 2021-01-18 02:16:19.504735
modified 2021-01-21 21:58:55.305221
flags
pool 0 'data' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 64 pgp_num 64 last_change 1 flags hashpspool crash_replay_interval 45 stripe_width 0
osd.3 up in weight 1 up_from 26 up_thru 64 down_at 25 last_clean_interval [7,23) 192.168.112.101:6801/1204 192.168.112.101:6802/1204 192.168.112.101:6803/1204 192.168.112.101:6804/1204 exists,up d55567da-4e2a-40ca-b7c9-5a30240c895a
......
3)PG map
PG map包括当前PG版本、时间戳、最新OSD map 的版本信息、空间使用比例,也包括每个PG ID、对象数目、OSD状态等信息。通过命令ceph pg dump进行查看:
ceph pg dump
4)CRUSH Map:Crush map包括当前磁盘、服务器、机架等层级结构信息。通过以下命令可以查看crush map:
Ceph osd crush dump
CRUSH map使用分层结构来组织集群中的所有存储设备:
CRUSH rules主要有三个作用:
5)MDS map
MDS map包括当前的MDS版本信息、map创建的时间和最新修改时间、数据和元数据的POOL ID、集群MDS数目和MDS状态。通过命令ceph mds dump查看MDS map信息:
root@tango-centos01:~# ceph mds dump
dumped mdsmap epoch 13
epoch 13
flags 0
created 2021-09-18 02:16:19.504427
modified 2015-09-18 08:05:55.438558
4171: 192.168.112.101:6800/962 'ceph1' mds.0.2 up:active seq 7
MDS只用于Ceph文件系统该,与RDB和对象存储无关
OSD是Ceph存储集群最重要的组件,Ceph OSD将数据以对象的形式存储在集群中每个节点的物理磁盘上,用户数据的存储大部分是由OSD daemon进程来实现的。Ceph集群包含多个OSD,client从ceph monitor获取cluster map后,直接与OSD进行I/O读写请求操作,不再需要Ceph monitor干预,这样使得读写过程没有额外的数据处理。
Ceph的核心功能具备高可靠、自动平衡、自动恢复和一致性。在OSD中,Ceph将OSD的副本分布在多个节点上来实现高可用性及容错性。OSD中的每个对象都有一个主副本,若干个从副本,默认情况下这些副本是分布在不同的存储节点的。一个OSD可能为某些对象的主OSD,同时又是其它对象的从OSD。当出现磁盘故障时,OSD daemon进程的对等机制会协同其它进程执行恢复操作,在此期间从OSD会提升为主OSD,新的从OSD副本也会重新生成,这样就保证了OSD的可靠性和一致性。
OSD的架构由物理磁盘驱动器、其上的文件系统以及OSD服务组成,如下图所示,一个Ceph 存储节点上可以有一个或者多个数据盘,每个数据盘上部署有特定的文件系统,比如xfs、ext4或者btrfs,由一个 OSD Daemon负责照顾其状态以及向其读写数据。对于OSD daemon进程而言,文件系统显性的支持了其扩展属性,这些扩展属性提供了对象状态、快照和元数据内部信息。
1)BTRFS:相比XFS和EXT4性能更好,有以下特性
2)XFS:高性能日志文件系统,有以下优点
3)Ext4:Linux系统下的日志文件系统,有以下特性
Ceph官方明确推荐在生产环境中使用 XFS,在开发、测试、非关键应用上使用btrfs。
Ceph使用filestore作为存储后端时,在提交数据到后端存储前,Ceph先将日志和数据写入单独的存储区称为journal,这是一个单独的SSD磁盘或者分区。类似于数据库的write-ahead-log机制,在这种机制下,Ceph任何写入都是先写入journal文件,再被转移到FileStore的写入队列中,数据和元数据被异步写到指定区域,如下图所示:
该过程具有强一致性的特点:
如果新加入的OSD1取代了原有的 OSD4成为 Primary OSD, 由于OSD1上未创建 PG,不存在数据,那么PG上的I/O无法进行,怎样工作的呢?
Pool和PG知识将在后续内容中介绍,这里以RBD块存储为例介绍IO流程
最后总结下,本文主要介绍了Ceph存储的RADOS系统架构,包括MON和OSD,以及OSD的IO处理流程。
参考资料:
转载请注明原文地址:https://blog.csdn.net/solihawk/article/details/123021739
文章会同步在公众号“牧羊人的方向”更新,感兴趣的可以关注公众号,谢谢!