Ceph heartbeat分析
张建伟
一、Heartbeat的作用
Heartbeat主要用于及时发现osd的状态变化(down或者up),由monitor更新osdmap,并同步到相关的osd。
二、Osd之间的heartbeat
1、选择heartbeat对象
基本上就是本osd负责的pg,所包含的其他osd的集合。
比如osd0包含pg1.1 pg1.2 pg2.1
pg1.1 => osd1 osd0 osd5
pg1.2 => osd0 osd6 osd7
pg2.1 => osd2 osd3 osd0
那么osd0的heartbeat对象就是osd1 osd2 osd3 osd5 osd6 osd7
2、Heartbeat过程
配置项:
三、Osd汇报down osds
四、Monitor裁定osd状态变化
流程图:
有osd down时:
有osd up 时:
Osd0与其他osd 心跳沟通,对
比osdmap 版本号,如果我的
更新则将diff 发送给其他
osd,这样其他osd 也知道osd0
up 了,且更新了osdmap
配置项:
五、Osd汇报peering失败
如果osd在peering发起或者进行期间,无法与某个osd连通,则会定时(通过osd mon heartbeat interval配置)ping monitor以获取最新的osdmap。
六、Osd汇报自己的状态
如果osd有需要汇报的事件,比如检测到有osd down、pg map状态变化、up_thru 变化等,osd会在osd mon report interval min配置的事件间隔内,向monitor汇报;否则会在osd mon report interval max配置的事件间隔内向monitor汇报。
如果osd超过一定时间(可以通过 mon osd report timeout配置)没有向monitor 汇报,monitor会将osd标记为down。