1、什么是cluster
一個(gè)cluster是由兩個(gè)或是多個(gè)獨(dú)立的、通過網(wǎng)絡(luò)連接的servers組成的。幾個(gè)硬件供應(yīng)商多年以來提供了Cluster性能的各種需求。一些Clusters僅僅為了提供高可用性的,在當(dāng)前活動(dòng)的node發(fā)生故障時(shí)轉(zhuǎn)移到次節(jié)點(diǎn)node。另一些是為了提供分布式的連接、工作的可擴(kuò)展性。另一個(gè)Cluster的共同特點(diǎn)是,對(duì)于一個(gè)應(yīng)用程序,它可以看做是一個(gè)單獨(dú)的server。同樣,管理幾個(gè)servers應(yīng)該盡可能像管理一個(gè)server一樣簡(jiǎn)單。Cluster管理器軟件提供了這種功能。
如果是single server的nodes,文件必須存儲(chǔ)在其各自node能訪問的位置。存在有幾個(gè)不同拓?fù)浣Y(jié)構(gòu)來解決數(shù)據(jù)訪問的問題,這主要依賴于Cluster設(shè)計(jì)的主要目標(biāo)。
相互連接時(shí)一個(gè)物理的網(wǎng)絡(luò)連接,作為每個(gè)Cluster節(jié)點(diǎn)直接的交互通信。
簡(jiǎn)而言之,一個(gè)Cluster就是一組獨(dú)立的servers,它們共同協(xié)作,組成一個(gè)single system。
2、什么是Oracle real Application Cluster(RAC)
RAC是一個(gè)軟件可以使你通過運(yùn)行多個(gè)依賴相同Database的Instance,使用Cluster硬件。數(shù)據(jù)庫files被存放在物理或是邏輯上連接每個(gè)節(jié)點(diǎn)的磁盤上。以便于每個(gè)活動(dòng)的Instance都可以對(duì)files進(jìn)行讀寫操作。
RAC軟件管理著數(shù)據(jù)的訪問。所以更改操作在Instances之間是被相互協(xié)調(diào)的,并且每個(gè)Instance看到的信息和數(shù)據(jù)鏡像都是一致的。
通過RAC結(jié)構(gòu),可以獲得冗余,從而使得即使在一個(gè)系統(tǒng)crash或是不可訪問時(shí),應(yīng)用程序也可通過其他Instance訪問Database。
3、為啥使用RAC
RAC可以高度利用標(biāo)準(zhǔn)的Cluster,降低模塊servers成本。
RAC自動(dòng)的提供了服務(wù)的工作量管理。應(yīng)用程序的服務(wù)可以被分組或分類,組成商業(yè)組件完成應(yīng)用工作任務(wù)。RAC中的服務(wù)可以是持續(xù)的、不間斷的Database操作,并為多Instance上的多個(gè)服務(wù)提供支持??梢栽O(shè)計(jì)services到一個(gè)或多個(gè)Instance上運(yùn)行,并且交替Instances可以用于備份Instances。如果主Instance失敗,Oracle會(huì)將services從失敗的Instance節(jié)點(diǎn)移動(dòng)到活動(dòng)的可替代的Instance上。Oracle也會(huì)自動(dòng)的通過連接進(jìn)行數(shù)據(jù)裝載的平衡。
RAC利用多個(gè)廉價(jià)的computers共同提供Database的服務(wù),就像一個(gè)大的computer一樣,服務(wù)于只有大規(guī)模SMP才能提供的各種應(yīng)用。
RAC是基于共享磁盤結(jié)構(gòu)的,在需求上可以增加或縮減,而不需要人為的在Cluster中進(jìn)行數(shù)據(jù)的分隔。并且RAC可以簡(jiǎn)單的增加、移出Cluster中的servers。
4、Clusters和可擴(kuò)展性
創(chuàng)新互聯(lián)主營(yíng)額爾古納網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),額爾古納h5小程序開發(fā)搭建,額爾古納網(wǎng)站營(yíng)銷推廣歡迎額爾古納等地區(qū)企業(yè)咨詢
如果使用對(duì)稱多處理(symmetric multiprocessing SMP)機(jī)制能夠?qū)?yīng)用程序提供透明的服務(wù),則應(yīng)該使用RAC也可以得到同樣的效果,而不需要進(jìn)行應(yīng)用程序代碼的任何改動(dòng)。
當(dāng)一個(gè)節(jié)點(diǎn)發(fā)生失敗,RAC可以排除該Database Instance和node本身,從而保證Database的完整。
下面是一些可擴(kuò)展性的例子:
* 允許更多并發(fā)的批處理。
* 允許更大程度的并發(fā)執(zhí)行。
* 在OLTP系統(tǒng)中可以是連接的用戶大增。
1)可擴(kuò)展性的層次:主要有四個(gè)層次
* hardware 的可擴(kuò)展性:相互連接性是它的關(guān)鍵,這一般依賴于較高的帶寬和較低的延遲。
* OS的可擴(kuò)展性:在OS中,同步方法可以決定系統(tǒng)的可擴(kuò)展性。在一些情況下,硬件的潛在可擴(kuò)展性會(huì)因?yàn)镺S無力并發(fā)維持請(qǐng)求的多個(gè)資源而被丟失。
* Database管理系統(tǒng)的可擴(kuò)展性:在并發(fā)結(jié)構(gòu)中的一個(gè)關(guān)鍵因素是并發(fā)是由內(nèi)部影響的還是外部進(jìn)程影響的。此問題的答案影響了同步的機(jī)制。
* 應(yīng)用層次上的可擴(kuò)展性:應(yīng)用程序必須被明確的設(shè)計(jì)為可擴(kuò)展的。當(dāng)系統(tǒng)中如果多數(shù)情況下,每個(gè)session都在更新相同的data,則可能產(chǎn)生瓶頸。這不僅是指RAC,對(duì)于single-instance系統(tǒng)也是一樣。
需要明確的是,如果任何一個(gè)層次沒有達(dá)到可擴(kuò)展性,不管其他層次可擴(kuò)展性多強(qiáng),并發(fā)的Cluster進(jìn)程都可能失敗??蓴U(kuò)展性不足的典型原因是共享資源的訪問。這使得并發(fā)的操作在此瓶頸上序列化執(zhí)行。這不僅僅是RAC中的局限,而是所有結(jié)構(gòu)中的局限性。
2)scaleup和speedup
* scaleup是工作量和資源都成比例增加時(shí)能維持相同性能水平的能力(相應(yīng)時(shí)間)
Scaleup=(volume parallel)/(volume original)–time for ipc
* speedup是指通過增加資源的數(shù)量完成固定的工作量,獲得執(zhí)行時(shí)間成比例的縮減的效果。
Speedup=(time original)/(time parallel)–time for ipc
其中,ipc是進(jìn)程間通信的簡(jiǎn)寫——interprocess communication
RAC Architecture and Concepts
1、RAC軟件原理
在一個(gè)RAC Instance中,會(huì)見到一些普通Instance中不存在的后臺(tái)進(jìn)程,它們主要是用于維持Database在每個(gè)Instance中的一致性。管理全局資源,具體如下:
* LMON:全局隊(duì)列服務(wù)監(jiān)控進(jìn)程——Global Enqueue Service Monitor
* LMD0:全局隊(duì)列服務(wù)守護(hù)進(jìn)程——Global Enqueue Service Daemon
* LMSx:全局緩沖服務(wù)進(jìn)程,x可以從0到j(luò)——Global Cache Service Processes
* LCK0:鎖進(jìn)程——Lock process
* DIAG:診斷進(jìn)程——Diagnosibility process
在Cluster層,可以找到Cluster Ready Services軟件的主要進(jìn)程,它們?cè)谒衅脚_(tái)上提供標(biāo)準(zhǔn)的Cluster接口,并實(shí)現(xiàn)高可用性的操作。在每個(gè)Cluster node上都可以看到如下的進(jìn)程:
* CRSD和RACGIMON:用于高可用性操作的引擎。
* OCSSD:提供成員節(jié)點(diǎn)和服務(wù)組的訪問
* EVMD:事件檢測(cè)進(jìn)程,由oracle用戶運(yùn)行管理
* OPROCD:Cluster的監(jiān)控進(jìn)程
此外還存在幾個(gè)工具用于管理Cluster中全局層次上的各種資源。這些資源是ASM Instance、RAC Database、Services和CRS應(yīng)用節(jié)點(diǎn)。本書中涉及的工具主要有Server Control(SRVCTL)、DBCA和Enterprise Manager。
2、RAC軟件存儲(chǔ)原理
Oracle10g的RAC安裝分為兩個(gè)階段。第一階段是安裝CRS,其次是安裝帶有RAC組件的Database軟件并創(chuàng)建Cluster數(shù)據(jù)庫。CRS軟件使用的Oracle home必須不同于RAC軟件使用的home。盡管可以將Cluster中CRS和RAC軟件通過使用Cluster文件系統(tǒng)共享存儲(chǔ),但是軟件總是按一定規(guī)則安裝在每個(gè)節(jié)點(diǎn)的本地文件系統(tǒng)中。這支持在線補(bǔ)丁的升級(jí),并消除了單節(jié)點(diǎn)軟件造成的失敗。另外有兩個(gè)必須存儲(chǔ)在共享的存儲(chǔ)設(shè)備中:
* voting file:其本質(zhì)上是用于Cluster synchronization Services守護(hù)進(jìn)程進(jìn)行節(jié)點(diǎn)信息的監(jiān)控。大小約為20MB。
* Oracle Cluster Registry(OCR)文件:也是CRS關(guān)鍵的組成部分。用于維護(hù)在Cluster中高可用性組件的信息。例如,Cluster節(jié)點(diǎn)列表,Cluster數(shù)據(jù)庫Instance到節(jié)點(diǎn)的映射和CRS應(yīng)用資源的列表(如Services、虛擬內(nèi)部鏈接協(xié)議地址等)。此文件是通過SRVCTL類似的管理工具自動(dòng)維護(hù)的。其大小約100MB。
voting file和OCR file是不能被存儲(chǔ)在ASM中的,因?yàn)樗鼈儽仨氃谌魏蜲racle Instance啟動(dòng)前就可以被訪問。并且,兩者必須是在冗余的、可靠的存儲(chǔ)設(shè)備中存放,如RAID。推薦最好的做法是將這些文件放在裸磁盤上。
3、OCR的結(jié)構(gòu)
Cluster的配置信息是在OCR中維護(hù)的。OCR依賴分布式的共享緩存結(jié)構(gòu)用于優(yōu)化關(guān)于Cluster知識(shí)庫的查詢。在Cluster中的每個(gè)節(jié)點(diǎn)都通過OCR進(jìn)程訪問OCR緩存在其內(nèi)存中維護(hù)著一個(gè)副本。事實(shí)上在Cluster中,只有一個(gè)OCR進(jìn)程對(duì)共享存儲(chǔ)中的OCR進(jìn)行讀寫操作。此進(jìn)程負(fù)責(zé)刷新(refresh)其自己擁有的本地緩存以及Cluster中其他節(jié)點(diǎn)的OCR cache。對(duì)于涉及到Cluster知識(shí)庫的訪問,OCR客戶端直接訪問本地OCR進(jìn)程。當(dāng)客戶端需要更新OCR時(shí),它們將通過本地OCR進(jìn)程與那個(gè)扮演讀寫OCR文件的進(jìn)程進(jìn)行交互。
OCR客戶端應(yīng)用有:Oracle通用安裝器(OUI)、SRVCTL、企業(yè)管理器(EM)、DBCA、DBUA、NetCA和虛擬網(wǎng)絡(luò)協(xié)議助理(VIPCA)。此外,OCR維護(hù)管理著CRS內(nèi)部中定義的各種應(yīng)用程序的資源的依賴和狀態(tài)信息,特別是Database、Instance、Services和節(jié)點(diǎn)的應(yīng)用程序。
配置文件的名字是ocr.loc,并且配置文件變量是ocrconfig_loc。Cluster 知識(shí)庫的位置是不受限于裸設(shè)備的??梢詫CR放置在由Cluster file system管理的共享存儲(chǔ)設(shè)備上。
note:OCR也可用于在ASM的單Instance中作為配置文件,每個(gè)節(jié)點(diǎn)有一個(gè)OCR。
4、RAC Database存儲(chǔ)原理
與single-Instance Oracle的存儲(chǔ)方式最主要的不同之處在于RAC存儲(chǔ)必須將所有RAC中數(shù)據(jù)文件存放在共享設(shè)備中(裸設(shè)備或是Cluster文件系統(tǒng))以便于訪問相同Database的Instance能夠共享。必須為每個(gè)Instance創(chuàng)建至少兩個(gè)redo log組,并且所有的redo log組必須也存儲(chǔ)在共享設(shè)備中,從而為了crash恢復(fù)的目的。每個(gè)Instance的在線redo log groups被稱作一個(gè)Instance的在線redo 線程。
此外,必須為每個(gè)Instance創(chuàng)建一個(gè)共享的undo表空間用于Oracle推薦的undo自動(dòng)管理特點(diǎn)。每個(gè)undo表空間必須是對(duì)所有Instance共享的,主要用于恢復(fù)的目的。
歸檔日志不能被存放在裸設(shè)備上,因?yàn)槠涿亲詣?dòng)產(chǎn)生的,并且每個(gè)是不一致的。因此需要存儲(chǔ)在一個(gè)文件系統(tǒng)中。如果使用Cluster file system(CFS),則可以在任何時(shí)間在任何node上訪問這些歸檔文件。如果沒有使用CFS,就不得不使其他Cluster成員在恢復(fù)時(shí)那些歸檔日志是可用的,例如通過網(wǎng)絡(luò)文件系統(tǒng)(NFS)來實(shí)現(xiàn)。如果使用推薦的flash recovery area特性,則其必須被存儲(chǔ)在共享目錄下,以便于所有的Instance能夠訪問。(共享目錄可以是一個(gè)ASM磁盤組,或是一個(gè)CFS)。
5、RAC和共享存儲(chǔ)技術(shù)
存儲(chǔ)是網(wǎng)格技術(shù)中的關(guān)鍵組成部分。傳統(tǒng)上,存儲(chǔ)都直接依附在每個(gè)Server(directly attached to each individual Server DAS)上。在過去的幾年來,更靈活的存儲(chǔ)出現(xiàn)并得到應(yīng)用,主要是通過存儲(chǔ)空間網(wǎng)絡(luò)或是正規(guī)的以太網(wǎng)來實(shí)現(xiàn)訪問。這些新的存儲(chǔ)方式使得多個(gè)Servers訪問相同的磁盤集合成為可能,在分布式環(huán)境中,可以獲得簡(jiǎn)單的存取。
storage area network(SAN)代表了數(shù)據(jù)存儲(chǔ)技術(shù)在這一點(diǎn)的演進(jìn)。傳統(tǒng)上,C/S系統(tǒng)中,數(shù)據(jù)被存儲(chǔ)在Server內(nèi)部或是依附它的設(shè)備中。隨后,進(jìn)入了network attached storage(NAS)階段,這使得存儲(chǔ)設(shè)備與Server和直接連接它們的網(wǎng)絡(luò)向分離。它在SAN遵循的原則進(jìn)一步允許存儲(chǔ)設(shè)備存在于各自的網(wǎng)絡(luò)中,并直接通過高速的媒介進(jìn)行交換。用戶可以通過Server系統(tǒng)對(duì)存儲(chǔ)設(shè)備的數(shù)據(jù)進(jìn)行訪問,Server 系統(tǒng)與本地網(wǎng)絡(luò)(LAN)和SAN相互連接。
文件系統(tǒng)的選擇是RAC的關(guān)鍵。傳統(tǒng)的文件系統(tǒng)不支持多系統(tǒng)的并行掛載。因此,必須將文件存儲(chǔ)在沒有任何文件系統(tǒng)的裸卷標(biāo)或是支持多系統(tǒng)并發(fā)訪問的文件系統(tǒng)中。
因此,三個(gè)主要的方法用于RAC的共享存儲(chǔ)有:
* 裸卷標(biāo):既是一些直接附加的裸設(shè)備,需要用于存儲(chǔ),并以block模式進(jìn)程操作。
* Cluster file system:也需要以block模式進(jìn)程存取。一個(gè)或多個(gè)Cluster file 系統(tǒng)可以被用于存儲(chǔ)所有的RAC文件。
* 自動(dòng)存儲(chǔ)管理(ASM):對(duì)于Oracle Database files,ASM是一個(gè)輕便的、專用的、最佳化的Cluster file system。
6、Oracle Cluster file system
Oracle Cluster file system(OCFS)是一個(gè)共享文件系統(tǒng),專門為Oracle RAC設(shè)計(jì)。OCFS排除了Oracle Database files被連接到邏輯磁盤上的需要,并使得所有的節(jié)點(diǎn)共享一個(gè)ORACLE Home,而不需每個(gè)node在本地有一個(gè)副本。OCFS卷標(biāo)可以橫跨一個(gè)或多共享disks,用于冗余和性能的增強(qiáng)。
下面時(shí)可放入OCFS中的文件類表:
* Oracle software的安裝文件:在10g中,此設(shè)置只在windows 2000中支持。說是后面的版本會(huì)提供在Linux中的支持,但我還沒具體看。
* Oracle 文件(控制文件、數(shù)據(jù)文件、redo logs文件,bfiles等)
* 共享配置文件(spfile)
* 在Oracle運(yùn)行期間,由Oracle創(chuàng)建的文件。
* voting和OCR文件
Oracle Cluster file system對(duì)開發(fā)人員和用戶時(shí)免費(fèi)的。可從官方網(wǎng)站下載。
7、自動(dòng)存儲(chǔ)管理(ASM)
是10g的新特性。它提供了一個(gè)縱向的統(tǒng)一管理的文件系統(tǒng)和卷標(biāo)管理器,專門用于建立Oracle Database 文件。ASM可以提供單個(gè)SMP機(jī)器的管理或是貫穿多個(gè)Oracle RAC的Cluster節(jié)點(diǎn)。
ASM無需再手動(dòng)調(diào)節(jié)I/O,會(huì)自動(dòng)的分配 I/O 負(fù)載到所有的可用資源中,從而優(yōu)化性能。通過允許增加Database大小而不需shutdown數(shù)據(jù)庫來調(diào)節(jié)存儲(chǔ)分配,來輔助DBA管理動(dòng)態(tài)數(shù)據(jù)庫環(huán)境。
ASM可以維護(hù)數(shù)據(jù)的冗余備份,從而提高故障的容錯(cuò)。它也可以被安裝到可靠的存儲(chǔ)機(jī)制中。
8、選擇RAW或CFS
* CFS的優(yōu)點(diǎn):對(duì)于RAC的安裝和管理非常簡(jiǎn)單;對(duì)RAC使用Oracle managed files(OMF);single Oracle軟件安裝;在Oracle data files上可以自動(dòng)擴(kuò)展;當(dāng)物理節(jié)點(diǎn)失敗時(shí),對(duì)歸檔日志的統(tǒng)一訪問。
* 裸設(shè)備的使用:一般會(huì)用于CFS不可用或是不被Oracle支持的情況下;它提供了最好的性能,不需要在Oracle和磁盤之間的中間層;如果空間被耗盡,裸設(shè)備上的自動(dòng)擴(kuò)展將失??;ASM、邏輯存儲(chǔ)管理器或是邏輯卷標(biāo)管理其可以簡(jiǎn)化裸設(shè)備的工作,它們也允許加載空間到在線的裸設(shè)備上,可為裸設(shè)備創(chuàng)建名字,從而便于管理。
9、RAC的典型Cluster棧
在Cluster中的每個(gè)節(jié)點(diǎn)都需要一個(gè)被支持的相互連接的軟件協(xié)議來支持內(nèi)部Instance的交互,同時(shí)需要TCP/IP支持CRS的輪詢。所有的UNIX平臺(tái)在千兆以太網(wǎng)上使用user datagram protocol(UDP)作為主要的協(xié)議并進(jìn)行RAC內(nèi)部Instance 的IPC交互。其他支持的特有協(xié)議包括用于SCI和Sunfire的連接交互的遠(yuǎn)程共享內(nèi)存協(xié)議和超文本協(xié)議,用于超光纖交互。在任何情況下,交互必須能被平臺(tái)的Oracle所辨識(shí)。
使用Oracle clusterware,可以降低安裝并支持并發(fā)癥。但如果用戶使用非以太交互,或開發(fā)了依賴clusterware的應(yīng)用程序在RAC上,可能需要vendor clusterware。
同交互連接一樣,共享存儲(chǔ)方案必須被當(dāng)前平臺(tái)的Oracle所辨識(shí)。如果在目標(biāo)平臺(tái)上,CFS可用,Database area和flash recovery area都可以被創(chuàng)建到CFS或ASM上。如果在目標(biāo)平臺(tái)上,CFS不可用,則Database area可以創(chuàng)建在ASM或是裸設(shè)備上(需要卷標(biāo)管理器)并且flash recovery area必須被創(chuàng)建在ASM中。
10、RAC certification Matrix:它設(shè)計(jì)用于處理任何認(rèn)證問題。可以使用matrix回答任何RAC相關(guān)的認(rèn)證問題。具體使用步驟如下:
* 連接并登陸 http://metalink.oracle.com
* 點(diǎn)擊菜單欄的“certify and availability”按鈕
* 點(diǎn)擊“view certifications by product”連接
* 選擇RAC
* 選擇正確的平臺(tái)
11、必要的全局資源
一個(gè)single-Instance環(huán)境,鎖坐標(biāo)通向一個(gè)共享的資源就像表中的一行。lock避免了兩個(gè)進(jìn)程同事修改相同的資源。
在RAC環(huán)境中,內(nèi)部節(jié)點(diǎn)的同步時(shí)關(guān)鍵,因?yàn)樗S持著不同節(jié)點(diǎn)中各自進(jìn)程的一致性,避免其在同時(shí)修改相同的資源數(shù)據(jù)。內(nèi)部節(jié)點(diǎn)的同步確保每個(gè)Instance看到buffer cache中block的最近的版本。上圖中顯示了當(dāng)不存在加鎖的情況。
1)全局資源的協(xié)調(diào)
cluster操作要求在所有Instance中對(duì)控制共享資源的訪問進(jìn)行同步。RAC使用Global Resource Directory來記錄cluster Database中資源的使用信息。Global Cache Service(GCS)和Global Enqueue Service(GES)管理GRD中的信息。
每個(gè)Instance在其本地的SGA中維護(hù)GRD的一部分。GCS和GES指定一個(gè)Instance管理特殊資源的所有信息,它被稱為資源的master。每個(gè)Instance都知道resource的Instance masters。
維護(hù)RAC的活動(dòng)中的cache的依附性(cache coherency)是非常重要的。所謂cache coherency是保持在不同Oracle Instances中的多個(gè)block版本的一致性的技術(shù)。GCS通過所謂的cache融合算法來實(shí)現(xiàn)cache coherency。
GES管理所有非cache 融合算法的內(nèi)部Instance資源操作和Oracle入隊(duì)機(jī)制的狀態(tài)軌跡。GES主要的控制的資源是字典cache locks和library cache locks。同時(shí),它還對(duì)所有死鎖敏感的隊(duì)列和資源起到死鎖檢測(cè)的作用。
2)Global cache coordination實(shí)例
假設(shè)某data block被第一個(gè)節(jié)點(diǎn)修改,成為臟數(shù)據(jù)。并且在clusterwide中,只有一個(gè)block copy版本,其內(nèi)容用SCN號(hào)代替了。則具體的步驟如下:
① 第二個(gè)Instance視圖修改該block,向GCS提出請(qǐng)求。
② GCS向block的holder(持有者)提交請(qǐng)求。在此,第一個(gè)Instance就是holder。
③ 第一個(gè)Instance接到消息,并將block發(fā)送給第二個(gè)Instance。第一個(gè)Instance保存臟buffer用于恢復(fù)的目的。block的臟鏡像被稱作block的past p_w_picpath。一個(gè)past p_w_picpath block將不能進(jìn)一步被改變。
④收到block后,第二個(gè)Instance通知GCS,告知已經(jīng)holds該block。
3)write to disk coordination:example
在cluster結(jié)構(gòu)中的Instances中的caches中,可能存在同一個(gè)block的不同的修改版本。由GCS管理的寫協(xié)議確保了只有最近一個(gè)版本被寫入磁盤中。它同時(shí)需要確保其他之前的版本從其他cache中被清洗。一個(gè)寫磁盤的請(qǐng)求可以從任意一個(gè)Instance上發(fā)起,無論它是保存了block的當(dāng)前版本還是過去的版本。假設(shè)第一個(gè)Instance hold過去的block鏡像,請(qǐng)求Oracle將buffer寫入磁盤,如上圖,過程如下:
①第一個(gè)Instance發(fā)送一個(gè)寫請(qǐng)求給GCS
②GCS將請(qǐng)求轉(zhuǎn)給第二個(gè)Instance,當(dāng)前該block的holder
③第二個(gè)Instance接到寫請(qǐng)求后將block寫入磁盤
④第二個(gè)Instance通知GCS,告知其寫操作完成
⑤當(dāng)接到GCS接到通知后,GCS命令所有的過去的鏡像的holders刪除其過去的鏡像。此鏡像將不會(huì)在因恢復(fù)而需要。
12、RAC和Instance/crash recovery
1)當(dāng)一個(gè)Instance失敗,當(dāng)該失敗被其他Instance檢測(cè)到,第二個(gè)Instance將會(huì)執(zhí)行下面的恢復(fù)操作:
①在恢復(fù)的第一階段,GES重新灌入隊(duì)列
②GCS也重新灌入其資源。GCS進(jìn)程只重新灌入那些失去其控制的資源。在這期間,所有的GCS資源請(qǐng)求和寫請(qǐng)求都臨時(shí)被掛起。然而,事務(wù)可以繼續(xù)修改data blocks,只要這些事務(wù)已經(jīng)獲得了必要的資源。
③當(dāng)隊(duì)列被重新配置后,一個(gè)活動(dòng)的Instance可以獲得占有該Instance恢復(fù)隊(duì)列。因此,當(dāng)GCS資源被重新灌入的同時(shí),SMON確定需要被恢復(fù)的blocks的集合。這個(gè)集合被稱作恢復(fù)集。因?yàn)椋褂胏ache 融合算法,一個(gè)Instance傳送這些blocks的內(nèi)容到請(qǐng)求的Instance,而不需要將這些blocks寫入磁盤。這些blocks在磁盤上的版本可能不包含其他Instance進(jìn)程的data的修改操作的blocks。這意味著SMON需要合并所有失敗的Instance的redo logs來確定恢復(fù)集。這是因?yàn)橐粋€(gè)失敗的線程可能導(dǎo)致一個(gè)在redo 中的hole(洞)需要用指定的block填補(bǔ)。所以失敗的Instance的redo 線程不能被連續(xù)的應(yīng)用。同時(shí),活動(dòng)的Instances的redo 線程不需恢復(fù),因?yàn)镾MON可以使用過去和當(dāng)前的通信緩沖的鏡像。
④用于恢復(fù)的緩沖空間被分配,并且那些之前讀取redo logs被辨識(shí)的資源被聲明為恢復(fù)資源。這避免了其他Instance訪問這些資源。
⑤所有在隨后的恢復(fù)操作中需要的資源被獲得,并且GRD當(dāng)前是不凍結(jié)的。任何不需恢復(fù)的data block現(xiàn)在可以被訪問。所以當(dāng)前系統(tǒng)時(shí)部分可用的。此時(shí),假設(shè)有過去或當(dāng)前的blocks鏡像需要被恢復(fù),而其在cluster Database中的其他caches中,對(duì)于這些特殊的blocks,最近的鏡像是開始恢復(fù)點(diǎn)。如果對(duì)于要恢復(fù)的block,過去鏡像和當(dāng)前鏡像緩沖都不在活動(dòng)的Instance的caches中,則SMON將寫入一個(gè)log,表明合并失敗。SMON會(huì)對(duì)第三步中辨識(shí)的每個(gè)block進(jìn)行恢復(fù)和寫入,在恢復(fù)之后會(huì)馬上釋放資源,從而使更多的資源在恢復(fù)時(shí)可以被使用。
當(dāng)所有的block被恢復(fù),占用的恢復(fù)資源被釋放,則系統(tǒng)再次可用。
note:在恢復(fù)中,log合并的開支和失敗的Instances的數(shù)目是成比例的,并且與每個(gè)Instance的redo logs的大小有關(guān)。
2)Instance recovery和Database availability
上圖顯示了在進(jìn)行Instance恢復(fù)時(shí),每一步執(zhí)行時(shí)數(shù)據(jù)庫的可用程度:
A. RAC運(yùn)行在多節(jié)點(diǎn)上
B. 有節(jié)點(diǎn)失敗被檢測(cè)到
C. GRD的隊(duì)列部分被重新設(shè)置;資源管理被重新分配到活動(dòng)的nodes。此操作的執(zhí)行比較快
D. GRD的緩沖部分被重新設(shè)置,SMON讀取失敗Instance的redo logs辨識(shí)那些需要恢復(fù)的blocks的集合
E. SMON向GRD發(fā)起請(qǐng)求,獲得所有在需要恢復(fù)的blocks集合中的Database blocks。當(dāng)請(qǐng)求結(jié)束,所有的其他的blocks都可被訪問了
F. Oracle執(zhí)行滾動(dòng)的向前恢復(fù)。失敗線程的redo logs被應(yīng)用到Database,并且那些被完全恢復(fù)的blocks將馬上可以被訪問
G. Oracle執(zhí)行滾回恢復(fù)。對(duì)于尚未提交的事務(wù),undo blocks被應(yīng)用到Database中
H. Instance的恢復(fù)完成,所有的data可以被訪問
13、有效的內(nèi)部節(jié)點(diǎn)行級(jí)鎖
Oracle支持有效的行級(jí)鎖。這些行級(jí)鎖主要是在DML操作時(shí)被創(chuàng)建,例如UPDATE。這些鎖被持有,直到事務(wù)被提交或回滾。任何請(qǐng)求同行的lock的進(jìn)程都將被掛起。
cache融合算法的塊傳輸獨(dú)立于這些user可見的行級(jí)鎖。GCS對(duì)blocks的傳輸是一個(gè)底層的操作,無需當(dāng)代行級(jí)鎖被釋放就開始進(jìn)行。blocks可能被從一個(gè)Instance傳輸?shù)狡渌渌鸌nstances,同時(shí)該blocks可能被加鎖。
GCS提供對(duì)data blocks的訪問,允許多個(gè)事務(wù)的并發(fā)進(jìn)行。
14、RAC的額外的內(nèi)存需求
RAC特有的內(nèi)存多數(shù)是在SGA創(chuàng)建時(shí)從shared pool中分配的。因?yàn)閎locks可能跨越Instances被緩沖,必須要求更大的緩沖區(qū)。因此,當(dāng)將single Instance的Database遷移到RAC中時(shí),保持每個(gè)Instance的請(qǐng)求工作量都能通single-instance時(shí)的情況,則需要對(duì)運(yùn)行RAC的Instance增大10%的buffer cache和15%的shared pool。這些值只是基于RAC大小的經(jīng)驗(yàn),一個(gè)初始的嘗試值。一般會(huì)大于此值。
如果正在使用推薦的自動(dòng)內(nèi)存管理特性,可以通過修改SGA_TARGET初始參數(shù)來設(shè)置。但考慮到同樣數(shù)量的user訪問被分散到多個(gè)nodes中,每個(gè)Instance的內(nèi)存需求可以被降低。
實(shí)際資源的使用可以通過查詢每個(gè)Instance中的GCS和GES實(shí)體中的視圖V$RESOURCE_LIMIT視圖CURRENT_UTILIZATION和MAX_UTILIZATION字段,具體語句為:
SELECT resource_name, current_utilization, max_utilization FROM v$resource_limit WHERE resource_name like ‘g%s_%’;
15、RAC與并發(fā)執(zhí)行
Oracle的優(yōu)化器是基于執(zhí)行訪問代價(jià)的,這就考慮了并發(fā)執(zhí)行的代價(jià),并將其作為獲得理想的執(zhí)行計(jì)劃的一個(gè)部件。
在RAC環(huán)境中,優(yōu)化器的并發(fā)選擇是由內(nèi)部節(jié)點(diǎn)和外部節(jié)點(diǎn)并發(fā)兩類組成的。例如,一個(gè)特殊的查詢請(qǐng)求需要六個(gè)查詢進(jìn)程完成,并且在本地節(jié)點(diǎn)有六個(gè)并發(fā)的從屬執(zhí)行進(jìn)程都是idle的,則查詢通過使用本地資源執(zhí)行,從而獲得結(jié)果。這闡述了有效地內(nèi)部節(jié)點(diǎn)并發(fā),也無需多節(jié)點(diǎn)并發(fā)的查詢協(xié)調(diào)的開支。如果本地節(jié)點(diǎn)中只有兩個(gè)并發(fā)執(zhí)行從屬進(jìn)程可用,則這兩個(gè)進(jìn)程和其他節(jié)點(diǎn)的四個(gè)進(jìn)程共同執(zhí)行查詢。在這種情況下,內(nèi)部節(jié)點(diǎn)和外部節(jié)點(diǎn)并發(fā)都被使用到,從而加速查詢。
在真實(shí)環(huán)境的決策支持應(yīng)用程序中,查詢不能通過各種查詢servers得到較好的劃分。所以有些并發(fā)執(zhí)行servers完成其任務(wù)后先于其他servers變?yōu)閕dle狀態(tài)。Oracle并發(fā)執(zhí)行技術(shù)動(dòng)態(tài)監(jiān)測(cè)idle的進(jìn)程,并將超載進(jìn)程的隊(duì)列表中的任務(wù)分配任務(wù)給處于idle狀態(tài)的進(jìn)程。這樣,Oracle有效的再分配了所有進(jìn)程的查詢工作量。RAC進(jìn)一步擴(kuò)展這個(gè)效率到整個(gè)cluster上。
16、全局動(dòng)態(tài)性能視圖
全局動(dòng)態(tài)性能視圖顯示所有開啟并訪問RAC Database的Instances相關(guān)的信息。而標(biāo)準(zhǔn)動(dòng)態(tài)性能視圖只顯示了本地Instance的相關(guān)信息。
對(duì)于所有V$類型的視圖,都會(huì)對(duì)應(yīng)一個(gè)GV$視圖,除了幾個(gè)別的特殊情況。除了V$視圖中的columns,GV$視圖中包含了一個(gè)名為INST_ID的額外的column,顯示了RAC中的Instance number??梢栽谌魏伍_啟的Instance上訪問GV$。
為了查詢GV$視圖,每個(gè)Instance上的初始PARALLEL_MAX_SERVERS初始化參數(shù)至少設(shè)置為1 。這是由于對(duì)GV$的查詢使用了特殊的并發(fā)執(zhí)行。并發(fā)執(zhí)行的協(xié)調(diào)者運(yùn)行在客戶端連接的Instance上,并且每個(gè)Instance上分配一個(gè)slave用于查詢其潛在的V$視圖。如果有一個(gè)Instance上的PARALLEL_MAX_SERVERS被設(shè)置為0,則無法獲得該node的信息,同理,如果所有的并發(fā)servers非常忙,則也無法獲得結(jié)果。在以上兩種情況下,不會(huì)獲得提示或錯(cuò)誤信息。
17、RAC和Service
18、虛擬IP地址和RAC
當(dāng)一個(gè)node完全失敗,虛擬IP地址(VIP)是關(guān)于所有有效應(yīng)用的。當(dāng)一個(gè)節(jié)點(diǎn)失敗,其相關(guān)的VIP自動(dòng)的分派到cluster中的其他node上。當(dāng)這種情況出現(xiàn)時(shí):
* crs在另外一個(gè)node的網(wǎng)卡的MAC地址上綁定這個(gè)ip,對(duì)用戶來說是透明的。對(duì)于直接連接的客戶端,會(huì)顯示errors。
* 隨后發(fā)往VIP的數(shù)據(jù)包都將轉(zhuǎn)向新的節(jié)點(diǎn),它將給客戶端發(fā)送error RST返回包。從而使客戶端快速的獲得errors信息,進(jìn)行對(duì)其他節(jié)點(diǎn)的連接重試。
如果不使用VIP,則一個(gè)node失敗后,發(fā)往該節(jié)點(diǎn)的連接將等待10分鐘的TCP過期時(shí)間。
文章名稱:oracle10grealapplicationclustersintroduction(RAC原理)
標(biāo)題鏈接:http://jinyejixie.com/article6/poeeog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、域名注冊(cè)、微信公眾號(hào)、軟件開發(fā)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)