在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 緩存融合技術(shù)介紹
RAC 后臺(tái)進(jìn)程
RAC 特殊問題和實(shí)戰(zhàn)經(jīng)驗(yàn)
ORACLE 11 G 版本 2 RAC 在 LINUX 上使用 NFS 安裝前準(zhǔn)備
集群安裝【RAC1】
關(guān)于本書
基本測(cè)試與使用
參考文獻(xiàn)
Oracle 集群概念和原理
集群概念介紹
緩存融合技術(shù)介紹
工作原理和相關(guān)組件
數(shù)據(jù)庫(kù)安裝

緩存融合技術(shù)介紹

CACHE FUSION 原理

前面已經(jīng)介紹了 RAC 的后臺(tái)進(jìn)程,為了更深入的了解這些后臺(tái)進(jìn)程的工作原理,先了解一下 RAC 中多節(jié)點(diǎn)對(duì)共享數(shù)據(jù)文件訪問的管理是如何進(jìn)行的。要了解 RAC 工作原理的中心,需要知道 Cache Fusion 這個(gè)重要的概念,要發(fā)揮 Cache Fusion 的作用,要有一個(gè)前提條件,那就是互聯(lián)網(wǎng)絡(luò)的速度要比訪問磁盤的速度要快。否則,沒有引入 CACHE FUSION 的意義。而事實(shí)上,現(xiàn)在 100MB 的互聯(lián)網(wǎng)都很常見。

什么是 CACHE FUSION?

Cache Fusion 就是通過互聯(lián)網(wǎng)絡(luò)(高速的 Private interconnect)在集群內(nèi)各節(jié)點(diǎn)的 SGA 之間進(jìn)行塊傳遞,這是RAC最核心的工作機(jī)制,他把所有實(shí)例的SGA虛擬成一個(gè)大的SGA區(qū),每當(dāng)不同的實(shí)例請(qǐng)求相同的數(shù)據(jù)塊時(shí),這個(gè)數(shù)據(jù)塊就通過 Private interconnect 在實(shí)例間進(jìn)行傳遞。以避免首先將塊推送到磁盤,然后再重新讀入其他實(shí)例的緩存中這樣一種低效的實(shí)現(xiàn)方式(OPS 的實(shí)現(xiàn))。當(dāng)一個(gè)塊被讀入 RAC 環(huán)境中某個(gè)實(shí)例的緩存時(shí),該塊會(huì)被賦予一個(gè)鎖資源(與行級(jí)鎖不同),以確保其他實(shí)例知道該塊正在被使用。之后,如果另一個(gè)實(shí)例請(qǐng)求該塊的一個(gè)副本,而該塊已經(jīng)處于前一個(gè)實(shí)例的緩存內(nèi),那么該塊會(huì)通過互聯(lián)網(wǎng)絡(luò)直接被傳遞到另一個(gè)實(shí)例的 SGA。如果內(nèi)存中的塊已經(jīng)被改變,但改變尚未提交,那么將會(huì)傳遞一個(gè) CR 副本。這就意味著只要可能,數(shù)據(jù)塊無需寫回磁盤即可在各實(shí)例的緩存之間移動(dòng),從而避免了同步多實(shí)例的緩存所花費(fèi)的額外 I/O。很明顯,不同的實(shí)例緩存的數(shù)據(jù)可以是不同的,也就是在一個(gè)實(shí)例要訪問特定塊之前,而它又從未訪問過這個(gè)塊,那么它要么從其他實(shí)例 cache fusion 過來,或者從磁盤中讀入。GCS(Global Cache Service,全局內(nèi)存服務(wù))和 GES(Global EnquenceService,全局隊(duì)列服務(wù))進(jìn)程管理使用集群節(jié)點(diǎn)之間的數(shù)據(jù)塊同步互聯(lián)。

這里還是有一些問題需要思考的:

  • 在所有實(shí)例都未讀取該塊,而第一個(gè)實(shí)例讀取時(shí),是怎么加的鎖,加的什么鎖?如果此時(shí)有另一個(gè)實(shí)例也要讀這個(gè)塊,幾乎是同時(shí)的,那么 Oracle 如何來仲裁,如何讓其中一個(gè)讀取,而另一個(gè)再?gòu)那罢叩木彺嬷型ㄟ^ cache 來得到?
  • 如果一個(gè)塊已經(jīng)被其他實(shí)例讀入,那么本實(shí)例如何判斷它的存在?
  • 如果某個(gè)實(shí)例改變了這個(gè)數(shù)據(jù)塊,是否會(huì)將改變傳遞到其他實(shí)例,或者說其他實(shí)例是否會(huì)知道并重新更新狀態(tài)?
  • 如果一個(gè)實(shí)例要 swap out 某個(gè)塊,而同時(shí)其他實(shí)例也有這個(gè)塊的緩存,修改過的和未修改過的,本實(shí)例修改的和其他實(shí)例修改的,如何操作? truncate 一張表,drop 一張表... 和單實(shí)例有何不同?
  • 應(yīng)該如何設(shè)計(jì)應(yīng)用,以使 RAC 真正發(fā)揮作用,而不是引入競(jìng)爭(zhēng),導(dǎo)致系統(tǒng)被削弱?
  • RAC 下鎖的實(shí)現(xiàn)。

鎖是在各實(shí)例的 SGA 中保留的資源,通常被用于控制對(duì)數(shù)據(jù)庫(kù)塊的訪問。每個(gè)實(shí)例通常會(huì)保留或控制一定數(shù)量與塊范圍相關(guān)的鎖。當(dāng)一個(gè)實(shí)例請(qǐng)求一個(gè)塊時(shí),該塊必須獲得一個(gè)鎖,并且鎖必須來自當(dāng)前控制這些鎖的實(shí)例。也就是鎖被分布在不同的實(shí)例上。而要獲得特定的鎖要從不同的實(shí)例上去獲得。但是從這個(gè)過程來看這些鎖不是固定在某個(gè)實(shí)例上的,而是根據(jù)鎖的請(qǐng)求頻率會(huì)被調(diào)整到使用最頻繁的實(shí)例上,從而提高效率。要實(shí)現(xiàn)這些資源的分配和重分配、控制,這是很耗用資源的。這也決定了 RAC 的應(yīng)用設(shè)計(jì)要求比較高。假設(shè)某個(gè)實(shí)例崩潰或者某個(gè)實(shí)例加入,那么這里要有一個(gè)比較長(zhǎng)的再分配資源和處理過程。在都正常運(yùn)行的情況下會(huì)重新分配,以更加有效的使用資源;在實(shí)例推出或加入時(shí)也會(huì)重新分配。在 alert 文件中可以看到這些信息。而 Cache Fusion 及其他資源的分配控制,要求有一個(gè)快速的互聯(lián)網(wǎng)絡(luò),所以要關(guān)注與互聯(lián)網(wǎng)絡(luò)上消息相關(guān)的度量,以測(cè)試互聯(lián)網(wǎng)絡(luò)的通信量和相應(yīng)時(shí)間。對(duì)于前面的一些問題,可以結(jié)合另外的概念來學(xué)習(xí),它們是全局緩存服務(wù)和全局隊(duì)列服務(wù)。

全局緩存服務(wù)(GCS):要和 Cache Fusion 結(jié)合在一起來理解。全局緩存要涉及到數(shù)據(jù)塊。全局緩存服務(wù)負(fù)責(zé)維護(hù)該全局緩沖存儲(chǔ)區(qū)內(nèi)的緩存一致性,確保一個(gè)實(shí)例在任何時(shí)刻想修改一個(gè)數(shù)據(jù)塊時(shí),都可獲得一個(gè)全局鎖資源,從而避免另一個(gè)實(shí)例同時(shí)修改該塊的可能性。進(jìn)行修改的實(shí)例將擁有塊的當(dāng)前版本(包括已提交的和未提交的事物)以及塊的前象(post image)。如果另一個(gè)實(shí)例也請(qǐng)求該塊,那么全局緩存服務(wù)要負(fù)責(zé)跟蹤擁有該塊的實(shí)例、擁有塊的版本是什么,以及塊處于何種模式。LMS 進(jìn)程是全局緩存服務(wù)的關(guān)鍵組成部分。

猜想:Oracle 目前的 cache fusion 是在其他實(shí)例訪問時(shí)會(huì)將塊傳輸過去再構(gòu)建一個(gè)塊在那個(gè)實(shí)例的 SGA 中,這個(gè)主要的原因可能是 interconnect 之間的訪問還是從本地內(nèi)存中訪問更快,從而讓 Oracle 再次訪問時(shí)可以從本地內(nèi)存快速獲取。但是這也有麻煩的地方,因?yàn)樵诙鄠€(gè)節(jié)點(diǎn)中會(huì)有數(shù)據(jù)塊的多個(gè) copy,這樣在管理上的消耗是很可觀的,Oracle 是否會(huì)有更好的解決方案出現(xiàn)在后續(xù)版本中?如果 interconnect 速度允許的話...)

全局隊(duì)列服務(wù)(GES):主要負(fù)責(zé)維護(hù)字典緩存和庫(kù)緩存內(nèi)的一致性。字典緩存是實(shí)例的 SGA 內(nèi)所存儲(chǔ)的對(duì)數(shù)據(jù)字典信息的緩存,用于高速訪問。由于該字典信息存儲(chǔ)在內(nèi)存中,因而在某個(gè)節(jié)點(diǎn)上對(duì)字典進(jìn)行的修改(如DDL)必須立即被傳播至所有節(jié)點(diǎn)上的字典緩存。GES 負(fù)責(zé)處理上述情況,并消除實(shí)例間出現(xiàn)的差異。處于同樣的原因,為了分析影響這些對(duì)象的 SQL 語句,數(shù)據(jù)庫(kù)內(nèi)對(duì)象上的庫(kù)緩存鎖會(huì)被去掉。這些鎖必須在實(shí)例間進(jìn)行維護(hù),而全局隊(duì)列服務(wù)必須確保請(qǐng)求訪問相同對(duì)象的多個(gè)實(shí)例間不會(huì)出現(xiàn)死鎖。LMON、LCK 和 LMD 進(jìn)程聯(lián)合工作來實(shí)現(xiàn)全局隊(duì)列服務(wù)的功能。GES 是除了數(shù)據(jù)塊本身的維護(hù)和管理(由 GCS 完成)之外,在 RAC 環(huán)境中調(diào)節(jié)節(jié)點(diǎn)間其他資源的重要服務(wù)。

SQL> select * from gv$sysstat where name like 'gcs %'

http://wiki.jikexueyuan.com/project/oraclecluster/images/7.png" alt="" />

這里可以看到 gcs 和 ges 消息的發(fā)送個(gè)數(shù)。(如果沒有使用 DBCA 來創(chuàng)建數(shù)據(jù)庫(kù),那么要 SYSDBA 權(quán)限來運(yùn)行CATCLUST.SQL 腳本來創(chuàng)建 RAC 相關(guān)的視圖和表)

什么是高可用

Oracle failsafe、Data Guard 和 RAC 均為 ORACLE 公司提供的高可靠性(HA)解決方案。然而之三者之間卻存在著很大區(qū)別。

HA 是 High Availability 的首字母組合,翻譯過來,可以叫做高可用,或高可用性,高可用(環(huán)境)。我覺得應(yīng)該說 HA 是一個(gè)觀念而不是一項(xiàng)或一系列具體技術(shù),就象網(wǎng)格一樣。作過系統(tǒng)方案就知道了,評(píng)價(jià)系統(tǒng)的性能當(dāng)中就有一項(xiàng)高可用。也就是 OS 一級(jí)的雙機(jī)熱備。RAC 是 real application cluster 的簡(jiǎn)稱,它是在多個(gè)主機(jī)上運(yùn)行一個(gè)數(shù)據(jù)庫(kù)的技術(shù),即是一個(gè) db 多個(gè) instance。它的好處是 可以由多個(gè)性能較差的機(jī)器構(gòu)建出一個(gè)整體性能很好的集群,并且實(shí)現(xiàn)了負(fù)載均衡,那么當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),其上的服務(wù)會(huì)自動(dòng)轉(zhuǎn)到另外的節(jié)點(diǎn)去執(zhí)行,用戶甚 至感覺不到什么。

FAILSAFE 和 RAC 的區(qū)別

操作系統(tǒng)

failsafe 系統(tǒng)局限于 WINDOWS 平臺(tái),必須配合 MSCS(microsoft cluster server),而 RAC 最早是在 UNIX 平臺(tái)推出的,目前已擴(kuò)展至 LINUX 和 WINDOWS 平臺(tái),通過 OSD(operating system dependent)與系統(tǒng)交互。對(duì)于高端的 RAC 應(yīng)用,UNIX 依然是首選的平臺(tái)。

系統(tǒng)結(jié)構(gòu)

FAILSAFE 采用的是 SHARE NOTHING 結(jié)構(gòu),即采用若干臺(tái)服務(wù)器組成集群,共同連接到一個(gè)共享磁盤系統(tǒng),在同一時(shí)刻,只有一臺(tái)服務(wù)器能夠訪問共享磁盤,能夠?qū)ν馓峁┓?wù)。只要當(dāng)此服務(wù)器失效時(shí),才有另一臺(tái)接管共享磁盤。RAC 則是采用 SHARE EVERYTHING,組成集群的每一臺(tái)服務(wù)器都可以訪問共享磁盤,都能對(duì)外提供服務(wù)。也就是說 FAILSAFE 只能利用一臺(tái)服務(wù)器資源,RAC 可以并行利用多臺(tái)服務(wù)器資源。

運(yùn)行機(jī)理

組成 FAILSAFE 集群的每臺(tái) SERVER 有獨(dú)立的 IP,整個(gè)集群又有一個(gè) IP,另外還為 FAILSAFE GROUP 分配一個(gè)單獨(dú)的 IP(后兩個(gè) IP 為虛擬 IP,對(duì)于客戶來說,只需知道集群 IP,就可以透明訪問數(shù)據(jù)庫(kù))。工作期間,只有一臺(tái)服務(wù)器(preferred or owner or manager)對(duì)外提供服務(wù),其余服務(wù)器(operator)成待命狀,當(dāng)前者失效時(shí),另一服務(wù)器就會(huì)接管前者,包括FAILSAFE GROUP IP與CLUSTER IP,同時(shí)FAILSAFE會(huì)啟動(dòng)上面的DATABASE SERVICE,LISTENER 和其他服務(wù)??蛻糁灰匦逻B接即可,不需要做任何改動(dòng)。對(duì)于 RAC 組成的集群,每臺(tái)服務(wù)器都分別有自已的 IP,INSTANCE 等,可以單獨(dú)對(duì)外提供服務(wù),只不過它們都是操作位于共享磁盤上的同一個(gè)數(shù)據(jù)庫(kù)。當(dāng)某臺(tái)服務(wù)器失效后,用戶只要修改網(wǎng)絡(luò)配置,如(TNSNAMES。ORA),即可重新連接到仍在正常運(yùn)行的服務(wù)器上。但和 TAF 結(jié)合使用時(shí),甚至網(wǎng)絡(luò)也可配置成透明的。

集群容量

前者通常為兩臺(tái),后者在一些平臺(tái)上能擴(kuò)展至 8 臺(tái)。

分區(qū)

FAILSAFE 數(shù)據(jù)庫(kù)所在的磁盤必須是 NTFS 格式的,RAC 則相對(duì)靈活,通常要求是 RAW,然而若干 OS 已操作出了 CLUSTER 文件系統(tǒng)可以供 RAC 直接使用。

綜上所述,F(xiàn)AILSAFE 比較適合一個(gè)可靠性要求很高,應(yīng)用相對(duì)較小,對(duì)高性能要求相對(duì)不高的系統(tǒng),而 RAC則更適合可靠性、擴(kuò)展性、性能要求都相對(duì)較高的較大型的應(yīng)用。

RAC 和 OPS 區(qū)別

RAC 是 OPS 的后繼版本,繼承了 OPS 的概念,但是 RAC 是全新的,CACHE 機(jī)制和 OPS 完全不同。RAC 解決了 OPS 中 2 個(gè)節(jié)點(diǎn)同時(shí)寫同一個(gè) BLOCK 引起的沖突問題。 從產(chǎn)品上來說 RAC 和 OPS 是完全不同的產(chǎn)品,但是我們可以認(rèn)為是相同產(chǎn)品的不同版本

 雙機(jī)熱備、RAC 和 DATA GUARD 的區(qū)別

Data Guard 是 Oracle 的遠(yuǎn)程復(fù)制技術(shù),它有物理和邏輯之分,但是總的來說,它需要在異地有一套獨(dú)立的系統(tǒng),這是兩套硬件配置可以不同的系統(tǒng),但是這兩套系統(tǒng)的軟件結(jié)構(gòu)保持一致,包括軟件的版本,目錄存儲(chǔ)結(jié)構(gòu),以及數(shù)據(jù)的同步(其實(shí)也不是實(shí)時(shí)同步的),這兩套系統(tǒng)之間只要網(wǎng)絡(luò)是通的就可以了,是一種異地容災(zāi)的解決方案。而對(duì)于 RAC,則是本地的高可用集群,每個(gè)節(jié)點(diǎn)用來分擔(dān)不用或相同的應(yīng)用,以解決運(yùn)算效率低下,單節(jié)點(diǎn)故障這樣的問題,它是幾臺(tái)硬件相同或不相同的服務(wù)器,加一個(gè) SAN(共享的存儲(chǔ)區(qū)域)來構(gòu)成的。

Oracle 高可用性產(chǎn)品比較見下表:

http://wiki.jikexueyuan.com/project/oraclecluster/images/8.png" alt="" />

節(jié)點(diǎn)間的通信(INTERCONNECT)

通常在 RAC 環(huán)境下,在公用網(wǎng)絡(luò)的基礎(chǔ)上,需要配置兩條專用的網(wǎng)絡(luò)用于節(jié)點(diǎn)間的互聯(lián),在 HACMP/ES 資源的定義中,這兩條專用的網(wǎng)絡(luò)應(yīng)該被定義為"private" 。在實(shí)例啟動(dòng)的過程中,RAC 會(huì)自動(dòng)識(shí)別和使用這兩條專用的網(wǎng)絡(luò),并且如果存在公用"public" 的網(wǎng)絡(luò),RAC 會(huì)再識(shí)別一條公用網(wǎng)絡(luò)。當(dāng) RAC 識(shí)別到多條網(wǎng)絡(luò)時(shí),RAC 會(huì)使用 TNFF (Transparent Network Failvoer Failback) 功能,在 TNFF 下所有的節(jié)點(diǎn)間通信都通過第一條專用的網(wǎng)絡(luò)進(jìn)行,第二條( 或第三條等) 作為在第一條專用的網(wǎng)絡(luò)失效后的備份。RAC 節(jié)點(diǎn)間通信如下圖所示。

http://wiki.jikexueyuan.com/project/oraclecluster/images/9.png" alt="" />

CLUSTER_INTERCONNECTS 是在 Oracle RAC 中的一個(gè)可選的初始化(init.ora) 參數(shù)。此參數(shù)可以指定使用哪一條網(wǎng)絡(luò)用于節(jié)點(diǎn)間互聯(lián)通信,如果指定多條網(wǎng)絡(luò),RAC 會(huì)在這些網(wǎng)絡(luò)上自動(dòng)進(jìn)行負(fù)載均衡。然而,當(dāng)CLUSTER_INTERCONNECTS 設(shè)置時(shí),TNFF 不起作用,這將降低 RAC 的可用性,任何一條節(jié)點(diǎn)間互聯(lián)網(wǎng)絡(luò)的失效,都會(huì)造成 RAC 一個(gè)或多個(gè)節(jié)點(diǎn)的失效。ORACLE RAC 用于 INTERCONNECT 的內(nèi)網(wǎng)卡的物理連接方式的選擇:采用交換機(jī)連接或是網(wǎng)線直連。直連的弊端是,一旦一個(gè)節(jié)點(diǎn)機(jī)的內(nèi)網(wǎng)卡出現(xiàn)故障,oracle 從 OS 得到兩個(gè)節(jié)點(diǎn)的網(wǎng)卡狀態(tài)都是不正常的,因而會(huì)導(dǎo)致兩個(gè)實(shí)例都宕掉。在 INTERCONNECT 線路出現(xiàn)問題的時(shí)候,oracle 一般情況下會(huì)啟動(dòng)一個(gè)競(jìng)爭(zhēng)機(jī)制來決定哪個(gè)實(shí)例宕掉,如果宕掉的實(shí)例正好是好的實(shí)例的話, 這樣就會(huì)導(dǎo)致兩個(gè)實(shí)例都宕掉。在 9i 中,oracle 在啟動(dòng)競(jìng)爭(zhēng)機(jī)制之前,會(huì)先等待一段時(shí)間,等待 OS 將網(wǎng)絡(luò)的狀態(tài)發(fā)給 oracle,如果在超時(shí)之前,oracle 獲得哪個(gè)實(shí)例的網(wǎng)卡是 down 的話,則將該實(shí)例宕掉,這樣的話,則可以保留正常的那個(gè)實(shí)例繼續(xù)服務(wù),否則還是進(jìn)入競(jìng)爭(zhēng)機(jī)制。

綜上所述節(jié)點(diǎn)間通信分為兩種情況:

  • 是接在交換機(jī)上面,此時(shí)一般情況下,是會(huì)保證正常的實(shí)例繼續(xù)服務(wù)的,但有的時(shí)候如果 os 來不及將網(wǎng)卡狀態(tài)送到 oracle 時(shí),也是有可能會(huì)導(dǎo)致兩個(gè)節(jié)點(diǎn)都宕掉的。
  • 如果是直連的話,則會(huì)導(dǎo)致兩個(gè)實(shí)例都宕掉。

CSS 心跳

OCSSD 這個(gè)進(jìn)程是 Clusterware 最關(guān)鍵的進(jìn)程,如果這個(gè)進(jìn)程出現(xiàn)異常,會(huì)導(dǎo)致系統(tǒng)重啟,這個(gè)進(jìn)程提供CSS(Cluster Synchronization Service)服務(wù)。 CSS 服務(wù)通過多種心跳機(jī)制實(shí)時(shí)監(jiān)控集群狀態(tài),提供腦裂保護(hù)等基礎(chǔ)集群服務(wù)功能。

CSS 服務(wù)有 2 種心跳機(jī)制: 一種是通過私有網(wǎng)絡(luò)的 Network Heartbeat,另一種是通過 Voting Disk 的 DiskHeartbeat。這 2 種心跳都有最大延時(shí),對(duì)于 Disk Heartbeat,這個(gè)延時(shí)叫作 IOT (I/O Timeout);對(duì)于 Network Heartbeat, 這個(gè)延時(shí)叫 MC(Misscount)。這 2 個(gè)參數(shù)都以秒為單位,缺省時(shí) IOT 大于 MC,在默認(rèn)情況下,這 2 個(gè)參數(shù)是 Oracle自動(dòng)判定的,并且不建議調(diào)整??梢酝ㄟ^如下命令來查看參數(shù)值:

$crsctl get css disktimeout
$crsctl get css misscount

Oracle RAC 節(jié)點(diǎn)間使用的通信協(xié)議見下表。

http://wiki.jikexueyuan.com/project/oraclecluster/images/10.png" alt="" />