看门狗(Watchdog)是服务器中负责系统级故障自愈 的硬件或软件机制,核心使命就一句话:当服务器系统失去响应时,自动将其重启,避免无人值守下长期挂死。
🎯 核心工作原理
看门狗本质上是一个倒计时定时器:
-
系统启动后,看门狗定时器开始倒数
-
正常运行时,系统里的看护程序会定期"喂狗"(重置倒计时)
-
一旦系统崩溃、死锁、内核卡死------喂狗程序也无法运行
-
倒计时归零 → 看门狗触发预设动作(通常是硬复位 / 断电重启)
💡 类比:就像个保姆盯着你,要求你每隔几秒眨一次眼,你一直眨说明还活着;要是停了超过阈值,保姆直接把你泼醒。
🔧 服务器中的具体形态
硬件看门狗
-
集成在 BMC(基板管理控制器,如 IPMI/iDRAC/iLO)或主板管理芯片上
-
独立于主 CPU 运行,即使主机完全死机也能触发复位
-
通过 GPIO 引脚或电源控制线直接拉低 RESET 信号
软件看门狗
-
内核级定时器(Linux 下如
softdog、watchdog内核模块) -
依赖系统本身还能跑定时器中断,对内核完全挂死的场景不如硬件可靠
应用层看门狗
- 监控特定服务进程,崩溃则重启该服务(如 systemd 的
Restart=always)
📋 典型应用场景
| 场景 | 看门狗的作用 |
|---|---|
| 内核 panic 后卡住 | 硬件看门狗硬复位整机 |
| 系统负载极高导致无响应 | 超时后强制重启恢复服务 |
| 远程无人值守节点 | 避免人工到场拔电 |
| 关键业务 7×24 运行 | 保证最短故障恢复时间(MTTR) |
⚙️ Linux 服务器上的实践
# 加载硬件看门狗模块(以 iTCO 为例,Intel 平台常见)
modprobe iTCO_wdt
# 安装用户态喂狗程序
apt install watchdog
systemctl enable watchdog && systemctl start watchdog
配置文件 /etc/watchdog.conf中可以定义:
-
watchdog-device = /dev/watchdog------ 指定设备 -
timeout = 30------ 30 秒超时 -
test-binary = /usr/local/bin/health-check.sh------ 自定义健康检查 -
realtime = yes------ 实时优先级喂狗
📌 关键设计要点
⚠️ 三个容易踩坑的地方:
超时时间要合理:太短会因瞬时高负载误触发重启;太长则故障恢复慢。一般设 30-120 秒
喂狗程序优先级要高:避免被系统调度饿死,否则会"假死真重启"
BMC 看门狗比 OS 看门狗更可靠:OS 级软看门狗在内核完全死锁时可能失效,而 BMC 是独立 ARM 小电脑
在数据中心里,看门狗通常和 **BMC 的"自动重启策略"** 配合,形成"OS 软看门狗 + BMC 硬看门狗"的双保险,确保单机故障能在分钟级自愈,这也是为什么你很少见到大规模服务器集群需要人工频繁去机房按电源键的原因。