如果 probefail 變數非 0 (成功),nslookup 指令逾時或回覆來自於伺服器而非服務範例的 DNS。在其中任何一種情況下,DNS 伺服器都不會發揮預期的功能,而故障監視器會呼叫 decide_restart_or_failover() 函數,以決定是在本機重新啟動資料服務還是要求 RGM 將資料服務重新置於其他節點。如果 probefail 變數為 0,將產生探測成功的訊息。
if [ $probefail -ne 0 ]; then decide_restart_or_failover else logger -p ${SYSLOG_FACILITY}.err\ -t [$SYSLOG_TAG]\ "${ARGV0} Probe for resource HA-DNS successful" fi
decide_restart_or_failover() 函數使用時間間隔 (Retry_interval) 和失敗計數 (Retry_count) 來決定是否在本機上重新啟動 DNS,或要求 RGM 將資料服務遷移至其他節點。此函數將實作以下條件式邏輯。PROBE 程式程式碼清單中的 decide_restart_or_failover() 程式碼清單含有此程式碼。
如果這是第一次失敗,請重新啟動資料服務。記錄錯誤訊息並按 retries 變數中的計數器。
如果這不是第一次失敗,但已超出視窗,則請重新啟動資料服務。記錄錯誤訊息、重設計數器並滑動視窗。
如果時間仍在間隔內,並且重試次數已超出,則容錯移轉至其他節點。如果容錯移轉不成功,則記錄錯誤並以狀態 1 (失敗) 結束探測程式。
如果時間仍在視窗內,且尚未超出重試計數器,則請重新啟動資料服務。記錄錯誤訊息並按 retries 變數中的計數器。
如果重新啟動的次數達到了時間間隔內的限制次數,函數將要求 RGM 將資料服務重新置於其他節點。如果重新啟動的次數在限制範圍之內,或已超出間隔從而計數器重新開始計數,函數將嘗試重新啟動相同節點上的 DNS。請注意以下有關此函數的資訊:
gettime 公用程式用於追蹤重新啟動之間的時間。這是位於 (RT_basedir) 目錄的 C 程式。
系統定義的資源特性 Retry_count 和 Retry_interval 決定嘗試重新啟動的次數以及計數嘗試次數的時間間隔。在 RTR 檔案中,這些特性預設為在 5 分鐘 (300 秒) 內嘗試兩次,但是管理員可以變更這些值。
將呼叫 restart_service() 函數,以嘗試重新啟動相同節點上的資料服務。請參閱下一小節重新啟動資料服務,以取得有關此函數的資訊。
scha_control() API 函數透過 GIVEOVER 選項將含有資料服務範例的資源群組置於離線,並在其他節點上將其重新置於線上。