osd-故障检测机制

那年仲夏 提交于 2020-01-27 12:08:52

osd故障检测机制

前言

心跳是用于OSD节点间检测对方是否故障的,以便及时发现故障节点进入相应的故障处理流程。故障检测需要在故障的发现时间和心跳带来的负载之间做权衡,如果心跳频率太高则过多的心跳报文会影响系统性能,如果心跳频率过低则会延长发现故障节点的时间,从而影响系统的可用性

1、伙伴上报机制

需要了解的几个参数

osd_heartbeat_interval 向伙伴osd发送ping的时间间隔。实际上会在这个值的基础上加一个随机时间来避免峰值
osd_heartbeat_grace 多久没有收到消息,可以认为对方已经down了
mon_osd_reporter_subtree_level 在哪一个级别上统计错误报告数,默认为host,即计数来自于不同主机的osd报告
mon_osd_min_down_reporters 最少需要多少来自不同的mon_osd_reporter_subtree_level的osd错误报告
mon_osd_adjust_heartbeat_grace 在计算osd失效的时间阈值时,是否要考虑该osd历史上的延时,因此失效时间阈值通常大于osd_heartbeat_grace指定的值
osd_heartbeat_min_peers 在大规模部署的场景中,如果任意两个OSD节点间都建立心跳连接将带来巨大的负担。尤其,当新加入一个OSD节点时这个负担就会几倍地增加。Ceph中每个OSD只和以下两类节点建立心跳连接:一类是同个PG下的OSD节点之间,因为属于同个PG的OSD节点会保存同份数据的副本,如若出现故障则会直接影响数据的可用性。另一类是OSD的左右两个相邻的节点,这两个节点同自己物理上存在比较紧密的联系,例如可能连接在同台交换机。另外,如果建立心跳的Peer数目少于osd_heartbeat_min_peers,那么OSD会继续同离他较近的几个OSD建立心跳连接

机制

OSD 之间每 osd_heartbeat_interval(默认 2 秒)会有一个来回心跳包的检测,该心跳包会分别从public和cluster网分别发出,当一个 OSD 在 osd_heartbeat_grace(默认 7 秒)时间内没有收到其他 OSD 心跳的时候,那么这个 OSD 会向 MON 汇报说另一个 OSD 心跳已经超时。当MON 收到多个来自不同故障域的 mon_osd_min_down_reporters个OSD 都汇报了同一个 OSD 的心跳问题,就会将这个 OSD mark DOWN

2、自身beacon机制

需要了解的几个参数

osd_beacon_report_interval(默认100秒) osd最小多少秒向mon发送信标,证明自己活着
mon_osd_report_timeout(默认300秒) osd多久没有上报信标则标记其为down
mon_osd_adjust_heartbeat_grace 默认值为false,设置为true时,ceph将根据滞后量伸缩

机制

OSD每最小osd_beacon_report_interval(默认100秒),如果一 OSD 在 mon_osd_report_timeout(默认300秒) 时间内没向mon报告过自己的状态,mon就认为它 down 了

3、上报事件

需要了解的几个参数

mong_osd_down_out_interval 在osd停止响应多少秒后把它标记为down且out
osd_mon_report_interval_max osd最长多久向mon汇报一次,超时即认为他挂了
osd_mon_report_interval_min osd向mon汇报的最小时间间隔
mon_osd_adjust_down_out_interval 设置为true时,ceph将根据滞后量伸缩

机制

osd当有pg状态改变或者到达一定的时间间隔的时候,会向mon发送MSG_PGSTATS消息,这里称之为osd到mon的心跳,mon收到消息,并恢复MSG_PGSTATSACK,并记录心跳超时时间到last_osd_report。mon周期性的检测所有osd的last_osd_report,发现失效节点,并标记为down

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!