从Ceph看分布式系统故障检测

从Ceph看分布式系统故障检测

作者:王康 2017-12-19 10:37:16

存储

存储软件

分布式 不同的分布式系统由于其本身的结构不同,以及对一致性、可用性、可扩展性的需求不同,会针对以上几点作出不同的抉择或取舍。下面我们就来看看Ceph是怎么做的。

节点的故障检测是分布式系统无法回避的问题,集群需要感知节点的存活,并作出适当的调整。通常我们采用心跳的方式来进行故障检测,并认为能正常与外界保持心跳的节点便能够正常提供服务。一个好的故障检测策略应该能够做到:

  • 及时:节点发生异常如宕机或网络中断时,集群可以在可接受的时间范围内感知;
  • 适当的压力:包括对节点的压力,和对网络的压力;
  • 容忍网络抖动
  • 扩散机制:节点存活状态改变导致的元信息变化需要通过某种机制扩散到整个集群;

[[213813]]

不同的分布式系统由于其本身的结构不同,以及对一致性、可用性、可扩展性的需求不同,会针对以上几点作出不同的抉择或取舍。下面我们就来看看Ceph是怎么做的。

Ceph故障检测机制

Ceph作为有中心的分布式结构,元信息的维护和更新自然的都由其中心节点Ceph Monitor来负责。节点的存活状态发生改变时,也需要Monitor来发现并更新元信息并通知给所有的OSD节点。最自然的,我们可以想到让中心节点Monitor保持与所有OSD节点之间频繁的心跳,但如此一来,当有成百上千的OSD节点时Monitor变会有比较大的压力。之前在Ceph Monitor and Paxos中介绍过Ceph的设计思路是通过更智能的OSD和Client来减少对中心节点Monitor的压力。同样的,在节点的故障检测方面也需要OSD和Monitor的配合完成。下面的介绍基于当前***的11.0.0版本。

OSD之间心跳

属于同一个pg的OSD我们称之为伙伴OSD,他们会相互发送PING\PONG信息,并且记录发送和接收的时间。OSD在cron中发现有伙伴OSD相应超时后,会将其加入failure_queue队列,等待后续汇报。

参数:

osd_heartbeat_interval(6): 向伙伴OSD发送ping的时间间隔。实际会在这个基础上加一个随机时间来避免峰值。

osd_heartbeat_grace(20):多久没有收到回复可以认为对方已经down

OSD向Monitor汇报伙伴OSD失效

1. OSD发送错误报告

  • OSD周期性的检查failure_queue中的伙伴OSD失败信息;
  • 向Monitor发送失效报告,并将失败信息加入failure_pending队列,然后将其从failure_queue移除;
  • 收到来自failure_queue或者failure_pending中的OSD的心跳时,将其从两个队列中移除,并告知Monitor取消之前的失效报告;
  • 当发生与Monitor网络重连时,会将failure_pending中的错误报告加回到failure_queue中,并再次发送给Monitor。

2. Monitor统计下线OSD

Monitor收集来自OSD的伙伴失效报告;

当错误报告指向的OSD失效超过一定阈值,且有足够多的OSD报告其失效时,将该OSD下线。

参数:

osd_heartbeat_grace(20): 可以确认OSD失效的时间阈值;

mon_osd_reporter_subtree_level(“host”):在哪一个级别上统计错误报告数,默认为host,即计数来自不同主机的osd报告

mon_osd_min_down_reporters(2): 最少需要多少来自不同的mon_osd_reporter_subtree_level的osd的错误报告

mon_osd_adjust_heartbeat_grace(true):在计算确认OSD失效的时间阈值时,是否要考虑该OSD历史上的延迟,因此失效的时间阈值通常会大于osd_heartbeat_grace指定的值

OSD到Monitor心跳

  • OSD当有pg状态改变等事件发生,或达到一定的时间间隔后,会向Monitor发送MSG_PGSTATS消息,这里称之为OSD到Monitor的心跳。
  • Monitor收到消息,回复MSG_PGSTATSACK,并记录心跳时间到last_osd_report。
  • Monitor周期性的检查所有OSD的last_osd_report,发现失效的节点,并标记为Down。

参数:

mon_osd_report_timeout(900):多久没有收到osd的汇报,Monitor会将其标记为Down;

osd_mon_report_interval_max(600):OSD最久多长时间向Monitor汇报一次;

osd_mon_report_interval_min(5):OSD向Monitor汇报的最小时间间隔

总结

可以看出,Ceph中可以通过伙伴OSD汇报失效节点和Monitor统计来自OSD的心跳两种方式发现OSD节点失效。回到在文章开头提到的一个合格的故障检测机制需要做到的几点,结合Ceph的实现方式来理解其设计思路。

  • 及时:伙伴OSD可以在秒级发现节点失效并汇报Monitor,并在几分钟内由Monitor将失效OSD下线。当然,由于Ceph对一致性的要求,这个过程中客户端写入会不可避免的被阻塞;
  • 适当的压力:由于有伙伴OSD汇报机制,Monitor与OSD之间的心跳统计更像是一种保险措施,因此OSD向Monitor发送心跳的间隔可以长达600秒,Monitor的检测阈值也可以长达900秒。Ceph实际上是将故障检测过程中中心节点的压力分散到所有的OSD上,以此提高中心节点Monitor的可靠性,进而提高整个集群的可扩展性;
  • 容忍网络抖动:Monitor收到OSD对其伙伴OSD的汇报后,并没有马上将目标OSD下线,而是周期性的等待几个条件:1,目标OSD的失效时间大于通过固定量osd_heartbeat_grace和历史网络条件动态确定的阈值;2,来自不同主机的汇报达到mon_osd_min_down_reporters。3,满足前两个条件前失效汇报没有被源OSD取消。
  • 扩散:作为中心节点的Monitor并没有在更新OSDMap后尝试广播通知所有的OSD和Client,而是惰性的等待OSD和Client来获取。以此来减少Monitor压力并简化交互逻辑。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/269436.html<

(0)
运维的头像运维
上一篇2025-05-07 08:39
下一篇 2025-05-07 08:40

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注