Oracle RAC(Real Application Clusters)


       Oracle RAC 運行於集群之上,為 Oracle 數據庫提供了最高級別的可用性、可伸縮性和低成本計算能力。如果集群內的一個節點發生故障,Oracle 將可以繼續在其余的節點上運行。Oracle 的主要創新是一項稱為高速緩存合並的技術。高速緩存合並使得集群中的節點可以通過高速集群互聯高效地同步其內存高速緩存,從而最大限度地低降低磁盤 I/O。高速緩存最重要的優勢在於它能夠使集群中所有節點的磁盤共享對所有數據的訪問,數據無需在節點間進行分區。Oracle 是唯一提供具備這一能力的開放系統數據庫的廠商。

RAC體系架構圖:

                                                                     

       Oracle RAC 的核心是共享磁盤子系統,集群中所有節點必須能夠訪問所有數據、重做日志文件、控制文件和參數文件,數據磁盤必須是全局可用的,允許所有節點訪問數據庫,每個節點有它自己的重做日志,但是其他節點必須能夠訪問它們以便在那個節點出現系統故障時能夠恢復。 

一、RAC 的體系結構

        RAC 是 Oracle 數據庫的一個群集解決方案,是有着兩個或者兩個以上的數據庫節點協調運作能力的。如下圖所示:

                                

        集群管理器(Cluster Manager)在集群系統中對其他各個模塊進行整合,通過高速的內連接來提供群集節點之間的通信。各節點之間內連接使用心跳線互聯,心跳線上的信息功能確定群集邏輯上的節點成員信息和節點更新情況,以及節點在某個時間點的運行狀態,保證群集系統正常運行。     

        RAC 的結構組成和機制

  1. 集群的節點(Cluster node)——2 個到 N 個節點或者主機運行 Oracle Database Server。
  2. 私有網絡(Network Interconnect)——RAC 之間需要一個高速互聯的私有網絡來處理通信和 Cache Fusion。
  3. 共享存儲(shared Storage)——RAC 需要共享存儲設備讓所有的節點都可以訪問數據文件。
  4. 對外服務的網絡(Production Network)——RAC 對外服務的網絡。客戶端和應用都通過這個網絡來訪問。

二、RAC 服務進程        

  • CRS-集群資源服務(cluster ready services)

管理集群內高可用操作的基本程序
CRS管理的任何事務被稱之為資源
數據庫、實例、監聽、虛擬IP、應用進程等等
CRS是跟據存儲於OCR中的資源配置信息來管理這些資源
當一資源的狀態改變時,CRS進程生成一個事件

  • CSS-集群同步服務(Cluster Synchronization Service)

管理集群節點的成員資格
控制哪 個結點為集群的成員、節點在加入或離開集群時通知集群成員來控制集群配置信息
此進程發生故障導致集群重啟

  • EVMD事件管理服務(Event Management)

事件管理守護進程
發布CRS創建事件的后台進程
ONS-事件的發布及訂閱服務(Oracle Notification Service)
通信的快速應用通知事件的發布及訂閱服務

  • OCR- Oracle Cluster Register

集群注冊文件,記錄每個節點的相關信息
保存RAC集群的各種資源信息
類似於windows注冊表
存儲於共享磁盤上,所有實例共享
默認有2個互備磁盤

  • Voting Disk 表決磁盤

仲裁機制用於仲裁多個節點向共享節點財時寫的行為,避免發生沖突
存儲於共享磁盤上,所有實例共享
用於確定各個實例的關系
當有節點失效時,通過voting disk來決定驅逐哪個實例
默認有3個互備磁盤

三、RAC 后台進程        

       Oracle RAC 有一些自己獨特的后台進程,在單一實例中不發揮配置作用。如下圖所示,定義了一些 RAC 運行的后台進程。這些后台進程的功能描述如下。

                 

     LMS(Global cache service processes 全局緩存服務進程)進程主要用來管理集群內數據塊的訪問,並在不同實例的 Buffer Cache 中傳輸數據塊鏡像。直接從控制的實例的緩存復制數據塊,然后發送一個副本到請求的實例上。並保證在所有實例的 Buffer Cache 中一個數據塊的鏡像只能出現一次。LMS 進程靠着在實例中傳遞消息來協調數據塊的訪問,當一個實例請求數據塊時,該實例的 LMD 進程發出一個數據塊資源的請求,該請求指向主數據塊的實例的 LMD 進程,主實例的 LMD 進程和正在使用的實例的 LMD 進程釋放該資源,這時擁有該資源的實例的 LMS 進程會創建一個數據塊鏡像的一致性讀然后把該數據塊傳遞到請求該資源的實例的BUFFER CACHE 中。LMS 進程保證了在每一時刻只能允許一個實例去更新數據塊,並負責保持該數據塊的鏡像記錄(包含更新數據塊的狀態 FLAG)。RAC 提供了 10 個 LMS 進程(0~9),該進程數量隨着節點間的消息傳遞的數據的增加而增加。

       LMON(Lock Monitor Process,鎖監控進程)是全局隊列服務監控器,各個實例的 LMON 進程會定期通信,以檢查集群中各個節點的健康狀況,當某個節點出現故障時,負責集群重構、GRD 恢復等操作,它提供的服務叫做 Cluster Group Service(CGS)。

       LMON 主要借助兩種心跳機制來完成健康檢查。

  • 節點間的網絡心跳(NETWORK HEARTBEAT):可以想象成節點間定時的發送 ping 包檢測節點狀態,如果能在規定時間內收到回應,就認為對方狀態正常。
  • 通過控制文件的磁盤心跳(CONTROLFILE HEARTBEAT):每個節點的 CKPT 進程每隔 3 秒鍾更新一次控制文件的數據塊,這個數據塊叫做 Checkpoint Progress Record,控制文件是共享的,所以實例間可以互相檢查對方是否及時更新來判斷。

      LMD(THE GLOBAL ENQUEUE SERVICE DAEMON,鎖管理守護進程)是一個后台進程,也被稱為全局的隊列服務守護進程,因為負責對資源的管理要求來控制訪問塊和全局隊列。在每一個實例的內部,LMD 進程管理輸入的遠程資源請求(即來自集群中其他實例的鎖請求)。此外,它還負責死鎖檢查和監控轉換超時。
      LCK(THE LOCK PROCESS,鎖進程)管理非緩存融合,鎖請求是本地的資源請求。LCK 進程管理共享資源的實例的資源請求和跨實例調用操作。在恢復過程中它建立一個無效鎖元素的列表,並驗證鎖的元素。由於處理過程中的 LMS 鎖管理的首要職能,只有一個單一的 LCK 進程存在每個實例中。
      DIAG(THE DIAGNOSABILITY DAEMON,診斷守護進程)負責捕獲 RAC 環境中進程失敗的相關信息。並將跟蹤信息寫出用於失敗分析,DIAG 產生的信息在與 Oracle Support 技術合作來尋找導致失敗的原因方面是非常有用的。每個實例僅需要一個 DIAG 進程。
      GSD(THE GLOBAL SERVICE DAEMON,全局服務進程)與 RAC 的管理工具 dbca、srvctl、oem 進行交互,用來完成實例的啟動關閉等管理事務。

      GCSGES 兩個進程負責通過全局資源目錄(Global Resource Directory GRD)維護每個數據的文件和緩存塊的狀態信息。當某個實例訪問數據並緩存了數據之后,集群中的其他實例也會獲得一個對應的塊鏡像,這樣其他實例在訪問這些數據是就不需要再去讀盤了,而是直接讀取 SGA 中的緩存。GRD 存在於每個活動的 instance 的內存結構中,這個特點造成 RAC 環境的 SGA 相對於單實例數據庫系統的 SGA 要大。其他的進程和內存結構都跟單實例數據庫差別不大。

 

四、腦裂        

       Oracle集群件使用表決磁盤來解決分區集群中的集群成員資格問題。
       例如一個8節點集群,其節點之間發生通信中斷,4個節點不能與另外4個節點通信。此時表決磁盤幫助確定哪一組節點應當繼續正常運行,而另一組節點應當停機。
       所有表決磁盤都必須放在可以供所有節點訪問的共享存儲上。擁有多個表決磁盤就使表決磁盤不再是單一故障點,也不需要在外部鏡像它們。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM