编程技术网

关注微信公众号,定时推送前沿、专业、深度的编程技术资料。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

极客时间

增加自动驾驶服务器状态不健康的原因:Add reason for unhealthiness to autopilot server state

作者: DraperHXY 2022-5-12 16:16:14 显示全部楼层 |阅读模式

Add reason for unhealthiness to autopilot server state

使用此 Feature 计算服务器的健康状况:

RAFT-AUTOPILOT/types.go

2BA1616中的110至128行

func (s *ServerState) isHealthy(lastTerm uint64, leaderLastIndex uint64, conf *Config) bool {
if s.Server.NodeStatus != NodeAlive {
return false
}
if s.Stats.LastContact > conf.LastContactThreshold || s.Stats.LastContact < 0 {
return false
}
if s.Stats.LastTerm != lastTerm {
return false
}
if leaderLastIndex > conf.MaxTrailingLogs && s.Stats.LastIndex < leaderLastIndex-conf.MaxTrailingLogs {
return false
}
return true
}

我们将这些函数调用的结果存储在此字段中:

RAFT-AUTOPILOT/types.go

2BA1616中的第133行

Healthy bool

It would help during periods of unhealthiness to be able to quickly identify why individual nodes are unhealthy. For this I think adding a field to the autopilot ServerHealth type with the latest reason for perceived unhealthiness would be helpful.

该问题来自:hashicorp/raft-autopilot/issues/12 , 试试查看该项目更多issue.

问题解答

Ritesh d joshi 2022-5-12 16:49:19 显示全部楼层

根据Ishealthy方法描述无健康状态的枚举是否足以做到这一点?

登录的原因会吗?还是其他东西?

YikeWang1103 2022-5-12 17:16:02 显示全部楼层

我最初在思考有关原因的更可读的信息。也许加上枚举。例如,如果 terms 不等,您将想知道这一点,并且枚举就足够了。但是,很高兴知道该 terms 值是什么,因为它可以为领导者选举不断触发的集群提供洞察力。因此,我认为格式化的消息可能最有用。

就原因而言,在将节点标记为不健康的原因时,在调试级别发射日志会很不错。但是,我最初想要的是跟踪自动驾驶状态不健康的原因。 consul (对我来说,该库的主要消费者)用HTTP API公开了此状态。将这一切 combine 起来,如果某种事情似乎正在采取行动,则可以查询自动驾驶状态,然后不仅看到哪些节点被认为是不健康的,而且可以快速指示该原因。该州已经出口了所有用于确定健康状况的信息,但是在事件中,将所有碎屑拼凑在一起需要太多考虑。这张票是关于 reduce 在通话事件中诊断问题的 Psych 间接费用。

腾讯云服务器 阿里云服务器
腾讯云服务器 腾讯云服务器
关注微信
^