linux系統下 oprocd和hangcheck-timer的作用
預設分類 2010-10-11 13:38:36 閱讀106 評論0 字型大小:大中小 訂閱
一、hangcheck-timer
從oracle9.2.0.2.0開始到最近的11.1,Oracle,在linux下建立RAC時推薦使用一個I/O fencing模組,叫做hangcheck-timer,此模組作用是用來監測節點Linux kernel是否hang住,如果長時間hang住的話Oracle認為對RAC節點穩定性存在影響,就會重啟此節點. 此模組有三個參數hangcheck_tick和hangcheck_margin、hangcheck_reboot,如果kernel在hangcheck-tick和hangcheck-margin時間總和內無響應的話,hangcheck-timer根據hangcheck_reboot的值確定是否重啟系統.hangcheck_reboot大於等於1,重啟;0,不重啟。在2.6的核心中,預設值是0。那麼"Hangcheck: hangcheck value past margin!"警示資訊,表示由於hangcheck-reboot值為1。系統應該重啟但沒有重啟。
二、oprocd
linux平台上的Oracle Clusterware 10.2.0.4和以後版本引入了一個新的Oracle Clusterware Process Monitor Daemon (OPROCD)進程來監控系統狀態和叢集中的每個節點的健康狀態,就象已經在不使用第三方的cluster軟體的UNIX系統中提供的那樣,下面來看看OPROCD到底是何方神聖。
OPROCD在linux平台上的10.2.0.4版本中和hangcheck-timer一起運行,它和hangcheck-timer模組沒有聯絡和依賴關係,它由init.ccsd進程產生出來並用root使用者運行。OPROCD進程被鎖定在記憶體中來監控叢集中的每個它自己啟動並執行節點,來檢測機器上的硬體或者驅動的freezes,並且提供I/O的fencing功能(這和SCSI提供的中斷的fencing功能不同)。如果一個機器被凍結了足夠長的時間後,它被會叢集驅逐出節點,它自己需要強制重啟自己來阻止叢集從失敗的節點上的鎖資源被重新組織後,失敗的節點仍然訪問共用的資料檔案上的有疑問的I/O操作。為了提供這樣的功能,OPROCD執行檢查,然後停止運行(休眠),然後如果在期望的時間內不能被喚醒,OPROCD將重啟原生節點。
注意:OPROCD在第三方實現的叢集環境中是不存在的,因為在LINUX平台下沒有通過驗證的第三方的叢集解決方案,所以linux平台下的0.2.0.4版本中OPROCD將總是會存在的。
OPROCD啟動的時候有兩個參數:
-t : 逾時時間,預設1000,單位毫秒 (OPROCD_DEFAULT_TIMEOUT=1000)
-m : 重啟前可接受的延遲,單位毫秒,預設500 (OPROCD_DEFAULT_MARGIN=500)
推薦設定DIAGWAIT為13來增加重啟前可接受的時間來把更多的日誌資訊寫入磁碟。
預設的話,-m的間隔為500:
$ ps -efl | grep oprocd
0 S root 6444 3080 0 78 0 - 636 - Apr15 ? 00:00:00 /bin/sh /etc/init.d/init.cssd oprocd
4 S root 7255 6444 0 -40 - - 516 - Apr15 ? 00:00:00 /u01/app/crs11g/bin/oprocd run -t 1000 -m 500 -f
設定了DIAGWAIT為13會預設增加-m的時間,下面顯示設定DIAGWAIT為13後,-m參數值為10000
$ ps -efl | grep oprocd
0 S root 6444 3080 0 78 0 - 636 - Apr15 ? 00:00:00 /bin/sh /etc/init.d/init.cssd oprocd
4 S root 7255 6444 0 -40 - - 516 - Apr15 ? 00:00:00 /u01/app/crs11g/bin/oprocd run -t 1000 -m 10000 -f
三、兩者之間的聯絡
OPROCD和hangcheck-timer在linux平台下是同時運行並提供不同的檢測機制的,當他們導致節點重啟的話,在系統日誌中記錄的資訊是不同的:
oprocd導致的重啟會記錄"SysRq: resetting"
Hangcheck-timer導致的重啟會記錄"Hangcheck: hangcheck is restarting the machine"