结论:一个osd挂掉,按照默认配置,当时的写请求约卡顿20s;
逻辑:每个pg的osd之间会间隔osd_heartbeat_interval(默认6s)进行相互心跳,一旦心跳不通,并且距离上次检测超过osd_heartbeat_grace(默认20s)则会向mon汇报该osd down,mon收到mon_osd_min_down_reporters个osd投票抱怨该osd down,则会将该osd置为down并广播osdmap,(被票死的收到osdmap在osd_max_markdown_period期间超过osd_max_markdown_count次后,就会自杀),mon将pg修改为peering态,该pg的Acting set Primary开始进行Peering,(如果down的osd在Acting set中)则将down的osd从Acting set,Acting set尝试重新找一个满足crush rule的osd加入(如果找不到,则会变成undersized)Peering发现数据有缺失,于是向mon汇报请求置为degraded态,mon将pg修改为degraded态,client开始恢复读写,对于写请求,如果是从osd挂掉了,pg中的主osd收到最新osdmap则只需确保当前pg的actingSet全返回即可向用户返回,所以约卡顿20s;对于读请求,如果是主osd挂掉了,需要Peering完之后,client收到最新osdmap后重试新的pg主osd读,所以也是约20s
osd挂掉对业务的影响
最新推荐文章于 2024-09-30 13:40:38 发布