天天看點

Linux高可用性方案之Heartbeat的watchdog配置(原創) 編輯

watchdog概述 

在日常使用heartbeat接管資源的應用中,由于heartbeat無法對作業系統自身出現的問題進行監控。如果主節點作業系統挂起,一方面可能導緻服務中斷,另一方面由于主節點資源無法釋放,而備份節點卻接管了主節點的資源,此時就發生了兩個節點同時争用一個資源的狀況。

針對這個問題,就需要在linux核心中啟用一個叫watchdog的子產品。watchdog是一個linux核心子產品,它通過定時向/dev/watchdog裝置檔案執行寫操作,進而确定系統是否正常運作。如果watchdog認為核心挂起,就會重新啟動系統,進而釋放節點資源。

watchdog代碼也支援用軟體替換外部的硬體計時器,該軟體叫做 softdog,softdog維護一個内部計時器,在另一個程序寫入/dev/watchdog裝置檔案時更新,如果softdog沒有看到程序寫入 /dev/watchdog檔案,它認為核心一定出故障了,它将啟動一個核心恐慌,正常情況下,核心恐慌将導緻系統關閉,但是你可以修改這個預設行為,将其改為預設行為為重新開機系統。

當你在/etc/ha.d/ha.cf檔案中啟用了watchdog選項後,heartbeat将每隔相當于deadtime長的時間寫入/dev/watchdog檔案(或裝置),是以,出現任何導緻heartbeat更新 watchdog裝置失敗的事情,一旦watchdog逾時周期(預設是一分鐘)過期,watchdog将啟動核心恐慌。

watchdog的工作原理 

watchdog在實作上可以是硬體電路也可以是軟體定時器,能夠在系統出現故障時自動重新啟動系統。在linux 核心下, watchdog的基本工作原理是:當watchdog啟動後(即/dev/watchdog 裝置被打開後),如果在某一設定的時間間隔内/dev/watchdog沒有被執行寫操作, 硬體watchdog電路或軟體定時器就會重新啟動系統。

/dev/watchdog 是一個主裝置号為10, 從裝置号130的字元裝置節點。 linux核心不僅為各種不同類型的watchdog硬體電路提供了驅動,還提供了一個基于定時器的純軟體watchdog驅動。 驅動源碼位于核心源碼樹drivers\char\watchdog\目錄下。

硬體與軟體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。

測試watchdog

隻要在/etc/ha.d/ha.cf加入

watchdog /dev/watchdog

即可自動啟用watchdog功能

可通過如下步驟确認

1、 # grep misc /proc/devices 

10 misc

2、 # cat /proc/misc |grep watchdog

130 watchdog

3、 # lsmod |grep softdog

softdog                 9941  2 

即可确認啟用了watchdog功能如果沒有生成/dev/watchdong裝置,則可通過如下指令自行建立

mknod /dev/watchdog c 10 130 

在主節點上可通過"killall -9 heartbeat"指令關閉heartbeat程序。由于是非法關閉heartbeat程序,是以heartbeat所控制的資源并沒有釋放。備份節點在很短一段時間沒有收到主節點的響應後,就會認為主節點出現故障,進而接管主節點資源。在這種情況下,就出現了資源争用情況,兩個節點都占用一個資源,造成資料沖突。針對這個情況,可以通過linux提供的核心監控子產品watchdog來解決這個問題,将watchdog內建到heartbeat中。如果heartbeat異常終止,或者系統出現故障,watchdog都會自動重新開機系統,進而釋放叢集資源,避免了資料沖突的發生。

在執行"killall -9 heartbeat"時,會在/var/log/messages中看到如下資訊:

softdog: wdt device closed unexpectedly. wdt will not stop! 

系統就會馬上重新開機

參考至:http://linux.chinaitlab.com/linuxjq/744842_6.html

          http://book.51cto.com/art/200912/168038.htm

          http://aaa3060.blog.163.com/blog/static/2817338520104314466314/

          http://blog.sina.com.cn/s/blog_5fc3a8b60100x0ge.html

本文原創,轉載請注明出處、作者

如有錯誤,歡迎指正

郵箱:[email protected]

作者:czmmiao 原文位址:http://czmmiao.iteye.com/blog/1174701

繼續閱讀