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 秒) 的間隔內嘗試重新啟動 2 次。
將呼叫 restart_service() 函式,以嘗試重新啟動相同節點上的資料服務。 請參閱下一節 (重新啟動資料服務),以取得有關此函式的資訊。
透過 GIVEOVER 選項,scha_control() API 函式使包含資料服務範例的資源群組離線,並在其他節點上重新上線。