zoukankan      html  css  js  c++  java
  • Ceph学习笔记(4)- OSD

    前言

    OSD是一个抽象的概念,对应一个本地块设备(一块盘或一个raid组)

    传统NAS和SAN存储是赋予底层物理磁盘一些CPU、内存等,使其成为一个对象存储设备(OSD),可以独立进行磁盘空间分配、I/O调度等以达到客户端I/O操作与系统调用之间解耦。

    与传统对象存储相比:

    • ceph的OSD可以精确控制、CPU、内存、网络带宽等资源
    • 实例化对象,定义了一套完备的对象接口,客户端可以直接操作对象,基于对象开发存储型应用
    • 可自主进行数据复制、数据恢复、数据迁移,快速进行故障切换和恢复
    • OSD与客户端、OSD之间以点对点的方式传播集群表,避免广播方式在OSD数量较大时形成广播风暴

    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

    OSDService是OSD层面的服务,包括如下:

    • 传播和发布osdmap
    • 消息收发(与monitor、其他OSD)
    • 提供全局的本地存储引擎ObjectStore,具体实现分为FileStore和BlueStore,BlueStore的性能要强于FileStore
    • 透传OSD自身状态
    • 针对PG的recovery、scurb等任务进行资源分配和调度

    OSD中还有线程池、定时器等。线程池供任务分时间片使用。定时器用来处理OSD的一些周期性的任务,如心跳检测、scrub调度等

    OSD故障检测

    OSD故障后对外部展示的4种状态如下图:

    up、down代表OSD临时故障或下电,不会发起数据恢复;in、out代表被踢出集群,集群发起数据恢复

    所有类型的故障会记录再osdmap后报告到Monitor,然后扩散至集群,其他OSD收到消息后采取对应的措施。

    Monitor通过一下三种方式检测OSD故障(下电):

    1. OSD自主上报状态,优雅下电
    2. 通过心跳检测向Monitor报告失联的OSD,满足以下两个条件,OSD被标记为down:
      • OSD检测到伙伴OSD返回ECONNREFUSED错误,则设置Force/ Immediate标识,向Monitor上报
      • 候选OSD积累的有效票数达到阈值(默认2),投票采用少数服从多数的方式,并且来自某个最小故障域的主机所有OSD针对候选OSD的投票算1票
    3. 每个OSD周期性(默认300秒)的向Monitor发送Beacon消息证明自己存活,如果Monitor一段时间(默认900秒)没收到OSD的Beacon,就标记OSD为down。OSDdown后超过600S,会被标记为out(Monitor通过 一个名为 mon_ osd_ down_ out_ subtree_ limit的配置项来限制自动数据迁移的粒度,例如设置为主机,则 当某个主机上的OSD全部宕掉时,这些OSD不再会被自动标记为Out,也就无法自动进行数据迁移,从而避免 数据迁移风暴)

    OSD空间管理

    OSD空间使用率对外展示如下图:

    • Nearfull:默认为OSD设备裸容量的85%
    • Backfillfull:数据恢复、自动均衡以backfill方式进行数据迁移,集群内部的活动,不受Full约束,因此引入Backfillfull
    • Full:默认OSD设备裸容量95%
    • Failsafefull:如果引擎使用FileStore,会使用本地文件系统接管磁盘,文件系统使用率超过一定门限时会变成只读,为防止灾难发生,引入Failsafefull

    每个OSD向Monitor上报自身空间使用量,之后由Monitor计算集群使用量,存储池使用量,再统一展现出来

    学习自:
    《Ceph之RADOS设计原理与实现》 谢型果 严军
    https://docs.ceph.com/docs/master/

  • 相关阅读:
    10.30 afternoon
    10.29 afternoon
    10.29 morning

    10.27 noip模拟试题
    codevs 3052 多米诺 二分图匹配
    poj 1849 Two
    10.26 noip模拟试题
    10.25 noip模拟试题
    .NET Core EF 版本问题
  • 原文地址:https://www.cnblogs.com/tongh/p/12712933.html
Copyright © 2011-2022 走看看