1. 程式人生 > >Oracle RAC 實例管理(Cluster Group Service)

Oracle RAC 實例管理(Cluster Group Service)

啟動 私有網絡 功能 丟失 cluster 基本 網絡 group rac

CGS是Oracle RAC 實例管理的實現方法,負責實現如下功能

1)實例之間的心跳機制

2)當實例離開或者加入集群時完成數據庫集群的重新配置

3)解決數據庫層面出現的腦裂


1,網絡心跳

數據庫層面的網絡心跳是通過LMON進程實現的,每個實例的LMON進程會定期通過數據庫的私網與所有遠程實例進行通信,以確認其他實例的狀態,如果,某一個實例一段時間之內不能夠響應其他節點發送的網絡心跳信息,那麽數據庫集群就需要進行重新配置,用戶能夠看到的最直觀的信息就是ora-29740錯誤。

2,磁盤心跳

數據庫層面的磁盤心跳和GI層面的磁盤心跳實現的功能基本相同,但是,由於數據庫層面並沒有VF存在,所以,實現方式會有所不同,對應RAC數據庫,LMON進程會將網絡心跳中包含的遠程節點的狀態信息發送給CKPT進程,CKPT進程默認每3s向數據庫的控制文件寫入本地實例能夠訪問的其他實例信息,從而完成數據庫實例的磁盤心跳。如果數據庫實例的磁盤心跳出現了問題,用戶能夠看到的最直觀的信息就是ora-494錯誤。

3,本地心跳

LMHB進程會定期監控LMON,LMS,LMD,LCK0等於cache fusion相關的重要後臺進程,如果LMHB進程發送某一個重要的後臺進程在一段時間之內沒有更新自己的狀態信息,就會進行分析,如果有必要通過重啟本地節點的方式來解決問題


重新配置的階段

階段1:重新配置主節點向所有其他節點發送重新配置消息,之後凍結每個實例的名稱服務和鎖相關信息。

階段2:決定新的實例狀態位圖(在這個階段,重新配置主節點會持有RR鎖決定新的實例狀態位圖),如果重新配置是由於實例離開導致的,進行實例恢復,之後,更新數據庫集群的incarnation。

階段3:如果重新配置的原因是實例離開數據庫集群,則刪除離開數據庫集群的實例的名稱服務中的數據。

階段4:重新發布數據庫集群的名稱服務信息,並恢復之前被凍結的鎖相關的操作。

階段5:之前凍結的資源被解凍,並通知GCS和GES開始進行內存融合相關的重新配置。


重新配置的類型

類型1:由於數據庫啟動或關閉導致的重新配置

類型2:由於某一個實例丟失網絡心跳導致的重新配置

類型3:由於某一個實例丟失磁盤心跳導致的重新配置

類型4:由於某一個內存融合相關的重要後臺進程丟失本地心跳導致的重新配置


類型2-4的重新配置的結果是有問題的實例被重新啟動


數據庫層面的腦裂

1)兩個實例之間的私有網絡出現問題,在一段時間之後(默認300s),兩個實例都發現無法和對方進行通信。

2)每個實例都嘗試獲得RR鎖,獲得了RR鎖的實例訪問控制文件中的實例狀態,並決定新的集群實例列表,獲得了RR鎖的實例會存活,另外一個實例被驅逐。


數據庫層面的腦裂和GI層面的含義是一致的,但是處理方式存在差別:GI層面的腦裂是基於節點編號,而數據庫層面的腦裂需要競爭RR鎖。


Oracle RAC 實例管理(Cluster Group Service)