1.並發控制
在叢集環境中, 關鍵資料通常是共用存放的,比如放在共用磁碟上。 而各個節點的對資料有相同的存取權限, 這時就必須有某種機制能夠控制節點對資料的訪問。 Oracle RAC 是利用DLM(Distribute Lock Management) 機制來進行多個執行個體間的並發控制
2.健忘症(Amnesia)
叢集環境設定檔不是集中存放的,而是每個節點都有一個本機複本,在叢集正常運行時,使用者可以在任何節點更改叢集的配置,並且這種更改會自動同步到其他節點。
考慮這樣一種情境:兩個節點的叢集,節點A因為正常的維護需要被關閉,然後在節點B修改了某些配置,然後關閉節點B,啟動節點A。因為在節點B做的修改沒有同步到節點A,所以節點A啟動後仍然用的舊的設定檔,這時就會造成配置丟失,也就是所謂的健忘症
3.腦裂(Split Brain)
在叢集中,節點間通過某種機制(心跳)瞭解彼此的健康狀態,以確保各節點協調工作。 假設只有"心跳"出現問題, 各個節點還在正常運行, 這時,每個節點都認為其他的節點宕機了, 自己是整個叢集環境中的"唯一建在者",自己應該獲得整個叢集的"控制權"。 在叢集環境中,存放裝置都是共用的, 這就意味著資料災難, 這種情況就是"腦裂"
解決這個問題的通常辦法是使用投票演算法(Quorum Algorithm). 它的演算法機理如下:
叢集中各個節點需要心跳機制來通報彼此的"健康狀態",假設每收到一個節點的"通報"代表一票。對於三個節點的叢集,正常運行時,每個節點都會有3票。 當結點A心跳出現故障但節點A還在運行,這時整個叢集就會分裂成2個小的partition。 節點A是一個,剩下的2個是一個。 這是必須剔除一個partition才能保障叢集的健康運行。
對於有3個節點的叢集, A 心跳出現問題後, B 和 C 是一個partion,有2票, A只有1票。 按照投票演算法, B 和C 組成的叢集獲得控制權, A 被剔除。
如果只有2個節點,投票演算法就失效了。 因為每個節點上都只有1票。 這時就需要引入第三個裝置:Quorum Device. Quorum Device 通常採用餓是共用磁碟,這個磁碟也叫作Quorum disk。 這個Quorum Disk 也代表一票。 當2個結點的心跳出現問題時, 2個節點同時去爭取Quorum Disk 這一票, 最早到達的請求被最先滿足。 故最先獲得Quorum Disk的節點就獲得2票。另一個節點就會被剔除。
4.IO 隔離(Fencing)
當叢集系統出現"腦裂"問題的時候,我們可以通過"投票演算法"來解決誰獲得叢集控制權的問題。 但是這樣是不夠的,我們還必須保證被趕出去的結點不能操作共用資料。 這就是IO Fencing 要解決的問題。
IO Fencing實現有硬體和軟體2種方式:
軟體方式:對於支援SCSI Reserve/Release 命令的存放裝置, 可以用SG命令來實現。 正常的節點使用SCSI Reserve命令"鎖住"存放裝置, 故障節點發現存放裝置被鎖住後,就知道自己被趕出了叢集,也就是說自己出現了異常情況, 就要自己進行重啟,以恢複到正常狀態。 這個機制也叫作 Sicide(自殺). Sun 和Veritas 使用的就是這種機制。
硬體方式:STONITH(Shoot The Other Node in the Head), 這種方式直接操作電源開關,當一個節點發生故障時,另一個節點如果能偵測到,就會通過串口發出命令,控制故障節點的電源開關,通過暫時斷電,而又上電的方式使故障節點被重啟動, 這種方式需要硬體支援。
---摘自《大話 oracle rac》