跳到正文
watchdog:整机兜底那层,我在评估

watchdog:整机兜底那层,我在评估

硬件看门狗加 systemd 软看护,两层叠加兜底「机器卡死没人拉」。这篇理清三层守护各自挡什么、为什么 watchdog 我在评估而不是在用,以及自动响应「先 dry-run 再上线」的纪律。

watchdog:整机兜底那层,我在评估

状态:在评估 · 未上生产 · 不上比乱上更安全

速读#

watchdog 是整机级兜底,挡的是卡死到 systemd 都没机会拉回来的情况。这篇不是推荐立刻上,而是解释为什么它还在评估:误触发一次硬复位,代价可能比没有它更大;上之前必须先在测试机验通。

守护是分层的#

工具挡什么状态
服务级恢复systemd进程崩了自动拉回在用
出事通知我哪吒探针挂了 / 负载高了主动告警在用
整机级复位watchdog卡死到 systemd 都没机会时,硬复位在评估

三层不重叠:前一层失灵,才轮到后一层。systemd 是服务级动作,探针只告警不动作,watchdog 是整机级动作。

它怎么工作#

系统里跑一个定时「喂狗」的程序;硬件看门狗(或内核模块 softdog)等投喂。

  • 正常:喂狗不断 → 看门狗不动
  • 卡死:喂狗停了 → 超时后硬复位整机

没有硬件看门狗的机器(多数云 VPS)可以用 softdog 顶。但 softdog 的可靠度边界要认清:它本质是内核里的一个定时器,触发复位这个动作本身依赖内核还活着。中断都停摆的硬卡死,它自己也跟着死了——这道坎只有真硬件看门狗跨得过去:计时器在独立芯片上,主机死透了它照样拉电。评估阶段 softdog 反而够用:测试机上就能把「故意卡死 → 超时复位」的演练做完,不用等真硬件。

顺带把两个容易混进来的东西分开,免得高估 watchdog 的必要性:

  • 只怕内核 panic 后停机kernel.panic = 10 一行 sysctl 就能让 panic 十秒后自动重启,不用整套 watchdog。watchdog 针对的是不 panic 的卡死——IO 挂死、内存耗尽后的僵持、活锁。
  • systemd 自带的路线RuntimeWatchdogSec= 让 PID 1 亲自喂狗,配置一行,验证的是「内核和 PID 1 还活着」;独立的 watchdog 守护进程则能加负载、文件更新时间这类更细的判活条件。我评估的顺序是先试 systemd 这条——能用一行配置解决的,别为它多养一个守护进程。

我这几台的主要风险不是「整机卡死」,是单服务挂——systemd 已经覆盖。所以 watchdog 的边际收益,在当前规模没那么高。

「没那么高」≠「永远不需要」。机器再涨、半夜卡死一台没人手动拉,这层就会变成刚需。

为什么在评估,不在用#

推荐栏不全是「在用清单」。有些工具的价值,恰恰是把「为什么还没上」写清楚。

三条叠在一起:

  1. 配错代价大 误触发会硬复位。生产机误复位一次的损失,往往大于现在不装它。

  2. set-and-forget 最怕「装了当没装」 装上就忘,出事才起效;真出事发现没配上——这类系统,纪律要比日常工具严。

  3. 规模没到 先等真出现过「systemd 拉不回来的整机卡死」,再上。纯预防性地上太早,优先级不排前面。

什么条件下会上#

三个条件同时满足:

  1. 确认有机器出现过整机卡死
  2. 测试机 dry-run 验通:故意制造卡死 → 超时复位;正常负载下绝不误复位
  3. 复位后服务能自己起来(systemctl enable 等开机自启已配齐)

第二条最关键。最怕配成「自己饿死自己」:喂狗脚本卡住,或触发条件太松,正常负载也 reboot 成循环——那不是兜底,是在生产机上装了个定时炸弹。

宁可没有这层兜底,也不要一个会误触发的兜底。

set-and-forget 最怕装了当没装。最后一层兜底:没想明白不上;上了就必须验过——该动才动,不该动绝不动。不验通就是埋雷。

s1oopX

登录 s1oopX