如何診斷Oracle RAC叢集節點驅逐(重啟)問題
適用於
Oracle Database - Enterprise Edition - 版本 11.2.0.1 到 12.1.0.2 [發行版 11.2 到 12.1]
本文件所含資訊適用於所有平臺
用途
本文提供了診斷 11.2以及以後版本叢集節點驅逐問題的參考方法。對於 11.2 之前的叢集節點驅逐問題,請留言。
詳細資訊
節點驅逐概要
Oracle 叢集在發現一些嚴重問題時會將一個或多個節點從叢集中驅逐出去。這種嚴重問題包括節點沒有網路心跳、節點沒有磁碟心跳、伺服器無響應或者有嚴重效能問題、或者 ocssd.bin 無響應。節點驅逐的目的是通過去除一些節點來維護整個節點的健康。
從 11.2.0.2 RAC (或者是 Exadata),節點驅逐也許並不會真正重啟主機。這稱為 rebootless restart。這種情況下,我們會重啟大部分的叢集程序來確認是否可以解決這臺節點的問題。
1.0 - 會導致重啟的程序
OCSSD (aka CSS daemon) - 這個程序由 cssdagent 程序所啟動。對於使用第三方叢集件和沒有第三方叢集件的環境都有這個程序。OCSSD 的主要作用是節點間的健康監控以及資料庫例項的發現。健康監控包括網路心跳和磁碟心跳(針對選舉盤)。OCSSD 在收到客戶端(比如資料庫的 LMON 程序)的 member kill escalation 請求後,也可以發起節點驅逐。OCSSD 程序是一個以 Oracle 使用者身份執行的、多執行緒的、執行級別較高的程序。
啟動順序: INIT –> init.ohasd –> ohasd –> ohasd.bin –> cssdagent –> ocssd –> ocssd.bin
CSSDAGENT - 這個程序由 OHASD 程序啟動,CSSDAGENT 用於啟動 OCSSD 程序,它可以監控節點 hang(類似於 oprocd),同時也監控 OCSSD 程序 hang(類似於 oclsomon ),而且還監控第三方叢集件(類似於 vmon) 。這個程序是一個以 root 使用者身份執行的、多執行緒的、執行級別較高的程序。
啟動順序: INIT –> init.ohasd –> ohasd –> ohasd.bin –> cssdagent
CSSDMONITOR - 這個程序也會監控節點 hang(類似於 oprocd),同時也監控 OCSSD 程序 hang(類似於 oclsomon ),而且還監控第三方叢集件(類似於 vmon) 。這個程序是一個以 root 使用者身份執行的、多執行緒的、執行級別較高的程序。
啟動順序: INIT –> init.ohasd –> ohasd –> ohasd.bin –> cssdmonitor
2.0 - 確認由哪個程序發起了重啟
需要檢視的重要的檔案:
- Clusterware alert log in /log/
- The cssdagent log(s) in /log//agent/ohasd/oracssdagent_root
- The cssdmonitor log(s) in /log//agent/ohasd/oracssdmonitor_root
- The ocssd log(s) in /log//cssd
- The lastgasp log(s) in /etc/oracle/lastgasp 或者 /var/opt/oracle/lastgasp
- IPD/OS 或者 OS Watcher data
- GRID home 的’opatch lsinventory -detail’的輸出
- Messages 檔案:
Messages 檔案路徑:
- Linux: /var/log/messages
- Sun: /var/adm/messages
- HP-UX:/var/adm/syslog/syslog.log
- IBM: /bin/errpt -a > messages.out
在大部分情況下,11.2 叢集驅逐時會在叢集的 alert log 中記錄有意義的診斷資訊。通過這些資訊,可以確認是哪個程序發起了重啟。下面是叢集的 alert log 的樣例:
[ohasd(11243)]CRS-8011:reboot advisory message from host: sta00129, component: cssagent, with timestamp: L-2009-05-05-10:03:25.340
[ohasd(11243)]CRS-8013:reboot advisory message text: Rebooting after limit 28500 exceeded; disk timeout 27630, network timeout 28500, last heartbeat from CSSD at epoch seconds 1241543005.340, 4294967295 milliseconds ago based on invariant clock value of 93235653
這次驅逐是由於遇到了網路超時問題所導致。CSSD 程序退出後,CSSDAGENT 發起了重啟。CSSDAGENT 是從 CSSD 的本地心跳相關的錯誤中獲得了這些資訊。
如果在被驅逐的節點的叢集 alert log 中沒有相關資訊,請檢查本節點的 lastgasp 日誌,以及/或者其它節點的叢集 alert log。
3.0 - 診斷 OCSSD 發起的驅逐
如果遇到了 OCSSD 發起的驅逐,請參考 3.1 章節列出的常見原因:
3.1 - OCSSD 驅逐的常見原因
- 節點間的網路失敗或者延遲。在連續的30秒(預設值,由 CSS misscount 決定)心跳不通後,會導致節點驅逐。
- 無法讀寫 CSS選舉盤。如果一個節點無法完成對於大多數選舉盤的磁碟心跳,節點會被驅逐。
- Member kill escalation。比如,資料庫例項的LMON 程序可能會請求 CSS 將一個例項從叢集中驅逐。如果例項驅逐超時,會升級為節點驅逐。
- OCSSD程序發生錯誤或者hang,這種情況會由上面任何一種情況或者其它情況引起。
- Oracle bug。
3.2 - OCSSD 驅逐時需要收集和檢視的檔案
在章節 2.0 所列出的所有節點的所有檔案,也許還需要更多資訊。
由於選舉盤問題造成的驅逐的樣例:
CSS log:
2012-03-27 22:05:48.693: [ CSSD][1100548416](:CSSNM00018:)clssnmvDiskCheck: Aborting, 0 of 3 configured voting disks available, need 2
2012-03-27 22:05:48.693: [ CSSD][1100548416]###################################
2012-03-27 22:05:48.693: [ CSSD][1100548416]clssscExit: CSSD aborting from thread clssnmvDiskPingMonitorThread
OS messages:
Mar 27 22:03:58 choldbr132p kernel: Error:Mpx:All paths to Symm 000190104720 vol 0c71 are dead.
Mar 27 22:03:58 choldbr132p kernel: Error:Mpx:Symm 000190104720 vol 0c71 is dead.
Mar 27 22:03:58 choldbr132p kernel: Buffer I/O error on device sdbig, logical block 0
...
4.0 - 診斷 CSSDAGENT 或者 CSSDMONITOR 驅逐
如果遇到了 CSSDAGENT 或者 CSSDMONITOR 驅逐,請參考章節4.1列出的常見原因。
4.1 - CSSDAGENT 或者 CSSDMONITOR 驅逐的常見原因
- OS 排程問題。比如,OS 遇到了驅動、硬體問題或者主機負載太高 (CPU 100% 被使用)等問題,會導致 OS 排程異常。
- CSSD的一個或多個執行緒 hang。
- Oracle bug。 -
4.2 - CSSDAGENT 或者 CSSDMONITOR 驅逐需要收集和檢視的檔案
章節 2.0 所列出的所有節點的所有檔案,也許還需要更多資訊。
參考文件:
Troubleshooting Clusterware Node Evictions (Reboots) (文件 ID 1050693.1)