Oracle RAC原理及分析
單點數(shù)據庫VS RAC
單節(jié)點數(shù)據庫,如果實例宕機了,如果一個業(yè)務鏈接在實例上面,那么這個業(yè)務就中斷了。這個時候系統(tǒng)就不具有可用性了,那么這個時候單節(jié)點的可用性是很差的。
對于RAC來說,和單實例一樣,還是一份數(shù)據文件,都是相同的存儲上面放著oracle的文件,但是是由三個實例共用同一份數(shù)據文件。這樣的好處是在三個實例之間做了冗余,在上面三個實例當中任意兩個壞了業(yè)務都可以鏈接到剩下的一個實例,都可以正常的工作。RAC提供了在實例級別的冗余。
RAC不能夠解決在數(shù)據的安全,盡管有多個實例,但是只有一份數(shù)據文件,這樣只要數(shù)據文件損壞了,那么整個數(shù)據庫就損壞了。
什么是RAC
一般每個實例都放在不同的服務器上面,這樣可以起到冗余作用。所有的數(shù)據庫文件都放在共享存儲上面,但是還有一些文件放在每個實例自己的本地的磁盤上面,比如參數(shù)文件,每一個實例都可以有自己的參數(shù)文件,這個參數(shù)文件既可以放在本地也可以放在共享存儲上面,多個實例都使用同一個參數(shù)文件。
在RAC里面,最重要的就是實例和實例之間的交互,即使是分離的實例,但是讀取的數(shù)據是相同的,RAC不是分布式的系統(tǒng),因為它只有一個存儲,分布式系統(tǒng)是指數(shù)據發(fā)布在不同的數(shù)據庫上面,然后通過中間件來協(xié)調做查詢。RAC還是一臺數(shù)據庫,多個實例。
RAC架構
對于RAC來說至少有兩套物理上不同的網絡,私有網絡是專門用來實例之間的數(shù)據交互。
如果私有網絡,所有的數(shù)據都在一個網絡下面,那么那么就會對數(shù)據造成影響,嚴重的影響RAC的性能了。
實例之間數(shù)據之間傳遞使用私有網絡和對外服務提供的網絡之間是物理分開的。
所以RAC至少有兩套網絡,一個是實例之間的數(shù)據的傳遞,另外一個是公有網絡,是對外提供服務的,外面的業(yè)務是提供公有網絡的IP鏈接到數(shù)據庫的。
RAC的特點
除了具有普通的數(shù)據庫特性外:
每一個節(jié)點的instance都有自己的SGA
每一個節(jié)點的instance都有自己的background process
每一個節(jié)點的instance都有自己的redo logs
每一個節(jié)點的instance都有自己的undo表空間
每一個節(jié)點的實例都有自己的SGA,但是之間在SGA里面的數(shù)據塊都是需要相互傳遞的。
每一個節(jié)點都有自己的redo,redo不是共用的。雖然redo是放在共享磁盤上面,但是每個實例都有自己的redo,各有各的。當實例2壞了,實例1做恢復的時候可以通過實例2的redo信息來進行恢復。
每個實例都要處理自己的一套事務,所以需要使用自己的UNDO。
所以在RAC架構下面,每一套實例都有自己的東西。
RAC如何容錯的
使用SAN存儲,存儲和服務器就不在一起了,而是和服務器分離了,是一個網絡的存儲系統(tǒng),服務器是服務器,存儲是存儲,完全分離的。
當節(jié)點1壞了,不僅僅只是將業(yè)務切換到節(jié)點2,這個時候還要處理節(jié)點1壞了遺留下來的問題。主要是一些提交和未提交的事務。
比如實例1壞了,實例2就要從實例1的redo里面讀最后一次checkpoint之后的信息,就是實例1最后將所有的數(shù)據寫到磁盤之后產生的所有的redo應用,該回滾的回滾,該恢復的恢復。
即現(xiàn)將以提交和未提交的事務產生的redo都先應用,因為是最后一次checkpoint之后的信息,之前的信息是已經寫到磁盤上面了,所謂的恢復是將未寫到磁盤上面的信息進行恢復。(雖然實例壞了,但是實例的redo并沒有壞,放置在共享存儲上面,它的redo還是允許其他實例訪問的)實例2讀取實例1的redo,然后全部應用一遍,之后再回滾未提交的事務修改的數(shù)據塊,這個有點像實例的恢復。
RAC Background Processes
這里面會比單實例環(huán)境下面的實例多出幾個進程。
多出來的進程就用來保證在rac環(huán)境下面rac之間交換需要做的比如鎖,資源交換之間的控制。
RAC相關的后臺進程
LMS - Gobal Cache Service Process 全局緩存服務進程
LMS進程是在RAC環(huán)境下面最重要的一個進程,是處理全局的緩存,所謂的緩存就是數(shù)據庫一個實例到另外一個實例數(shù)據的交換進程。
LMD - Global Enqueue Service Daemon 全局查詢服務守護進程
LMON - Global Enqueue Service Monitor全局查詢服務監(jiān)視進程
LCK0 - Instance Enqueue Process 實例查詢進程
DIAG (Diagnostic Daemon) 診斷守護進程
RAC后臺進程
LMON--Lock Monitor Processes
監(jiān)控整個集群狀況,維護GCS的內存結構。
處理非正常終止的進程和實例。
當實例離開和加入集群時,鎖和資源的重新配置。
管理全局的鎖和資源。
監(jiān)控全局的鎖資源,處理死鎖和阻塞。
也被稱為Global enqueue service monitor
LMSn-- Lock Monitor Services
LMS進程主要用來管理集群內數(shù)據塊的訪問,并在不同實例的BUFFER CACHE中傳輸塊鏡像。
當在某個數(shù)據塊上發(fā)生一致性讀時,LMS負責回滾該數(shù)據塊,并將它copy到請求的實例上。
每個RAC節(jié)點至少有2個LMS進程。 也稱作 GCS (Global Cache Services) processes.
LCK--Lock Process
LCK進程主要用來管理實例間資源請求和跨實例調用操作,調用操作包括數(shù)據字典等對象的訪問;并處理非CACEH FUSION的CHACE資源請求(例如:DICTIONARY CACHE或row cache的請求)由于LMS進程負責主要的鎖管理功能,所以每個實例只有一個LCK進程。
可以看到有這么多的進程都和鎖有關系,歸根結底就是一個數(shù)據塊從一個實例到另外一個實例,維護一致性的依據就是鎖。只有通過鎖才可以維護數(shù)據塊在兩個實例之間的一致性。
LMD--Lock Monitor Daemon Process
LMD進程主要管理對全局隊列和資源的訪問,并更新相應隊列的狀態(tài),處理來自于其他實例的資源請求。
每一個全局隊列的當前狀態(tài)存儲在相應的實例共享內存中,該狀態(tài)表明該實例具有相應的權利使用該資源。
一個實例(master)的共享內存中存在一個特殊的隊列,該隊列紀錄來自其他遠程實例的資源請求,當遠程實例的LMD進程發(fā)出一個資源請求時,該請求指向master實例的LMD,當master實例的LMD進程受到該請求后,在共享內存中的特殊隊列中監(jiān)測該資源是否無效,如果有效則LMD進程更新該資源對列的狀態(tài),并通知請求資源的LMD進程該資源隊列可以使用了,如果資源隊列正在被其他實例使用或者當前無效,則LMD進程通知正在使用中的實例的LMD進程應該釋放該資源,等資源釋放變得有效時,MASTER實例的LMD進程更新該資源隊列的狀態(tài)并通知請求資源實例的LMD進程該資源隊列可以使用了。
DIAG (Diagnostic Daemon)
Oracle10g新的后臺進程。
例行對實例的健康情況進行監(jiān)控,同時也監(jiān)控實例是否掛起或者出現(xiàn)死鎖。
收集實例和進程出錯時的關鍵診斷信息。
這個進程會更新alert日志文件,寫入一些重要告警信息。
上面這些都是RAC下面實例多出的進程,下面就是RAC自己的進程了。
RAC的服務進程
獨立的服務CRS
- CRS- 集群資源服務
- CSS - 集群同步服務
- EVMD 事件管理服務
- ONS--事件的發(fā)布及訂閱服務
用來協(xié)調兩個實例之間來訪問存儲,這個架構就是CRS。在RAC下面因為要對全局資源進行控制,所以實例不能直接訪問存儲,必須通過CRS層來訪問。(RAC指的是架構,具體是由CRS這套服務來實現(xiàn)的,這套服務里面有上面的四個服務組成)。
CRS--Cluster Ready Services
管理集群內高可用操作的基本程序。
CRS管理的任何事物被稱之為資源
數(shù)據庫、實例、監(jiān)聽、虛擬IP(VIP)地址、應用進程等等
CRS是根據存儲于OCR中的資源配置信息來管理這些資源
當一資源的狀態(tài)改變時,CRS進程生成一個事件。
CSS--Cluster Synchronization Service
管理集群節(jié)點的成員資格
控制哪個結點為集群的成員、結點在加入或離開集群時通知集群成員來控制
集群的配置信息
此進程發(fā)生故障導致集群重啟
EVM--Event Management
事件管理守護進程。
發(fā)布CRS創(chuàng)建事件的后臺進程
ONS--Oracle Notification Service
通信的快速應用通知事件的發(fā)布及訂閱服務
Oracle集群體系結構
Oracle RAC,全稱是Oracle Real Application Cluster,即正真的應用集群,是Oracle提供的一個并行集群系統(tǒng),整個集群系統(tǒng)由Oracle Clusterware(集群就緒軟件)和Real Aplication(RAC)兩大部分組成。
Oracle RAC的實質是位于不同的操作系統(tǒng)的Oracle實例節(jié)點同時訪問訪問同一個Oracle數(shù)據庫,每個節(jié)點間可以通過私有網絡進行通信,互相監(jiān)控節(jié)點的運行狀態(tài),Oracle數(shù)據庫所有的數(shù)據文件,聯(lián)機日志文件,控制文件等均放在集群的共享設備上面,而共享設備可以是RAW,ASM,OCFS2等,所有集群節(jié)點可以同時讀寫共享存儲,Oracle RAC的基本拓撲結構如下。(RAW就是裸設備,沒有文件系統(tǒng),就是直接在硬盤上面進行讀寫)。
這個圖分為三個部分,第一個部分就是客戶端,第二個部分是節(jié)點部分,最后一部分是共享存儲部分。
作為用戶會去訪問集群數(shù)據庫,在節(jié)點層有許多節(jié)點,每一個節(jié)點相當于一個主機,或者一個操作系統(tǒng)。每一個操作系統(tǒng)是安裝在一臺服務器上獨立完成的。最底層是os,即操作系統(tǒng)。在操作系統(tǒng)上層安裝的是clusterware,這是一個高可用的集群軟件。再上面一層是oracle rac數(shù)據庫,這個數(shù)據庫還啟動了rac監(jiān)聽,每一個節(jié)點都是有os,clusterware,oracle rac listener三部分組成的。
在10g之前的產品,如果要使用rac集群就必須要借助第三方高可用軟件。在10g之后Oracle推出了自己的一款clusterware,對于高可用軟件這部分可以使用oracle自身的,也可以使用第三方的。
在每一個節(jié)點上面啟動相關的實例,每一個實例會啟動相關的監(jiān)聽端口。這個端口就是監(jiān)聽客戶端過來的請求,在Oracle集群當中可以有多個節(jié)點。
共享存儲是rac為了實現(xiàn)數(shù)據的共享,實現(xiàn)共享方式有很多種,比如raw,asm等。
由拓撲結構可知:
一個Oracle Rac數(shù)據庫有多個服務器節(jié)點組成,每個服務節(jié)點上面都有自己獨立的OS,ClusterWare,Oracle RAC數(shù)據庫程序等,每個節(jié)點都有自己的網絡監(jiān)聽器。ClusterWare是一個集群軟件,主要用于集群系統(tǒng)管理,Oracle RAC數(shù)據庫程序用于提供Oracle實例進程,以提供客戶端訪問集群系統(tǒng),監(jiān)聽服務主要用于監(jiān)控自己網絡端口的信息,所有的服務和程序提供操作系統(tǒng)都去訪問一個共享存儲,最終完成數(shù)據的讀寫。共享存儲的方式有很多種,可以通過自動存儲管理(ASM),Oracle集群文件系統(tǒng)(OCFS),裸設備(RAW),網絡共享區(qū)域存儲(NAS)等來保證整個集群系統(tǒng)的數(shù)據一致性。
Oracle rac數(shù)據庫和經常所說的數(shù)據庫有什么區(qū)別呢?Oracle rac數(shù)據庫主要是提供oracle實例進程,以供客戶端訪問集群系統(tǒng)。從Oracle運行機制來說,集群中每臺服務器就是一個Oracle實例,多個實例對應同一個Oracle數(shù)據庫,組成了Oracle數(shù)據庫的集群。
從圖中可以看出,運行在兩個節(jié)點上面的數(shù)據庫訪問同一個RAC數(shù)據庫,并且兩個節(jié)點的本地磁盤僅用存放Oracle安裝程序和ClusterWare軟件,而在共享存儲上,存放著Oracle的控制文件,數(shù)據文件,聯(lián)機日志文件,歸檔日志文件等,這是安裝Oracle Rac時的一種數(shù)據存儲方式,其實,RAC提供了多種數(shù)據存儲方式。
集群里面的每一個服務器或者里面的每一個節(jié)點就是一個Oracle實例,有多個節(jié)點或者說是多個實例同時訪問同一個數(shù)據庫。從上圖可以看到節(jié)點的本地磁盤上面存儲的是Oracle的安裝程序和clusterware集群軟件的程序。在共享存儲上面存放著Oracle的數(shù)據文件,控制文件,聯(lián)機文件等等。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Oracle將查詢的結果放入一張自定義表中并再查詢數(shù)據
可以將查詢的結果放入到一張自定義表中,同時可以再從這個自定義的表中查詢數(shù)據,詳細的sql如下,感興趣的朋友不要錯過2014-08-08Oracle 10g利用amdu抽取數(shù)據文件的方法教程
這篇文章主要給大家介紹了關于Oracle 10g利用amdu抽取數(shù)據文件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-12-12