【DB筆試面試717】在Oracle中,RAC的腦裂和健忘分別指的是什麼?

  • 2019 年 12 月 30 日
  • 筆記

題目部分

在Oracle中,RAC的腦裂和健忘分別指的是什麼?

答案部分

(一)腦裂(SplitBrain)

在集群中,節點間通過心跳來了解彼此的健康狀態,以確保各節點協調工作。假設只有「心跳」出現問題,但各個節點還在正常運行,這時,每個節點都認為其它的節點宕機了,自己才是整個集群環境中的「唯一健在者」,自己應該獲得整個集群的「控制權」。在集群環境中,存儲設備都是共享的,這就意味著數據災難。簡單點說,就是如果由於私有網路硬體或軟體的故障,導致集群節點間的私有網路在一定時間內無法進行正常的通訊,這種現像稱為腦裂。在發生腦裂情況後,集群的某些節點間的網路心跳丟失,但磁碟心跳依然正常,集群根據投票演算法(Quorum Algorithm)將不正確的節點踢出集群。磁碟心跳的主要目的是當集群發生腦裂時可以幫助指定腦裂的解決方案。

私網網路不能正常通訊有一個超時時間,稱為MC(Misscount),默認為30s(通過命令「crsctl get css misscount」查詢)。該時間允計集群節點間不能正常通訊的最大時間為30s,如果超過30s,那麼Oracle認為節點間發生了腦裂。在出現腦裂後,集群的重要任務就是保證錯誤節點與正確節點間的I/O是隔離的,這樣才能避免對數據造成不一致的損壞。處理這個問題的方法就是:踢出錯誤節點執行修復過程。

(二)健忘(Amnesia)

集群環境的配置文件不是集中存放的,而是每個節點都有一個本地副本,在集群正常運行時,用戶可以在任何節點更改集群的配置,並且這種更改會自動同步到其它節點。健忘是由於某個節點更新了OCR(Oracle Cluster Registry,Oracle集群註冊)中的內容,而集群中的另外一些節點此時處於關閉、維護或重啟階段,OCR Master進程來不及將其資訊更新到這些異常節點快取而導致的不一致。譬如,A節點發出了添加OCR鏡像的命令,在這個時候B節點處於重啟階段。重啟後A已經更新完畢,而此時B並不知道已經為OCR增加了一個新的鏡像磁碟,健忘由此而生。OCR用於解決健忘問題。

& 說明:

Oracle Clusterware把整個集群的配置資訊放在共享存儲上,這個存儲就是OCR Disk。在整個集群中,只有一個節點能對OCR Disk進行讀寫操作,這個節點叫作Master Node。所有節點都會在記憶體中保留一份OCR的拷貝,同時有一個OCR Process從這個記憶體中讀取內容。當OCR內容發生改變時,由Master Node的OCR Process負責同步到其它節點的OCR Process。

有關OCR的備份和恢復可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2121470

本文選自《Oracle程式設計師面試筆試寶典》,作者:小麥苗