Oracle-RAC原理解析|oracle高可用思想

單點數據庫VS RAC

Oracle-RAC原理解析|oracle高可用思想

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

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

RAC體現的不是安全,而是高可用思想。

什麼是RAC

Oracle-RAC原理解析|oracle高可用思想

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

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

RAC架構

Oracle-RAC原理解析|oracle高可用思想

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

RAC的特點

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

每一個節點的instance都有自己的SGA

每一個節點的instance都有自己的background process

每一個節點的instance都有自己的redo logs

每一個節點的instance都有自己的undo表空間

每一個節點的實例都有自己的SGA,但是之間在SGA裡面的數據塊都是需要相互傳遞的。

每一個節點都有自己的redo,redo不是共用的。雖然redo是放在共享磁盤上面,但是每個實例都有自己的redo,各有各的。當實例2壞了,實例1做恢復的時候可以通過實例2的redo信息來進行恢復。

每個實例都要處理自己的一套事務,所以需要使用自己的UNDO。

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

RAC如何容錯的

Oracle-RAC原理解析|oracle高可用思想

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

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

RAC Background Processes

Oracle-RAC原理解析|oracle高可用思想

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

RAC相關的後臺進程

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

LMS進程是在RAC環境下面最重要的一個進程,是處理全局的緩存,所謂的緩存就是數據庫一個實例到另外一個實例數據的交換進程。

LMD - Global Enqueue Service Daemon 全局查詢服務守護進程

LMON - Global Enqueue Service Monitor全局查詢服務監視進程

LCK0 - Instance Enqueue Process 實例查詢進程

DIAG (Diagnostic Daemon) 診斷守護進程

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 Rac數據庫有多個服務器節點組成,每個服務節點上面都有自己獨立的OS,ClusterWare,Oracle RAC數據庫程序等,每個節點都有自己的網絡監聽器。ClusterWare是一個集群軟件,主要用於集群系統管理,Oracle RAC數據庫程序用於提供Oracle實例進程,以提供客戶端訪問集群系統,監聽服務主要用於監控自己網絡端口的信息,所有的服務和程序提供操作系統都去訪問一個共享存儲,最終完成數據的讀寫。

共享存儲的方式有很多種,可以通過自動存儲管理(ASM),Oracle集群文件系統(OCFS),裸設備(RAW),網絡共享區域存儲(NAS)等來保證整個集群系統的數據一致性。

後面會分享更多關於DBA的內容和一些比較有趣的實驗,感興趣的朋友可以關注下~

Oracle-RAC原理解析|oracle高可用思想


分享到:


相關文章: