OSD是一个抽象的概念,对应一个本地块设备(一块盘或一个raid组)
传统NAS和SAN存储是赋予底层物理磁盘一些CPU、内存等,使其成为一个对象存储设备(OSD),可以独立进行磁盘空间分配、I/O调度等以达到客户端I/O操作与系统调用之间解耦。
与传统对象存储相比:
OSD依赖ObjectStore(本地对象存储引擎)来访问块设备上的数据
客户端与OSD通信之前要获取osdmap,因此OSD up时需要向monitor报告自身元数据等信息。之后osdmap在集群之间传播,逐渐恢复此OSD与client、其他OSD之间的通信。所有OSD会周期性的向Monitor上报自身信息。每个OSD上驻留一个monitorClient,负责与Monitor通信,有了monitorClient之后,OSD不需要与Monitor直连,因此如果Monitor故障也可以通过monitorClient来切换,而不需要OSD重连
网络通信组件Messenger允许OSD采用TCP/IP、Infiniband等流行的网络通信协议与客户端和其他OSD通信。Ceph将RADOS集群的网络分为公共网络与集群网络,两个网段互不干扰,客户端通过Monitor获得osdmap,因此Monitor通信在公共网络。集群网络则用于OSD之间通信。
进行网络隔离一方面时因为公共网络传输量要远远小于集群网络,OSD需要将客户端写入的数据根据不同的备份策略复制到其他的OSD上,同时OSD恢复、自动数据均衡等都会增加网络负载。另一方面是客户端业务与集群通信的性质不同,避免两者进行干扰如OSD之间通信抢占带宽等。
每个IP地址绑定一个Messenger,但是Messenger可以维护多条链路,实现多个客户端同时访问一个OSD,或一个OSD同时与多个OSD通信。
Messenger类型如下图:
在业务压力不大的情况下公共网络可以使用千兆网络,但是存储内网最好使用万兆网络,否则集群性能会严重受损
OSDService是OSD层面的服务,包括如下:
OSD中还有线程池、定时器等。线程池供任务分时间片使用。定时器用来处理OSD的一些周期性的任务,如心跳检测、scrub调度等
OSD故障后对外部展示的4种状态如下图:
up、down代表OSD临时故障或下电,不会发起数据恢复;in、out代表被踢出集群,集群发起数据恢复
所有类型的故障会记录再osdmap后报告到Monitor,然后扩散至集群,其他OSD收到消息后采取对应的措施。
Monitor通过一下三种方式检测OSD故障(下电):
OSD空间使用率对外展示如下图:
每个OSD向Monitor上报自身空间使用量,之后由Monitor计算集群使用量,存储池使用量,再统一展现出来
学习自:
《Ceph之RADOS设计原理与实现》 谢型果 严军
https://docs.ceph.com/docs/master/
原文:https://www.cnblogs.com/tongh/p/12712933.html