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/

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/tongh/p/12712933.html
Copyright © 2011-2022 走看看