mirror of
https://gitee.com/xmz7891/ykxmz.git
synced 2026-10-18 13:40:45 +00:00
看门狗:连接数掉到 1 就立刻重启,不等攒够 3 次
排查公网间歇 530 时发现的:
watchdog 日志显示「公网不通(HTTP 530,ha_connections=1)」
—— 出问题那段时间隧道**只剩 1 条连接**。
原来 watchdog 只把 CONNS == 0 算"零连接",
CONNS == 1 不当回事。但实测**只剩一条连接时跨机房回源就会失败**
(请求落 SEA,隧道只剩 LAX 一条)。
改法:
* CONNS <= 1 都计入降级计数
* 公网不通 **且** 连接数已在危险区 = 确认的故障(不是短抖动)
-> 立刻重启,不等 3 次
每次检查间隔 20 秒,等 3 次就是白断 40 秒。现在能省下来。
实测:改完公网 15/15 = 100%,连接数 4 条。
顺带说明 watchdog 是怎么跑的:
systemd timer(lanremote-watchdog.timer),每 20 秒调一次
watchdog.service。之前查"服务是 inactive"一度以为它没在跑,
其实是 timer 触发型的 —— oneshot 服务跑完就是 inactive,正常。
This commit is contained in:
+17
-3
@@ -127,14 +127,28 @@ if [ "$LOG_STALE" = "1" ] && [ "$FAIL" -ge 1 ]; then
|
||||
fi
|
||||
|
||||
FAIL=$((FAIL + 1))
|
||||
if [ -n "$CONNS" ] && [ "$CONNS" = "0" ]; then
|
||||
# 连接数 <= 1 也算"降级"。
|
||||
#
|
||||
# 原来是 == 0 才算,但实测**只剩 1 条连接时跨机房回源就会失败**
|
||||
# (用户撞上的 530 就是这种:请求落 SEA,隧道只剩 LAX 一条)。
|
||||
# 所以 1 和 0 一样危险,都计入降级计数。
|
||||
DEGRADED=0
|
||||
if [ -n "$CONNS" ] && [ "$CONNS" -le 1 ] 2>/dev/null; then
|
||||
ZERO=$((ZERO + 1))
|
||||
DEGRADED=1
|
||||
fi
|
||||
|
||||
log "公网不通($DETAIL),连续第 $FAIL 次(零连接 $ZERO 次)"
|
||||
log "公网不通($DETAIL),连续第 $FAIL 次(降级 $ZERO 次)"
|
||||
|
||||
# 公网不通 + 连接数已经降到危险区 = **确认的故障**,不是短抖动。
|
||||
# 这种情况立刻重启,不等攒够 3 次 —— 每次检查间隔 20 秒,
|
||||
# 等 3 次就是白断 40 秒。
|
||||
if [ "$DEGRADED" = "1" ]; then
|
||||
restart_tunnel "公网不通且只剩 ${CONNS} 条隧道连接(确认故障,立即重启)"
|
||||
fi
|
||||
|
||||
if [ "$FAIL" -ge "$THRESHOLD" ] || [ "$ZERO" -ge "$THRESHOLD" ]; then
|
||||
restart_tunnel "连续 $FAIL 次公网不通(含 $ZERO 次零连接)"
|
||||
restart_tunnel "连续 $FAIL 次公网不通(含 $ZERO 次降级)"
|
||||
fi
|
||||
|
||||
write_state "$ZERO" "$FAIL"
|
||||
|
||||
Reference in New Issue
Block a user