Oracle RAC叢集、程式、日誌簡介

kuqlan發表於2015-04-15

                                                                   

Oracle RAC叢集、程式、日誌簡介

                                                                                                                                  轉自  Oracle RAC叢集、程式、日誌簡介

在單機環境下,Oracle是執行在OS Kernel 之上的。 OS Kernel負責管理硬體裝置,並提供硬體訪問介面。 Oracle 不會直接操作硬體,而是有OS Kernel代替它來完成對硬體的呼叫請求。

在叢集環境下, 儲存裝置是共享的。OS Kernel 的設計都是針對單機的,只能控制單機上多個程式間的訪問。 如果還依賴OS Kernel的服務,就無法保證多個主機間的協調工作。 這時就需要引入額外的控制機制,在RAC中,這個機制就是位於Oracle 和 OS Kernel 之間的Clusterware,它會在OS Kernel之前截獲請求,然後和其他結點上的Clusterware協商,最終完成上層的請求。

在Oracle 10G之前,RAC 所需要的叢集件依賴與硬體廠商,比如SUN,HP,Veritas. 從Oracle 10.1版本中,Oracle 推出了自己的叢集產品. Cluster Ready Service(CRS),從此RAC 不在依賴與任何廠商的叢集軟體。 在Oracle 10.2版本中,這個產品改名為:Oracle Clusterware。

因此要了解Oracle RAC叢集的最好要從理解叢集(cluster)的組成、程式及相關日誌檔案的位置開始。

Oracle RAC叢集、程式、日誌簡介

Clusterware 組成

Oracle Cluster 是一個單獨的安裝包,安裝後,在每個結點上的Oracle Clusterware 會自動啟動。 Oracle Clusterware的執行環境由2個磁碟檔案(OCR,Voting Disk),若干程式和網路元素組成。

1 磁碟檔案:

Clusterware 在執行期間需要兩個檔案:OCR和Voting Disk. 這2個檔案必須存放在共享儲存上。

OCR 中儲存整個叢集的配置資訊,配置資訊以"Key-Value" 的形式儲存其中。 在Oracle 10g以前, 這個檔案叫作Server Manageability Repository(SRVM). 在Oracle 10g, 這部分內容被重新設計,並重名為OCR.在Oracle Clusterware 安裝的過程中, 安裝程式會提示使用者指定OCR位置。並且使用者指定的這個位置會被記錄在/etc/oracle/ocr.Loc(Linux System) 或者/var/opt/oracle/ocr.Loc(Solaris System)檔案中。 而在Oracle 9i RAC中,對等的是srvConfig.Loc檔案。 Oracle Clusterware在啟動時會根據這裡面的內容從指定位置讀入OCR 內容。

1). OCR key

整個OCR 的資訊是樹形結構,有3個大分支。分別是SYSTEM,DATABASE 和CRS。每個分支下面又有許多小分支。這些記錄的資訊只能由root使用者修改。

2) OCR process

Oracle Clusterware 在OCR中存放叢集配置資訊,故OCR 的內容非常的重要,所有對OCR的操作必須確保OCR 內容完整性,所以在ORACLE Clusterware執行過程中,並不是所有結點都能操作OCR Disk.

在每個節點的記憶體中都有一份OCR內容的拷貝,這份拷貝叫作OCR Cache。 每個結點都有一個OCR Process 來讀寫OCR Cache,但只有一個節點的OCR process能讀寫OCR Disk中的內容,這個節點叫作OCR Master結點。 這個節點的OCR process 負責更新本地和其他結點的OCR Cache內容。

所有需要OCR 內容的其他程式,比如OCSSD,EVM等都叫作Client Process, 這些程式不會直接訪問OCR Cache,而是向OCR Process傳送請求,藉助OCR Process獲得內容,如果想要修改OCR 內容,也要由該節點的OCR Process像Master node 的OCR process 提交申請,由Master OCR Process完成物理讀寫,並同步所有節點OCR Cache中的內容。

3) Voting Disk

Voting Disk 這個檔案主要用於記錄節點成員狀態,在出現腦裂時,決定那個Partion獲得控制權,其他的Partion必須從叢集中剔除。在安裝Clusterware時也會提示指定這個位置。 安裝完成後可以通過如下命令來檢視Voting Disk位置。

$Crsctl query css votedisk

Clusterware 後臺程式

Clusterware 由若干程式組成,其中最重要的3個是:CRSD,CSSD,EVMD. 在安裝clusterware的最後階段,會要求在每個節點執行root.sh 指令碼, 這個指令碼會在/etc/inittab 檔案的最後把這3個程式加入啟動項,這樣以後每次系統啟動時,Clusterware 也會自動啟動,其中EVMD和CRSD 兩個程式如果出現異常,則系統會自動重啟這兩個程式,如果是CSSD 程式異常,系統會立即重啟。

1). OCSSD

OCSSD 這個程式是Clusterware最關鍵的程式,如果這個程式出現異常,會導致系統重啟,這個程式提供CSS(Cluster Synchronization Service)服務。 CSS 服務通過多種心跳機制實時監控叢集狀態,提供腦裂保護等基礎叢集服務功能。

CSS 服務有2種心跳機制: 一種是通過私有網路的Network Heartbeat,另一種是通過Voting Disk的Disk Heartbeat.

這2種心跳都有最大延時,對於Disk Heartbeat, 這個延時叫作IOT (I/O Timeout);對於Network Heartbeat, 這個延時叫MC(Misscount)。 這2個引數都以秒為單位,預設時IOT大於MC,在預設情況下,這2個引數是Oracle 自動判定的,並且不建議調整。可以通過如下命令來檢視引數值:

$crsctl get css disktimeout

$crsctl get css misscount

注:除了Clusterware 需要這個程式,在單節點環境中如果使用了ASM,也需要這個程式;這個程式用於支援ASM Instance 和RDBMS Instance之間的通訊。 如果在使用了ASM的節點上安裝RAC,會遇到一個問題:RAC節點要求只有一個OCSSD程式,並且應該是執行$CRS_HOME目錄下的,這時就需要先停止ASM,並通過$ORACLE_HOME/bin/localcfig.Sh delete 刪除之前的inittab 條目。 之前安裝ASM時,也使用這個指令碼來啟動OCSSD: $ORACLE_HOME/bin/localconfig.Sh add.

2). CRSD

CRSD是實現"高可用性(HA)"的主要程式,它提供的服務叫作CRS(Cluster Ready Service) 服務。

Oracle Clusterware是位於叢集層的元件,它要為應用層資源(CRS Resource) 提供"高可用性服務",所以, Oracle Clusterware 必須監控這些資源,並在這些資源執行異常時進行干預,包括關閉,重啟程式或者轉移服務。CRSD程式提供的就是這些服務。

所有需要 高可用性 的元件,都會在安裝配置的時候,以CRS Resource的形式登記到OCR中,而CRSD 程式就是根據OCR中的內容,決定監控哪些程式,如何監控,出現問題時又如何解決。也就是說,CRSD 程式負責監控CRS Resource 的執行狀態,並要啟動,停止,監控,Failover這些資源。 預設情況下,CRS 會自動嘗試重啟資源5次,如果還是失敗,則放棄嘗試。

CRS Resource 包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, Instance 和 Service. 這些資源被分成2類:

GSD,ONS,VIP 和 Listener 屬於Noteapps類

Database,Instance 和Service 屬於 Database-Related Resource 類。

可以這樣理解: Nodeapps 就是說每個節點只需要一個就夠了,比如每個節點只有一個Listener,而Database-Related Resource 就是說這些資源和資料庫有關,不受節點的限制,比如一個節點可以有多個例項,每個例項可以有多個Service。

GSD,ONS,VIP 這3個服務是在安裝Clusterware的最後,執行VIPCA 時建立並登記到OCR中的。 而Database, Listener, Instance 和Service 是在各自的配置過程中自動或者手動登記到OCR中的。

3). EVMD

EVMD 這個程式負責釋出CRS 產生的各種事件(Event). 這些Event可以通過2種方式釋出給客戶:ONS 和 Callout Script. 使用者可以自定義回撥指令碼,放在特定的目錄下,這樣當有某些事件發生時,EVMD會自動掃描該目錄,並呼叫使用者的指令碼,這種呼叫是通過racgevt程式來完成的。

EVMD 程式除了複雜釋出事件之外,它還是CRSD 和CSSD 兩個程式之間的橋樑。 CRS 和CSS 兩個服務之前的通訊就是通過EVMD 程式完成的。

4). RACGIMON

RACGIMON 這個程式負責檢查資料庫健康狀態,負責Service的啟動,停止,故障轉移(Failover)。 這個程式會建立到資料庫的持久連線,定期檢查SGA中的特定資訊,該資訊由PMON 程式定時更新。

5). OPROCD

OPROCD 這個程式也叫作 Process Monitor Daemon. 如果在非Linux 平臺上,並且沒有使用第三方的叢集軟體時,就會看到這個程式。 這個程式用來檢查節點的Processor Hang(CPU 掛起), 如果排程時間超過1.5秒, 就會認為CPU 工作異常,會重啟節點。 也就是說這個程式提供 "IO 隔離" 的功能。 從其在Windows 平臺上的服務名: OraFnceService 也可以看出它的功能。 而在Linux 平臺上, 是利用Hangcheck-timer 模組來實現"IO 隔離"的。

Clusterware 的日誌

Oracle Clusterware的輔助診斷,要從log 和trace 進行。 而且它的日誌體系比較複雜,如下圖所示:

Oracle RAC叢集、程式、日誌簡介

alert.log:

$ORA_CRS_HOME/log/hostname/alert.Log, 這是首選的檢視檔案。

Clusterware後臺程式日誌:

crsd.Log: $ORA_CRS_HOME/log/hostname/crsd/crsd.Log

ocssd.Log: $ORA_CRS_HOME/log/hostname/cssd/ocsd.Log

evmd.Log: $ORA_CRS_HOME/log/hostname/evmd/evmd.Log

Nodeapp日誌位置:

$ORA_CRS_HOME/log/hostname/racg/

這裡面放的是nodeapp的日誌,包括ONS和VIP,比如:ora.Rac1.ons.Log

CRS日誌(Oracle 10g)

Oracle RAC叢集、程式、日誌簡介

CRS日誌(Oracle 11gR2)

Oracle RAC叢集、程式、日誌簡介

主機重啟檢視步驟

主機重啟時需要檢視的作業系統日誌:

Oracle RAC叢集、程式、日誌簡介

CRS日誌

雙節點的alert日誌

資料庫的smon,pmon,lmon,lmd,lms,diag等後臺程式日誌

當機前後的ash/awr/statspack報告

當機前後的主機監控資料

udump下的相關trace檔案

相關文章