ORACLE RAC架構記錄


在集羣中的所有節點上執行下列配置過程!

Oracle 9.0.1 和 9.2.0.1 使用一個名爲 watchdogd 的用戶空間監視後臺程序來監視集羣的狀態情況,並在出現故障時重新啓動 RAC 節點。從 Oracle 9.2.0.2 開始,此監視後臺程序已被名爲 hangcheck-timer 的模塊所代替,該模塊可以更好地解決可用性和可靠性問題。 hang-check 計時器被加載到 Linux 內核中並檢查系統是否掛起。它將設置一個計時器,並在特定的時間量之後檢查該計時器。有一個用於 檢查掛起情況的可配置閾值,如果超過該閾值,計算機將重新啓動。儘管 Oracle CRS 並不需要hangcheck-timer 模塊,但 Oracle 強烈建議使用它。


hangcheck-timer.o 模塊


hangcheck-timer 模塊使用了一個基於內核的計時器,該計時器週期性地檢查系統任務調度程序,以捕獲延遲,從而確定系統的運行狀況。如果系統掛起或暫停,則計時器重置該節點。hangcheck-timer 模塊使用時間戳計數器 (TSC) CPU 寄存器,該寄存器在每個時鐘信號處遞增。由於此寄存器由硬件自動更新,因此 TCS 提供了更精確的時間度量。


安裝 hangcheck-timer.o 模塊


hangcheck-timer 最初只由 Oracle 提供;但是,從內核版本 2.4.9-e.12 和更高版本開始,此模塊現在包含在 Red Hat Linux 中。如果您按照第 8 節(“獲取和安裝何適的 Linux 內核”)中的步驟執行,則已經包含了 hangcheck-timer。使用以下命令確認:
# find /lib/modules -name "hangcheck-timer.o"
/lib/modules/2.4.21-15.ELorafw1/kernel/drivers/char/hangcheck-timer.o
/lib/modules/2.4.21-27.0.2.ELorafw1/kernel/drivers/char/hangcheck-timer.o


配置並加載 hangcheck-timer 模塊


hangcheck-timer 模塊有兩個關鍵的參數:
  • hangcheck-tick:此參數定義了系統運行狀況檢查的間隔時段。默認值爲 60 秒;Oracle 建議將它設置爲 30 秒。



  • hangcheck-margin:此參數定義了 hangcheck-timer 在重啓 RAC 節點前所容許的最大掛起延遲。它定義了以秒爲單位的錯誤餘量。默認值爲 180 秒;Oracle 建議將它設置爲 180 秒。

注意:這兩個 hangcheck-timer 模塊參數指示在該模塊重置系統前 RAC 節點必須掛起多長時間。當以下條件爲真時將會重置節點:
系統掛起時間 > (hangcheck_tick + hangcheck_margin)

配置 Hangcheck 內核模塊參數


每次加載 hangcheck-timer 內核模塊(手動加載或由 Oracle 加載)時,它都需要知道對我們剛剛介紹的兩個參數(hangcheck-tick 和 hangcheck-margin)所使用的值。這些值需要在每次重新啓動 Linux 服務器後可用。爲此,請在 /etc/modules.conf 文件中創建一個具有正確值的條目,如下所示:

# su -
# echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modules.conf   (centos6.4裏爲/etc/modprobe.d/modules.conf)

每次加載 hangcheck-timer 內核模塊時,它將使用由我在 /etc/modules.conf 文件中創建的條目定義的值。


手動加載 Hangcheck 內核模塊以進行測試

Oracle 負責在需要時加載 hangcheck-timer 內核模塊。因此,不必在任何啓動文件(如 /etc/rc.local)中執行 hangcheck-timer 內核模塊的 modprobe 或 insmod。

我繼續在 /etc/rc.local 文件中包括 hangcheck-timer 內核模塊的 modprobe 完全只是出於個人習慣。有朝一日我將戒掉這個習慣,但請注意,啓動過程中包括 hangcheck-timer 內核模塊的 modprobe 並無害處。

爲了使自己保持清醒並能夠在夜晚入睡,我始終按如下所示在每次啓動時配置 hangcheck-timer 內核的加載:

# echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local


(注意:您不必在每次重新啓動後使用 modprobe 或 insmod 手動加載 hangcheck-timer 內核模塊。Oracle 將在需要時自動加載 hangcheck-timer 模塊。)

現在,爲了測試 hangcheck-timer 內核模塊以驗證它是否選取我們在 /etc/modules.conf 文件中定義的正確參數,請使用 modprobe 命令。儘管可以通過向其傳遞相應的參數(如 insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180)來加載 hangcheck-timer 內核模塊,但我們需要驗證它是否選取了我們在 /etc/modules.conf 文件中設置的選項。

要手動加載 hangcheck-timer 內核模塊並驗證它是否使用在 /etc/modules.conf 文件中定義的正確值,請運行以下命令:

# su -
# modprobe hangcheck-timer
# grep Hangcheck /var/log/messages | tail -2
Jan 30 22:11:33 linux1 kernel:Hangcheck:starting hangcheck timer 0.8.0 (tick is 30 seconds, margin is 180 seconds).
Jan 30 22:11:33 linux1 kernel:Hangcheck:Using TSC.
我還想要驗證是否加載了正確的 hangcheck-timer 內核模塊。爲進行確認,我通常刪除內核模塊(如果已經加載它),然後使用以下命令重新加載它:
# su -
# rmmod hangcheck-timer
# insmod hangcheck-timer
Using /lib/modules/2.4.21-27.0.2.ELorafw1/kernel/drivers/char/hangcheck-timer.o


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章