Oracle Cluster 是一個單獨的安裝包,安裝後,在每個結點上的Oracle Clusterware 會自動啟動。 Oracle Clusterware的運行環境由2個磁碟檔案(OCR,Voting Disk),若干進程和網路元素組成。
磁碟檔案:
Clusterware 在運行期間需要兩個檔案:OCR和Voting Disk. 這2個檔案必須存放在共用儲存上。 OCR 用於解決健忘問題,Voting Disk 用於解決腦列問題。 Oracle 建議使用裸裝置來存放這2個檔案,每個檔案建立一個裸裝置,每個裸裝置分配100M左右的空間就夠了。
1.1 OCR
健忘問題是由於每個節點都有配置資訊的拷貝,修改節點的配置資訊不同步引起的。 Oracle 採用的解決方案就是把這個設定檔放在共用的儲存上, 這個檔案就是OCR Disk。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.2 Voting Disk
Voting Disk 這個檔案主要用於記錄節點成員狀態,在出現腦裂時,決定那個Partion獲得控制權,其他的Partion必須從叢集中剔除。在安裝Clusterware時也會提示指定這個位置。 安裝完成後可以通過如下命令來查看Voting Disk位置:$Crsctl query css votedisk
後台進程:
Clusterware 由若干進程組成,其中最重要的3個是:CRSD,CSSD,EVMD. 在安裝clusterware的最後階段,會要求在每個節點執行root.sh 指令碼, 這個指令碼會在/etc/inittab 檔案的最後把這3個進程加入啟動項,這樣以後每次系統啟動時,Clusterware 也會自動啟動,其中EVMD和CRSD 兩個進程如果出現異常,則系統會自動重啟這兩個進程,如果是CSSD 進程異常,系統會立即重啟
1 [root@node1 ~]# ls -l /etc/init.d/init.*2 -r-xr-xr-x 1 root root 1951 Mar 24 05:30 /etc/init.d/init.crs3 -r-xr-xr-x 1 root root 4719 Mar 24 05:30 /etc/init.d/init.crsd --CRSD4 -r-xr-xr-x 1 root root 35399 Mar 24 05:30 /etc/init.d/init.cssd --CSSD5 -r-xr-xr-x 1 root root 3195 Mar 24 05:30 /etc/init.d/init.evmd --EVMD6 [root@node1 ~]#
2.1 CSSD的子進程OCSSD:
1 [oracle@node1 bin]$ ps -ef|grep -v grep|grep cssd2 root 5673 1 0 23:15 ? 00:00:00 /bin/sh /etc/init.d/init.cssd fatal3 root 6328 5673 0 23:19 ? 00:00:00 /bin/sh /etc/init.d/init.cssd daemon4 root 6453 6328 0 23:19 ? 00:00:00 /bin/su -l oracle -c /bin/sh -c 'ulimit -c unlimited; cd/opt/ora10g/product/10.2.0/crs_1/log/node1/cssd; /opt/ora10g/product/10.2.0/crs_1/bin/ocssd || exit $?'5 oracle 6454 6453 0 23:19 ? 00:00:00 /bin/sh -c ulimit -c unlimited; cd /opt/ora10g/product/10.2.0/crs_1/log/node1/cssd; /opt/ora10g/product/10.2.0/crs_1/bin/ocssd || exit $?6 oracle 6489 6454 0 23:19 ? 00:00:00 /opt/ora10g/product/10.2.0/crs_1/bin/ocssd.bin
OCSSD這個進程是Clusterware最關鍵的進程,如果這個進程出現異常,會導致系統重啟,這個進程提供CSS(Cluster Synchronization Service)
服務。CSS服務負責整個叢集配置,確定哪些節點是叢集裡的成員,每當有一個節點加入或離開叢集時,CSS負責通知其他節點更新叢集配置。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.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
2.3 EVMD進程:
EVMD 這個進程負責發布CRS 產生的各種事件(Event). 這些Event可以通過2種方式發布給客戶:ONS 和 Callout Script. 使用者可以自訂回調指令碼,放在特定的目錄下,這樣當有某些事件發生時,EVMD會自動掃描該目錄,並調用使用者的指令碼,這種調用是通過racgevt進程來完成的。
EVMD 進程除了複雜發布事件之外,它還是CRSD 和CSSD 兩個進程之間的橋樑。 CRS 和CSS 兩個服務之前的通訊就是通過EVMD 進程完成的。
網路元素--VIP原理和特點
3.1 VIP原理:
Oracle 的TAF 就是建立在VIP 技術之上的。 IP 和VIP 區別在與: IP 是利用TCP層逾時,VIP 利用的是應用程式層的立即響應。VIP它是浮動的IP. 當一個節點出現問題時會自動的轉到另一個節點上。假設有一個2個節點的RAC,正常運行時每個節點上都有一個VIP。當節點2發生故障,RAC 會做如下操作:
1). CRS 在檢測到rac2節點異常後,會觸發Clusterware 重構,最後把rac2節點剔除叢集,由節點1組成新的叢集。2). RAC的Failover 機制會把節點2的VIP轉移到節點1上,這時節點1的PUBLIC 網卡上就有3個IP 位址: VIP1,VIP2, PUBLIC IP1.3). 使用者對VIP2的串連請求會被IP層路由轉到節點14). 因為在節點1上有VIP2的地址,所有資料包會順利通過路由層,網路層,傳輸層。5). 但是,節點1上只監聽VIP1和public IP1的兩個IP地址。並沒有監聽VIP2,故應用程式層沒有對應的程式接收這個資料包,這個錯誤立即被捕獲。6). 客戶段能夠立即接收到這個錯誤,然後客戶段會重新發起向VIP1的串連請求。
3.2 VIP 特點:
1). VIP 是通過VIPCA指令碼建立的2). VIP 作為Nodeapps類型的CRS Resource 註冊到OCR中,並由CRS 維護狀態。3). VIP 會綁定到節點的public 網卡上,故public 網卡有2個地址。4). 當某個節點發生故障時,CRS 會把故障節點的VIP 轉移到其他節點上。5). 每個節點的Listener 會同時監聽public 網卡上的 public ip 和VIP6). 用戶端的tnsnames.Ora 一般會配置指向節點的VIP.
Clusterware 的日誌體系:
首選的查看檔案:alert.log $CRS_HOME/log/[node]/alert.Log Clusterware後台進程日誌:crsd.Log $CRS_HOME/log/[node]/crsd/crsd.Logocssd.Log $CRS_HOME/log/[node]/cssd/ocsd.Logevmd.Log $CRS_HOME/log/[node]/evmd/evmd.Log Nodeapp日誌位置:$CRS_HOME/log/[node]/racg/ --包括ONS和VIP,比如:ora.Rac1.ons.Log 工具執行日誌:$CRS_HOME/log/[node]/client/ --ocrcheck, ocrconfig,ocrdump,oifcfg和clscfg 這些工具產生的日誌就放在這個目錄下
--整理自《大話 oracle rac》