Oracle 面試寶典-RAC篇

chenoracle發表於2021-05-16

一:請介紹Oracle RAC啟動過程?
二:請介紹Oracle RAC常見日誌有哪些?
三:請介紹Oracle RAC Clusterware重要的服務和後臺程式?
四:請介紹Oracle RAC資料庫後臺程式?
五:請介紹Oracle RAC中的GCS、GES、GRD之間的關係?
六:請介紹Oracle RAC的隔離機制?
七:請介紹Oracle RAC相關的等待事件?

一:請介紹Oracle RAC啟動過程?

基本上我們可以把GI的啟動過程分成3個階段,ohasd階段,構建叢集階段,啟動資源階段。
11gR2的RAC出現了很多以agent結尾的代理程式,用來協助主程式完成叢集的管理工作。
這些程式都執行在spawns模式下,一旦執行失敗就會知道重啟,以維護RAC的高可用性。
首先由Linux的INIT程式執行init.ohasd指令碼啟動ohasd程式(Oracle高可用性 服務程式),這個程式將啟動4個代理程式。
其中:在11gR1中,/etc/init.d下有三個指令碼,分別是init.evmd,init.cssd,init.crsd,到11gR2只有一個ohasd指令碼。

第一層:

ohasd程式啟動四個代理程式,分別是:
(1)orarootagent
負責管理所有root使用者擁有的ohasd資源的代理程式。
(2)cssdagent
CSSD的代理程式(由它來生成CSSD程式)
(3)oraagent
負責管理所有oracle使用者擁有的ohasd資源的代理程式。
(4)cssdmonitor
同cssdagent一起監控CSSD的節點健康狀況。

第二層:

(1)orarootagent啟動如下4個程式:
CRSD 負責管理叢集資源的主要程式。
CTSSD 叢集時間同步服務程式。
Diskmon 磁碟監控程式。
ACFS Drivers ASM叢集檔案系統驅動程式。
(2)cssdagent啟動1個程式:
CSSD 叢集同步服務程式。
(3)oraagent啟動如下5個程式:
MDNSD DNS lookup時使用的資源。
EVMD  事件監控程式。
ASM   監控ASM例項的資源。
GIPCD 內聯整合和內連節點通訊時使用的資源。
GPNPD 即插即用主程式。
(4) cssdmonitor啟動1個程式:
cssdmontior CSSD程式監控程式。

第三層:

CRSD啟動如下2個程式:
oraagent  負責管理所有oracle使用者的所有crsd資源的代理程式。
orarootagent 負責管理所有root使用者的所有crsd資源的代理程式。

第四層:

oraagent啟動如下10個程式:
(1) ASM Resource
ASM例項資源。
(2) Diskgroup
管理,監控ASM磁碟組使用的資源。
(3) DB Resource
監控,管理資料庫和例項使用的資源。
(4) SCAN Listener
SCAN監聽器資源。
(5) Listener
節點監聽器資源。
(6) Services
監控,管理Services使用的資源。
(7) ONS
Oracle通知服務。
(8) eONS
增強的Oracle通知服務。
(9) GSD
向後相容9i的資源。
(10)GNS
網格命令服務(執行SCAN解析)的資源。

orarootagent啟動如下5個程式:

(1) Network Resource
監控公共網路資源。
(2) SCAN VIP
SCAN VIP資源。
(3) NODE VIP
每個節點一個的VIP資源。
(4) ACFS Registry
載入ACFS資源。
(5) GNS VIP
GNS VIP資源。

二:請介紹Oracle RAC常見日誌有哪些?

$GRID_HOME/log/<node_name>/alert<nodename>.log <==叢集日誌
$GRID_HOME/log/<node_name>/ocssd <==ocssd.bin日誌
$GRID_HOME/log/<node_name>/gpnpd <==gpnpd.bin日誌
$GRID_HOME/log/<node_name>/gipcd <==gipcd.bin日誌
$GRID_HOME/log/<node_name>/agent/crsd <==crsd.bin日誌
$GRID_HOME/log/<node_name>/agent/ohasd <==ohasd.bin日誌
$GRID_HOME/log/<node_name>/mdnsd <==mdnsd.bin日誌
$GRID_HOME/log/<node_name>/client <==使用者使用GI 工具(ocrdump, crsctl, ocrcheck, gpnptool等等)對叢集進行操作的日誌。
$GRID_HOME/log/<node_name>/ctssd <==ctssd.bin日誌
$GRID_HOME/log/<node_name>/crsd <==crsd.bin 日誌
$GRID_HOME/log/<node_name>/cvu <==cluvfy 日誌輸出。
$GRID_HOME/bin/diagcollection.sh <==透過這個指令碼獲得更全面的診斷日誌。

三:請介紹Oracle RAC Clusterware重要的服務和後臺程式?

Clusterware由叢集就緒服務層和高可用性 服務層兩個單獨的層組成。

叢集就緒服務層:透過叢集就緒服務(Cluster Ready Services,CRS)控制。

高可用性 服務層:透過Oracle高可用性 服務(High Availability Services)控制。

組成高可用性 服務層的主要程式:

(1) GPNPD(Grid Plug and Play) 
網格即插即用,幫助快速地新增叢集節點到叢集中。
對應程式gpnpd.bin.
(2) GIPC(Grid Interprocess Communication) 
支援守護程式使用多餘網路卡作為內部連結。
對應程式gipcd.bin。
(3)mDNS(Muliticast Domain Name Service)
用於GPnP在叢集中查詢profile,也用於使GNS去執行名稱解析,該程式在Linux和UNIX中是一個後臺程式,在Windows上是一個服務。
對應程式mdnsd.bin。
(4)GNS(Oracle Grid Naming Service)
網格命名服務,用於給叢集自動分配SCAN VIP和節點VIP,解析SCAN名稱等工作。
對應程式gnsd。
(5)CTSS(Cluster Time Synchronization Service)
叢集節點之間的時間應該是同步的,在11gR2中,Clusterware提供了CTSS服務,它能確保叢集中所有節點的時間是同步的。
如果在叢集配置期間沒有發現NTP服務,CTSS將在安裝的時候被預設配置。
對應程式octssd.bin。
(6)CRS(Cluster Ready Services)
CRS守護程式crsd管理儲存在OCR中的每個叢集資源,包括啟動、停止、監控和失敗切換操作。
當資源的狀態發生改變,crsd程式生成一個事件;
當有一個RAC節點被載入進來,crsd程式開始監控節點對應的例項、監聽器等資源;
當這些元件出現失敗情況,CRS會自動重啟它們。
對應程式crsd.bin。
(7)CSS(Cluster Synchronization Services)
CSS控制叢集包括的節點成員,並以發出通知的方式管理叢集配置,如果使用第三方叢集軟體,CSS程式層面使用第三方的叢集軟體管理叢集節點配置。
對應程式ocssd.bin、
(8)ASM
提供Clusterware磁碟檔案的儲存,ASM例項需要在cssd程式啟動之前啟動,且MOUNT相應磁碟組成功。
(9)EVM(Event Management)
一個後臺程式,釋出由Clusterware建立的事件,是CRS和CSS通訊的橋樑。
對應程式evmd.bin。

叢集就緒服務層

(1) ASM
提供用於資料檔案等儲存的ASM磁碟組管理。
(2) ONS(Oracle Notification Service)
為傳輸FAN(Fast Application Notionfation)事件釋出和註冊服務。
(3) oraagent(Oracle Agent)
擴大叢集支援的Oracle特殊要求和複雜資源。
對應程式oraagent.bin。
(4) orarootagent(Oracle Root Agent)
專門的oraagent程式,幫助crsd管理root使用者擁有的資源,如網路,網路虛擬IP地址資源。
對應程式orarootagent。

四:請介紹Oracle RAC資料庫後臺程式?

(1)LMON 全域性佇列服務監控器
LOCK Monitor Processes 也被稱為Global Enqueue Service Monitor
監控整個叢集狀況;
維護GCS的記憶體結構;
監控非正常終止的程式和例項;
當例項離開和加入叢集時,鎖和資源的重新配置;
管理和監控全域性的鎖和資源; 
處理死鎖和阻塞。
(2)LCK 例項佇列程式
Instance Enqueue Process
LCK程式主要用來管理例項間資源請求和跨例項呼叫操作;
呼叫操作包括資料字典等對像訪問,並處理非CACEH FUSION的CHACE資源請求(例如dictionary cache或row  cache的請求)  
由於LMS程式負責主要的鎖管理功能,所以每個例項只有一個LCK程式。
(3)LMD 全域性佇列服務守護程式
Lock  Monitor Deamon Process
Global Enqueue Service Daemon
LMD程式主要管理對全域性佇列和資源的訪問,並更新相應佇列狀態;
處理來自於其它例項的資源請;
每一個全域性佇列的當前狀態儲存在相應的例項共享記憶體中,該狀態表明該例項具有相應的權利使用該資源;
一個例項master的共享記憶體中存在一個特殊的佇列,該佇列記錄來自其它遠端例項的資源請求;
當遠端例項的LMD程式發出一個資源請求時,該請求指向master例項的LMD;
當master例項的LMD程式受到該請求後,在共享記憶體中的特殊佇列中監測該資源是否有無效;
如果有效LMD程式更新該資源對列的狀態,並通知請求資源的LMD程式該資源佇列可以使用了;
如果資源佇列正被其它例項使用或當前無效,則LMD程式通知正在使用中的例項的LMD程式應用釋放該資源;
等資源釋放變得有效時,master例項的LMD程式更新該資源佇列的狀態,並通知請求資源例項的LMD程式,該資源佇列可以使用了。
(4)LMSn 全域性快取服務程式
Lock Monitor Services也稱作GCS(Global Cache Service Process)
LMS程式主要用來管理叢集內資料庫的訪問,並在不同例項的buffer cache中傳輸塊映象,
當在某個資料塊上發生一致性讀時,LMS負責回滾該資料塊,並將它copy到請求的例項上。
每個RAC節點至少有2個LMS程式。
(5)DIAG 診斷守護程式
Diagnostic Deamon
oracle10g新的後臺程式,例行對例項的健康情況進行監控,同時也監控例項是否掛起或者出現死鎖。
收集例項和程式出錯時的關鍵診斷資訊,這個程式會更新alert日誌檔案,寫入一些重要告警資訊。

五:請介紹Oracle RAC中的GCS、GES、GRD之間的關係?

GRD(Global Resource Directory)
GCS全域性快取服務(Global Enqueue Service)
GES全域性佇列服務(Global Cache Service)
GRD、GCS、GES是Cache Fusion結構的核心。

RAC使用GRD記錄叢集資料庫中資源的使用資訊。GCS和GES共同維護GRD中的資訊。每個例項在SGA的一部分作為GRD的組成部分。
GRD中包括如下共享資源資訊:
(1)資料塊的識別符號,例如資料庫地址(Data Block Address,DBA)。
(2)如果資料塊在叢集中多個節點的Buffer Cache中存在,GRD中儲存該資料塊最新版本的位置。
(3)例項持有的資料塊的模式:Null(N)、Shared(S)、Exclusive(X)。
(4)每個例項持有的資料塊角色:Local或者Global。
GRD中的資訊是Cache Fusion的後設資料資訊,是Cache Fusion協調資源和管理的來源。

GRD是Cache Fusion的內部資料庫,儲存著所有例項資源的分佈情況。
GCS是具體執行Cache Fusion工作的服務,對應的程式是LMSn(n可以是0-9);
GES一方面協調各個例項之間的GCS完成資料傳遞的工作。另一方面還要完成Non-Cache Fusion資源的管理工作。對應的程式是LMD。
管理所有Non-Cache Fusion資源的同步,GES主要控制Dictionary Cache鎖和Library Cache鎖,同時,還對所有死鎖和資源死鎖起到檢測的作用。
其中GES協調全域性鎖的分配,之後GCS負責例項間資料塊的傳遞工作。

http://www.itpub.net/thread-1758255-1-1.html
GRD(Global Resource Service)
其實就是一張雜湊表,也就是一個全域性資源目錄。用來記錄各個RAC節點資源的使用情況。
每個例項掌握著某一組資源,所有例項加起來構成了GRD。
叢集組中的資源根據其權重平等的分佈在節點之間。
GRD由兩個服務管理,這兩個服務分佈為:全域性快取服務(GES)和全域性佇列服務(GES)。

GCS(Global Cache Service)
對應的程式是LMSn ,負責資料塊在例項間的傳遞。
GES(Global Enqueue Service)
對應的程式是LMD和LMON,負責在多個例項之間協調對資料塊的訪問順序,也就是管理佇列資源,保證資料的一致性訪問。
LMD是實現佇列資源的釋放和分配的,LMON主要監控節點的健康。

其他:
GES全域性佇列服務(Global Enqueue Service):
對應的程式是LMD和LMON,
主要負責維護字典快取和庫快取內的一致性。
字典快取是例項的內所儲存的對資料字典資訊的快取,用於高速訪問。
由於該字典資訊儲存在記憶體中,因而在某個節點上對字典進行的修改(如DDL)必須立即被傳播至所有節點上的字典快取。
GES負責處理上述情況,並消除例項間出現的差異。
出於同樣的原因,為了分析影響這些物件的SQL語句,資料庫內物件上的庫快取鎖會被去掉。
這些鎖必須在例項間進行維護,而全域性佇列服務必須確保請求訪問相同物件的多個例項間不會出現死鎖。
LMON、LCK和LMD 程式聯合工作來實現全域性佇列服務的功能。
GES是除了資料塊本身的維護和管理(由GCS完成)之外,在RAC環境中調節節點間其他資源的重要服務。
GCS全域性快取服務(Global Cache Service):
要和Cache Fusion結合在一起來理解,全域性快取要涉及到資料塊。
全域性快取服務負責維護該全域性緩衝儲存區內的快取一致性,確保一個例項在任何時刻想修改一個資料塊時,都可獲得一個全域性鎖資源,從而避免另一個例項同時修改該塊的可能性。
進行修改的例項將擁有塊的當前版本(包括已提交的和未提交的事物)以及塊的前象(post image)。
如果另一個例項也請求該塊,那麼全域性快取服務要負責跟蹤擁有該塊的例項、擁有塊的版本是什麼,以及塊處於何種模式。LMS 程式是全域性快取服務的關鍵組成部分。

六:請介紹下Oracle RAC的隔離機制?

在所有的高可用環境中幾乎都有心跳的存在。
心跳的主要目的是為了檢測叢集中節點的狀態,如果檢測失敗,管理軟體會認為某個節點存在故障,並根據一定的演算法來做出適當的處理。
避免對環境的破壞,即高可用性軟體的自動修復能力。
在RAC中,不同層次結構有不同的機制來檢測RAC的健康情況。
在叢集層,Clusterware軟體由網路心跳和磁碟心跳來檢測叢集節點的健康狀況。
如果Clusterware認為節點存在故障,那麼它會根據一定演算法來隔離故障節點,以避免對資料造成破壞。
透過故障的處理手段在一定程度上也能夠恢復故障節點到正常狀態。

1.網路心跳

透過私有網路來檢測節點的狀態。
如果由於私有網路硬體或軟體的故障,導致叢集節點間的私有網路在一定時間內無法進行正常通訊,這種現象被稱為腦裂。
出現腦裂時,Clusterware需要採取措施將不正確的叢集節點隔離出去,避免對儲存中的資料造成損壞。
私有網路出現不能正常通訊有一個超時時間,這個時間稱為misscount。透過crsctl工具可以查詢。
crsctl get css misscount
10.2.0.4以後網路心跳超時misscount為60s,11.2以後網路心跳超時misscount為30s。
如果超過30秒,Oracle認為節點間發生了腦裂,並會在Clusterware的日誌中會有相應心跳丟失的記錄。
注意:
在實施兩節點的叢集的時候,一定不能採用節點間直連的方式來組建心跳網路,這樣會導致心跳大量丟失,不利於Clusterware的穩定執行。

2.投票演算法

當出現腦裂的時候,Clusterware需要根據投票演算法將不正確的節點踢出叢集。
如果是3節點的叢集,分別是A,B,C。當節點A因故私有網路不能和其他兩個節點正常通訊,那麼整個叢集被分為兩部分。
A節點組成第一部分,投票擁有1票。
沒有出現故障的B和C能夠正常通訊,組成另外一部分,擁有2票。
Oracle的規定,控制權會交給票數較多的部分,也就是說,這種情況下擁有一票的A節點組成的部分會被踢出叢集,由B和C節點組成新叢集。
如果是2節點的叢集,兩部分各持一票,最先獲得表決磁碟一票的部分票數最多,將獲得叢集的控制權。
當出現腦裂時,Clusterware最重要的任務就是要保證錯誤節點與正確節點之間的I/O是隔離的,這樣才能避免對資料造成不一致的損壞。
而處理這個問題的方法就是踢出錯誤節點執行修復過程。
從Oracle 11gR2開始,還可以在安裝的時候或透過CRSCTL工具配置IPMI來實現I/O隔離的目的。

3.磁碟心跳

透過共享磁碟來檢測節點的狀態。
在Clusterware磁碟組檔案中,表決磁碟就是用於檢測Clusterware磁碟心跳的共享磁碟檔案。
每個節點需要週期性的寫磁碟心跳,通常每秒一次。
每個節點週期性的讀取心跳資料,通常每秒讀一次。
當資料的讀取出現問題時,通常引起腦裂。
和磁碟心跳有關的引數:
(1)disktimeout引數
crsctl get css disktimout
預設200秒,如果ocssd程式對錶決磁碟檢測時間超過disktimeout設定值,Oracle就會認為該表決磁碟檔案離線,並在Clusterware告警日誌中生成表決磁碟離線記錄。
如果節點表決磁碟離線的個數小於線上表決磁碟的個數,這個節點能夠倖存;
當離線表決磁碟的個數大於等於線上表決磁碟的個數時,Clusterware會認為節點的磁碟心跳出現問題,節點會將該節點逐出叢集,執行修復過程。
(2)reboottime引數
該參數列示節點被提出後,節點開始重啟允許的最大時間。
crsctl get css reboottime
預設3秒。

4.本地心跳(Local HeartBeat,LHB)

這種心跳機制是在11gR2版本中被引入的。
作用是監控ocssd.bin程式以及本地節點的狀態。
在10g版本中,Oracle透過oclsomon和oprocd來實現。
守護程式oclsomon.bin監控ocssd.bin程式的狀態,oprocd.bin程式監控本節點是否出現了效能問題(例如,hang住)。
從11.2.0.1版本開始,新的叢集cssdagent和cssdmonitor被引入,它們的功能就是監控本地節點的ocssd.bin程式狀態和本地節點的狀態(是否hang住)。
cssdagent和cssdmonitor的功能就是監控本地節點的ocssd.bin程式狀態和本地節點的狀態,對於ocssd.bin程式的監控是透過本地心跳來實現的。
Oracle會在每一秒鐘,在傳送網路心跳的同時向cssdagent和cssdmonitor傳送本地ocssd.bin程式的狀態(本地心跳)。
如果本地心跳沒有問題,cssdagent就認為ocssd.bin程式正常。
如果ocssd.bin程式持續丟失本地心跳(到達misscount的時間)ocssdagent就會認為本地節點的ocssd.bin程式出現了問題,並重啟該節點。

注意:
網路心跳和磁碟心跳是由OCSSD程式來檢測的,網路和儲存的穩定是一方面,OCSSD程式的穩定對RAC的穩定也至關重要。
不管是磁碟心跳還是網路心跳都依賴於cssd.bin程式來實施這些操作,在真實世界中任何造成cssd.bin這個普通使用者程式無法正常工作的原因均可能造成上述2種心跳超時。
原因包括但不侷限於CPU無法分配足夠的時間片、記憶體不足、SWAP、網路問題、Votedisk IO問題、本次磁碟IO問題等等。
此外在使用ASM的情況下,DB作為ASM例項的Client客戶; 
ASM例項會對DB例項的ASMB等程式進行監控, 以保證DB與ASM之間通訊正常。 
若DB的ASMB程式長期無響應(大約為200s)則ASM例項將考慮KILL DB的ASMB程式,由於ASMB是關鍵後臺程式所以將導致DB例項重啟。
也存在其他可能的情況,例如由於ASMB 被某些latch block, 會阻塞其他程式,導致PMON進行強制清理。
綜上所述不管是Clusterware的cssd.bin程式還是ASMB程式,他們都是OS上的普通使用者程式,OS本身出現的問題、超時、延遲均可能造成它們無法正常工作導致。
建議在確認對造成OS長時間的網路、IO延時的維護操作,考慮先停止節點上的Clusterware後再實施。

七:請介紹Oracle RAC相關的等待事件?

http://blog.itpub.net/29785807/viewspace-2155435/

叢集等待事件屬於以下類別之一:

(1) 面向塊的等待
1 gc current block 2-way
2 gc current block 3-way
3 gc cr block 2-way
4 gc cr block 3-way

(2) 面向訊息的等待
1 gc current grant 2-way
2 gc current grant 3-way
3 gc cr grant 2-way
4 gc cr grant 3-way

(3) 面向爭用的等待
1 gc current block busy
2 gc cr block busy
3 gc buffer busy acquire/release

(4) 面向負載的等待
1 gc current block congested
2 gc cr block congested
3 gc current grant congested
4 gc cr grant congested

#####2021-05-16 21:30 chenjuchao#####

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2772502/,如需轉載,請註明出處,否則將追究法律責任。

相關文章