四、 配置内核看门狗支持Heartbeat 1 Linux下watchdog的工作原理 Watchdog在实现上可以是硬件电路也可以是软件定时器,能够在系统出现故障时自动重新启动系统。在Linux 内核下, watchdog的基本工作原理是:当watchdog启动后(即/dev/watchdog 设备被打开后),如果在某一设定的时间间隔内/dev/watchdog没有被执行写操作, 硬件watchdog电路或软件定时器就会重新启动系统。
/dev/watchdog 是一个主设备号为10, 从设备号130的字符设备节点。 Linux内核不仅为各种不同类型的watchdog硬件电路提供了驱动,还提供了一个基于定时器的纯软件watchdog驱动。 驱动源码位于内核源码树drivers\char\watchdog\目录下。
2 硬件与软件watchdog的区别
硬件watchdog必须有硬件电路支持, 设备节点/dev/watchdog对应着真实的物理设备, 不同类型的硬件watchdog设备由相应的硬件驱动管理。软件watchdog由一内核模块softdog.ko 通过定时器机制实现,/dev/watchdog并不对应着真实的物理设备,只是为应用提供了一个与操作硬件watchdog相同的接口。
硬件watchdog比软件watchdog有更好的可靠性。 软件watchdog基于内核的定时器实现,当内核或中断出现异常时,软件watchdog将会失效。而硬件watchdog由自身的硬件电路控制, 独立于内核。无论当前系统状态如何,硬件watchdog在设定的时间间隔内没有被执行写操作,仍会重新启动系统。
一些硬件watchdog卡如WDT501P 以及一些Berkshire卡还可以监测系统温度,提供了 /dev/temperature接口。 对于应用程序而言, 操作软件、硬件watchdog的方式基本相同:打开设备/dev/watchdog, 在重启时间间隔内对/dev/watchdog执行写操作。即软件、硬件watchdog对应用程序而言基本是透明的。
在任一时刻, 只能有一个watchdog驱动模块被加载,管理/dev/watchdog 设备节点。如果系统没有硬件watchdog电路,可以加载软件watchdog驱动softdog.ko。
3 Linux内核中关于watchdog的配置 在/usr/src/linux目录运行命令:makemenu config
确保在下面的菜单已经启用Software Watchdog选项
Character Devices
Watchdog Cards --->
[*] Watchdog Timer Support
[M] Software Watchdog (NEW)
如图2 。

图 2 编译内核支持Software Watchdog选项
4 加载模块 #insmod softdog
说明:watchdog能让系统在出现故障1分钟后重启该机器。这个功能可以帮助服务器在确实停止心跳后能够重新恢复心跳。 如果使用该特性,则在内核中装入"softdog"内核模块,用来生成实际的设备文件,输入"insmod softdog"加载模块。 输入"grep misc /proc/devices"(应为10),输入"cat /proc/misc | grep watchdog"(应为130)。 生成设备文件:"mknod /dev/watchdog c 10 130" 。
5 测试软件狗
编辑文件 /etc/ha.d/ha.cf
如掉下面一行的注释号:
watchdog /dev/watchdog
重新启动Heartbeat
#service heartbeat restart
使用命令杀掉heartbeat进程
killall -9 heartbeat
此时日志文件中应当出现一行:
Softdog: WDT device closed unexpectedly. WDT will not stop!
表示软件狗生效。另外使用命令lsmod可以看到软件狗已经加载。如图3 。

图-3
6 删除软件狗的方法
使用命令可以从内核中删除软件狗:
#modprobe -r softdog