Oracle RAC原理概要介紹

Oracle RAC原理概要介紹

單點數據庫 vs RAC

單節點數據庫,如果宕機了,如果一個業務鏈接在實例上面,那麼這個業務就中斷了。這個時候系統就不具有可用性了,那麼這個時候單節點的可用性是很差的。

對於RAC來說,和單實例一樣,還是一份數據文件,都是相同的存儲上面放着oracle的文件,但是是由三個實例共用同一份數據文件。這樣的好處是在三個實例之間做了冗餘,在上面三個實例當中任意兩個壞了業務都可以鏈接到剩下的一個實例,都可以正常的工作。RAC提供了在實例級別的冗餘。

RAC不能夠解決在數據的安全,儘管有多個實例,但是隻有一份數據文件,這樣只要數據文件損壞了,那麼整個數據庫就損壞了。

什麼是RAC

  • 多個實例跑在多個服務器上。
  • 一個數據庫存放在共享存儲上,所有實例都可以訪問。
  • 實例之間通過內聯網絡交換數據和信息。

在這裏插入圖片描述

一般每個實例都放在不同的服務器上面,這樣可以起到冗餘作用。所有的數據庫文件都放在共享存儲上面,但是還有一些文件放在每個實例自己的本地的磁盤上面,比如參數文件,每一個實例都可以有自己的參數文件,這個參數文件既可以放在本地也可以放在共享存儲上面,多個實例都使用同一個參數文件。

在RAC裏面,最重要的就是實例和實例之間的交互,即使是分離的實例,但是讀取的數據是相同的,RAC不是分佈式的系統,因爲它只有一個存儲,分佈式系統是指數據發佈在不同的數據庫上面,然後通過中間件來協調做查詢。RAC還是一臺數據庫,多個實例。

RAC架構

在這裏插入圖片描述

對於RAC來說至少有兩大物理上不同的網絡,私有網絡是專門用來實例之間的數據交互。如果沒私有網絡,所有的數據都在一個網絡下面,那麼就會對數據造成影響,嚴重的影響RAC的性能了。實例之間數據傳遞使用私有網絡和對外服務提供的網絡之間是物理分開的。所以RAC至少有兩套網絡,一個是實例之間的數據的傳遞,另外一個是公有網絡,是對外提供服務的,外面的業務是提供公有網絡的IP鏈接到數據庫的。

RAC的特點

除了具有普通的數據庫特性外:

  • 每一個節點的instance都有自己的SGA(System Global Area)
  • 每一個節點的instance都有自己的background process
  • 每一個節點的instance都有自己的redo logs(重做日誌文件集合)
  • 每一個節點的instance都有自己的undo表空間
  1. 每一個節點的實例都有自己的SGA,但是之間在SGA裏面的數據塊都是需要相互傳遞的。
  2. 每一個節點都有自己的redo,redo不是共用的。雖然熱動是放在共享磁盤上面,但是每個實例都有自己的redo,各有各的。當實例2壞了,實例1做恢復的時候可以通過實例2的redo信息來進行恢復。
  3. 每個實例都要處理自己的一套事務,所以需要使用自己的UNDO。

所以在RAC架構下面, 每一套實例都有自己的東西。

RAC是如何容錯的

  • 如果一個節點掛掉
    • 其他節點讀取failed節點redo中最後一次checkpoint之後的信息。
    • 應用(roll forward)這些信息(數據塊和回滾塊)。
    • 回滾未提交的事務。

在這裏插入圖片描述

使用SAN存儲,存儲和服務器就不在一起了,而是和服務器分離了,是一個網絡的存儲系統,服務器是服務器,存儲是存儲,完全分離的。

當節點1壞了,不僅僅只是將業務切換到節點2,這個旰還要處理節點1壞了留下來的問題。主要是一些提交和未提交的事務。比如實例1壞了,實例2就要從實例1的redo裏面讀最後一次checkpoint之後的信息,就是實例1最後將所有的數據寫到磁盤之後產生的所有的redo應用,該回滾的回滾,該恢復的恢復。即將以提交和未提交的事務產生的redo都先應用,因爲是最後一次checkpoint之後的信息,之前的信息是已經寫到磁盤上面了,所謂的恢復是將未寫到磁盤上面的信息進行恢復。(雖然實例壞了,但是實例的redo並沒有壞,放置在共享存儲上面,它的redo還是允許其他實例訪問的)實例2讀取實例1的redo,然後全部應用一遍,之後再回滾未提交的事務修改的數據塊,這個有點像實例的恢復。

RAC Background Process
在這裏插入圖片描述

這裏面會比單實例環境下面的實例多出幾個進程。多出來的進程就用來保證在rac環境下面rac之間交換需要做的比如鎖,資源交換之間的控制。

RAC相關的後臺進程

LMS - Global Cache Service Process 全局緩存服務進程

LMS進程是在RAC環境下面最重要的一個進程,是處理全局的緩存,所謂的緩存就是數據庫一個實例到另外一個實例數據的交換進程。
LMD - Global Enqueue Service Daemon 全局查詢??服務守護進程
LMON - Global Enqueue Service Monitor 全局查詢服務監視進程
LCK0 - Instance Enqueue Process 實例查詢進程
DIAG(Diagnostic Daemon) 診斷守護進程

RAC後臺進程

LMON – Lock Monitor Processes
監控整個集羣狀況, 維護GCS的內存結構.
處理非正常終止的進程和實例.
當實例離開和加入集羣時, 鎖和資源的重新配置.
管理全局的鎖和資源.
監控全局的鎖資源, 處理死鎖和阻塞.
也被稱爲Global Enqueue Service Monitor.

LMSn – Lock Monitor Service
LMS進程只要用來管理集羣內部數據塊的訪問,並在不同實例的Buffer Cache中傳輸鏡像.
當在某個數據塊上發生一致性讀時,LMS負責回滾該數據塊,並將它copy到請求的實例上。
每個RAC節點至少有2個LMS進程。 也稱作 GCS (Global Cache Services) processes.

LCK–Lock Process
LCK進程主要用來管理實例間資源請求和跨實例調用操作,調用操作包括數據字典等對象的訪問;並處理非CACEH FUSION的CHACE資源請求(例如:DICTIONARY CACHE或row cache的請求)由於LMS進程負責主要的鎖管理功能,所以每個實例只有一個LCK進程。

可以看到有這麼多的進程都和鎖有關係,歸根結底就是一個數據塊從一個實例到另外一個實例,維護一致性的依據就是鎖。只有通過鎖纔可以維護數據塊在兩個實例之間的一致性。

LMD–Lock Monitor Daemon Process
LMD進程主要管理對全局隊列和資源的訪問,並更新相應隊列的狀態,處理來
自於其他實例的資源請求。
每一個全局隊列的當前狀態存儲在相應的實例共享內存中,該狀態表明該實例
具有相應的權利使用該資源。
一個實例(master)的共享內存中存在一個特殊的隊列,該隊列紀錄來自其他遠
程實例的資源請求,當遠程實例的LMD進程發出一個資源請求時,該請求指向
master實例的LMD,當master實例的LMD進程受到該請求後,在共享內存中的
特殊隊列中監測該資源是否無效,如果有效則LMD進程更新該資源對列的狀態
,並通知請求資源的LMD進程該資源隊列可以使用了,如果資源隊列正在被其
他實例使用或者當前無效,則LMD進程通知正在使用中的實例的LMD進程應該
釋放該資源,等資源釋放變得有效時,MASTER實例的LMD進程更新該資源隊
列的狀態並通知請求資源實例的LMD進程該資源隊列可以使用了。

DIAG (Diagnostic Daemon)
Oracle10g新的後臺進程。
例行對實例的健康情況進行監控,同時也監控實例是否掛起或者出現死鎖。
收集實例和進程出錯時的關鍵診斷信息。
這個進程會更新alert日誌文件,寫入一些重要告警信息。

上面這些都是RAC下面實例多出的進程,下面就是RAC自己的進程了。

RAC的服務進程

獨立的服務CRS
CRS- 集羣資源服務
CSS - 集羣同步服務
EVMD 事件管理服務
ONS–事件的發佈及訂閱服務

用來協調兩個實例之間來訪問存儲,這個架構就是CRS。在RAC下面因爲要對全局資源進行控制,所以實例不能直接訪問存儲,必須通過CRS層來訪問。(RAC指的是架構,具體是由CRS這套服務來實現的,這套服務裏面有上面的四個服務組成)。

CRS–Cluster Ready Services
管理集羣內高可用操作的基本程序。
CRS管理的任何事物被稱之爲資源
數據庫、實例、監聽、虛擬IP(VIP)地址、應用進程等等
CRS是根據存儲於OCR中的資源配置信息來管理這些資源
當一資源的狀態改變時,CRS進程生成一個事件。

CSS–Cluster Synchronization Service
管理集羣節點的成員資格
控制哪個結點爲集羣的成員、結點在加入或離開集羣時通知集羣成員來控制
集羣的配置信息
此進程發生故障導致集羣重啓

EVM–Event Management
事件管理守護進程。
發佈CRS創建事件的後臺進程

ONS–Oracle Notification Service
通信的快速應用通知事件的發佈及訂閱服務

Oracle集羣體系結構

Oracle RAC,全稱是Oracle Real Application Cluster,即正真的應用集羣,是Oracle提供的一個並行集羣系統,整個集羣系統由Oracle Clusterware(集羣就緒軟件)和Real Aplication(RAC)兩大部分組成。

Oracle RAC的實質是位於不同的操作系統的Oracle實例節點同時訪問訪問同一個Oracle數據庫,每個節點間可以通過私有網絡進行通信,互相監控節點的運行狀態,Oracle數據庫所有的數據文件,聯機日誌文件,控制文件等均放在集羣的共享設備上面,而共享設備可以是RAW,ASM,OCFS2等,所有集羣節點可以同時讀寫共享存儲,Oracle RAC的基本拓撲結構如下。(RAW就是裸設備,沒有文件系統,就是直接在硬盤上面進行讀寫)。

在這裏插入圖片描述

上圖分爲三個部分,第一個部分就是客戶端,第二個部分是節點部分,最後一部分是共享存儲部分。

作爲用戶會去訪問集羣數據庫,在節點層有許多節點,每一個節點相當於一個主機,或者一個操作系統。每一個操作系統是安裝在一臺服務器上獨立完成的。最底層是os,即操作系統。在操作系統上層安裝的是clusterware,這是一個高可用的集羣軟件。再上面一層是oracle rac數據庫,這個數據庫還啓動了rac監聽,每一個節點都是由(1) os, (2) clusterware, (3) oracle rac listener三部分組成的。

在10g之前的產品,如果要使用rac集羣就必須要藉助第三方高可用軟件。在10g之後Oracle推出了自己的一款clusterware,對於高可用軟件這部分可以使用oracle自身的,也可以使用第三方的。

在每一個節點上面啓動相關的實例,每一個實例會啓動相關的監聽端口。這個端口就是監聽客戶端過來的請求,在Oracle集羣當中可以有多個節點。

共享存儲是rac爲了實現數據的共享,實現共享方式有很多種,比如raw,asm等。

由拓撲結構可知:

一個Oracle Rac數據庫有多個服務器節點組成,每個服務節點上面都有自己獨立的OS,ClusterWare,Oracle RAC數據庫程序等,每個節點都有自己的網絡監聽器。ClusterWare是一個集羣軟件,主要用於集羣系統管理,Oracle RAC數據庫程序用於提供Oracle實例進程,以提供客戶端訪問集羣系統,監聽服務主要用於監控自己網絡端口的信息,所有的服務和程序提供操作系統都去訪問一個共享存儲,最終完成數據的讀寫。共享存儲的方式有很多種,可以通過自動存儲管理(ASM),Oracle集羣文件系統(OCFS),裸設備(RAW),網絡共享區域存儲(NAS)等來保證整個集羣系統的數據一致性。

Oracle rac數據庫和經常所說的數據庫有什麼區別呢?Oracle rac數據庫主要是提供oracle實例進程,以供客戶端訪問集羣系統。從Oracle運行機制來說,集羣中每臺服務器就是一個Oracle實例,多個實例對應同一個Oracle數據庫,組成了Oracle數據庫的集羣。

從圖中可以看出,運行在兩個節點上面的數據庫訪問同一個RAC數據庫,並且兩個節點的本地磁盤僅用存放Oracle安裝程序和ClusterWare軟件,而在共享存儲上,存放着Oracle的控制文件,數據文件,聯機日誌文件,歸檔日誌文件等,這是安裝Oracle Rac時的一種數據存儲方式,其實,RAC提供了多種數據存儲方式。

集羣裏面的每一個服務器或者裏面的每一個節點就是一個Oracle實例,有多個節點或者說是多個實例同時訪問同一個數據庫。從上圖可以看到節點的本地磁盤上面存儲的是Oracle的安裝程序和clusterware集羣軟件的程序。在共享存儲上面存放着Oracle的數據文件,控制文件,聯機文件等等。

轉自

https://blog.csdn.net/qq_34556414/article/details/79001267

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章