RAC本質還是一個資料庫,採用了分布式鎖管理器。DLM作用是協調執行個體間對資源的競爭訪問,而執行個體內部的競爭和單一實例一樣。在RAC資料庫中一個節點想 要修改資料,都需要想DLM發送請求,通過DLM控制授權節點執行個體間的資料訪問,RAC間執行個體訪問粒度是資料區塊。DLM協調資源使用的功能叫做同步,所有 的資源訪問都是需要同步。RAC 將鎖分為本地鎖和全域鎖,本地鎖用於本地進程間的並發控制,也就是單一實例中的鎖機制。全域鎖用於叢集間的並發控制。
全域鎖分為cache fusion和non-cache fusion
non-cache susion資源有限主要是row cache存放對象定義,library cache存放SQL代碼,執行計畫等,這些都是有限的,同時這些資源修改的頻率也很小,所以oracle採用了類似廣播的機制,每個節點的變化都要通告 給其他節點,任何節點對對象的修改,所有其他節點上的對象都會失效。每個引用對象都會被LCK0進程多加上一個shared-mode的IV instance lock,由LMD進程負責LCK之間的廣播通訊。
cache fusions:主要是buufer cache資料區塊多,修改密集,不太適合每個修改都需要節點執行個體間廣播,其首要解決的問題就是資料拷貝在叢集間的 狀態分布圖。
在 RAC中GRD(Global Resource Directory)是一個位於SGA中,記錄每個資料區塊在叢集間的分布圖的內部資料區塊,每個執行個體都是部分GRD,所有執行個體的GRD匯總在一起才是一個完 整的GRD。RAC根據資源名稱在叢集中選擇一個節點為master node,其GRD中記錄該資源在所有的節點使用資訊;而其他節點作為shadow node的GRD只是記錄資源在該節點的使用資訊。
RAC的後台進程:
LMSn:cache fusion主要進程,負責資料區塊在執行個體間傳遞,對應的服務叫GCS,來源於Lock Manager Server,數量是通過GCS_SERVER_PROCESS來控制,範圍為0-9
LMD:提供Global Enqeue Service(GES).負責進程在多個執行個體間協調對資料區塊的訪問順序,保證資料訪問的一致性。
LCK:負責non-cache fusion資源的同步訪問,每個執行個體一個。
LMON:各個執行個體間進行定期通訊,以堅持各節點的健康情況,當某個節點出現故障時,負責重構叢集、GRD恢複等操作,它提供了Cluster Group Services(CGS).其服務有以下要點:
DIAG:監控進程執行個體的狀態,並在執行個體出現運行錯誤時收集診斷資料記錄到alert.log日誌中。
GSD:負責用戶端工具如srvctl使用者命令管理介面
檔案布局特點:
spfile,放在共用儲存
redo thread ,每個執行個體有一套自己的redo log檔案記錄日誌
archive log,每個執行個體都有自己的歸檔日誌,做media recovery時才會用到全部歸檔,也就才需要共用儲存,採用nfs,CIA或者ASM就可以
Undo tablespace,每個執行個體都要有自己的單獨復原資料表空間。
SCN:由GCS維護,所有執行個體節點都帶有SCN,每個節點將收到的SCN與原生SCN對比,如果原生SCN小,則調整原生SCN和接收到的一致,節點間定期通報,每個commit操作後需要向其他節點通報SCN。
cache fusion通過高速的private interconnect在執行個體間進行資料區塊傳遞,這個是RAC的核心工作機制,整個cache funsion有兩個服務:GCS和GES,GCS負責資料區塊在執行個體間的傳遞,而後者負責鎖管理。