【Oracle 叢集】ORACLE DATABASE 11G RAC 知識圖文詳細教程之緩衝融合技術和主要後台進程(轉)

來源:互聯網
上載者:User

標籤:nfs安裝   listen   建議   移動   配置   之間   交易   異地   mic   

  • 目錄
  • Cache Fusion 原理
  • 什麼是 Cache Fusion?
  • 什麼是高可用
  • FAILSAFE 和 RAC 的區別
  • RAC 和 OPS 區別
  • 雙機熱備、RAC 和 Data  Guard的區別
  • 節點間的通訊(Interconnect)
  • 一致性管理
  • OCR 結構
  • Oracle Clusterware 後台進程
  • RAC 的並發控制
  • RAC 的主要後台進程
  • RAC 重構觸發條件
  • RAC 優缺點
  • 參考文獻
  • 相關文章
緩衝融合技術和主要後台進程(四)

概述:寫下本文檔的初衷和動力,來源於上篇的《oracle基本操作手冊》。oracle基本操作手冊是作者研一假期對oracle基礎知識學習的匯總。然後形成體系的總結,一則進行回顧複習,另則便於查詢使用。本圖文文檔亦源於此。閱讀Oracle RAC安裝與使用教程前,筆者先對這篇文章整體構思和形成進行梳理。由於閱讀者知識儲備層次不同,我將從Oracle RAC安裝前的準備與規劃開始進行整體介紹安裝部署Oracle RAC。始於唐博士指導,對資料庫叢集進行配置安裝,前後經曆2,3個月的摸索。中間遇到不少問題。此文檔也將一一記錄整理。(本文原創/整理,轉載請標註原文出處:緩衝融合技術和主要後台進程(四) )

 本文極客學院入口:Oracle-RAC 體驗

 

白寧超

2015年7月17日12:26:05

目錄
  1. 叢集概念介紹(一)
  2. ORACLE叢集概念和原理(二)
  3. RAC 工作原理和相關組件(三)
  4. 緩衝融合技術(四)
  5. RAC 特殊問題和實戰經驗(五)
  6. ORACLE 11 G版本2 RAC在LINUX上使用NFS安裝前準備(六)
  7. ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC叢集安裝(七)
  8. ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC資料庫安裝(八)
  9. ORACLE ENTERPRISE LINUX 5.7下DATABASE 11G RAC基本測試與使用(九)
Cache Fusion 原理

      前面已經介紹了 RAC 的後台進程,為了更深入的瞭解這些後台進程的工作原理,先瞭解一下 RAC 中多節點對共用資料檔案訪問的管理是如何進行的。要瞭解 RAC 工作原理的中心,需要知道 Cache Fusion 這個重要的概念,要發揮 Cache Fusion 的作用,要有一個前提條件,那就是互連網絡的速度要比訪問磁碟的速度要快。否則,沒有引入 Cache Fusion 的意義。而事實上,現在 100MB 的互連網都很常見。

什麼是 Cache Fusion?

       Cache Fusion 就是通過互連網絡(高速的 Private interconnect)在叢集內各節點的 SGA 之間進行塊傳遞,這是RAC最核心的工作機制,他把所有執行個體的SGA虛擬成一個大的SGA區,每當不同的執行個體請求相同的資料區塊時,這個資料區塊就通過 Private interconnect 在執行個體間進行傳遞。以避免首先將塊推送到磁碟,然後再重新讀入其他執行個體的緩衝中這樣一種低效的實現方式(OPS 的實現)。當一個塊被讀入 RAC 環境中某個執行個體的緩衝時,該塊會被賦予一個鎖資源(與行級鎖不同),以確保其他執行個體知道該塊正在被使用。之後,如果另一個執行個體請求該塊的一個副本,而該塊已經處於前一個執行個體的緩衝內,那麼該塊會通過互連網絡直接被傳遞到另一個執行個體的 SGA。如果記憶體中的塊已經被改變,但改變尚未提交,那麼將會傳遞一個 CR 副本。這就意味著只要可能,資料區塊無需寫回磁碟即可在各執行個體的緩衝之間移動,從而避免了同步多執行個體的緩衝所花費的額外 I/O。很明顯,不同的執行個體緩衝的資料可以是不同的,也就是在一個執行個體要訪問特定塊之前,而它又從未訪問過這個塊,那麼它要麼從其他執行個體 cache fusion 過來,或者從磁碟中讀入。GCS(Global Cache Service,全域記憶體服務)和 GES(Global EnquenceService,全域佇列服務)進程管理使用叢集節點之間的資料區塊同步互聯。

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

  1. 在所有執行個體都未讀取該塊,而第一個執行個體讀取時,是怎麼加的鎖,加的什麼鎖?如果此時有另一個執行個體也要讀這個塊,幾乎是同時的,那麼 Oracle 如何來仲裁,如何讓其中一個讀取,而另一個再從前者的緩衝中通過 cache 來得到?
  2. 如果一個塊已經被其他執行個體讀入,那麼本執行個體如何判斷它的存在?
  3. 如果某個執行個體改變了這個資料區塊,是否會將改變傳遞到其他執行個體,或者說其他執行個體是否會知道並重新更新狀態?
  4. 如果一個執行個體要 swapout 某個塊,而同時其他執行個體也有這個塊的緩衝,修改過的和未修改過的,本執行個體修改的和其他執行個體修改的,如何操作? truncate 一張表,drop 一張表... 和單一實例有何不同?
  5. 應該如何設計應用,以使 RAC 真正發揮作用,而不是引入競爭,導致系統被削弱?
  6. RAC 下鎖的實現。

      鎖是在各執行個體的 SGA 中保留的資源,通常被用於控制對資料庫塊的訪問。每個執行個體通常會保留或控制一定數量與區塊範圍相關的鎖。當一個執行個體請求一個塊時,該塊必須獲得一個鎖,並且鎖必須來自當前控制這些鎖的執行個體。也就是鎖被分布在不同的執行個體上。而要獲得特定的鎖要從不同的執行個體上去獲得。但是從這個過程來看這些鎖不是固定在某個執行個體上的,而是根據鎖的請求頻率會被調整到使用最頻繁的執行個體上,從而提高效率。要實現這些資源的分配和重分配、控制,這是很耗用資源的。這也決定了 RAC 的應用設計要求比較高。假設某個執行個體崩潰或者某個執行個體加入,那麼這裡要有一個比較長的再分配資源和處理過程。在都正常啟動並執行情況下會重新分配,以更加有效使用資源;在執行個體推出或加入時也會重新分配。在 alert 檔案中可以看到這些資訊。而 Cache Fusion 及其他資源的分配控制,要求有一個快速的互連網絡,所以要關注與互連網絡上訊息相關的度量,以測試互連網絡的通訊量和相應時間。對於前面的一些問題,可以結合另外的概念來學習,它們是全域快取服務和全域佇列服務。

      全域快取服務(GCS):要和 Cache Fusion 結合在一起來理解。全域緩衝要涉及到資料區塊。全域快取服務負責維護該全域緩衝儲存區內的緩衝一致性,確保一個執行個體在任何時刻想修改一個資料區塊時,都可獲得一個全域鎖資源,從而避免另一個執行個體同時修改該塊的可能性。進行修改的執行個體將擁有塊的目前的版本(包括已提交的和未提交的事物)以及塊的前象(post image)。如果另一個執行個體也請求該塊,那麼全域快取服務要負責跟蹤擁有該塊的執行個體、擁有塊的版本是什麼,以及塊處於何種模式。LMS 進程是全域快取服務的關鍵組成部分。

猜想:Oracle 目前的 cache fusion 是在其他執行個體訪問時會將塊傳輸過去再構建一個塊在那個執行個體的 SGA 中,這個主要的原因可能是 interconnect 之間的訪問還是從本地記憶體中訪問更快,從而讓 Oracle 再次訪問時可以從本地記憶體快速擷取。但是這也有麻煩的地方,因為在多個節點中會有資料區塊的多個 copy,這樣在管理上的消耗是很可觀的,Oracle 是否會有更好的解決方案出現在後續版本中?如果 interconnect 速度允許的話...)

全域佇列服務(GES):主要負責維護字典緩衝和庫緩衝內的一致性。字典緩衝是執行個體的 SGA 內所儲存的對資料字典資訊的緩衝,用於高速訪問。由於該字典資訊儲存在記憶體中,因而在某個節點上對字典進行的修改(如DDL)必須立即被傳播至所有節點上的字典緩衝。GES 負責處理上述情況,並消除執行個體間出現的差異。處於同樣的原因,為了分析影響這些對象的 SQL 陳述式,資料庫內對象上的庫緩衝鎖會被去掉。這些鎖必須在執行個體間進行維護,而全域佇列服務必須確保請求訪問相同對象的多個執行個體間不會出現死結。LMON、LCK 和 LMD 進程聯合工作來實現全域佇列服務的功能。GES 是除了資料區塊本身的維護和管理(由 GCS 完成)之外,在 RAC 環境中調節節點間其他資源的重要服務。

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

                      

這裡可以看到 gcs 和 ges 訊息的發送個數。(如果沒有使用 DBCA 來建立資料庫,那麼要 SYSDBA 許可權來運行CATCLUST.SQL 指令碼來建立 RAC 相關的視圖和表)

什麼是高可用

      Oracle failsafe、Data Guard 和 RAC 均為 ORACLE 公司提供的高可靠性(HA)解決方案。然而之三者之間卻存在著很大區別。HA 是 High Availability 的首字母組合,翻譯過來,可以叫做高可用,或高可用性,高可用(環境)。我覺得應該說 HA 是一個觀念而不是一項或一系列具體技術,就象網格一樣。作過系統方案就知道了,評價系統的效能當中就有一項高可用。也就是 OS 一級的雙機熱備。RAC 是 real application cluster 的簡稱,它是在多個主機上運行一個資料庫的技術,即是一個 db 多個 instance。它的好處是 可以由多個效能較差的機器構建出一個整體效能很好的叢集,並且實現了負載平衡,那麼當一個節點出現故障時,其上的服務會自動轉到另外的節點去執行,使用者甚 至感覺不到什麼。

FAILSAFE 和 RAC 的區別

1、    作業系統:

failsafe 系統局限於 WINDOWS 平台,必須配合 MSCS(microsoft cluster server),而 RAC 最早是在 UNIX 平台推出的,目前已擴充至 LINUX 和 WINDOWS 平台,通過 OSD(operating system dependent)與系統互動。對於高端的 RAC 應用,UNIX 依然是首選的平台。

2、    系統結構:

FAILSAFE 採用的是 SHARE NOTHING 結構,即採用若干台伺服器組成叢集,共同串連到一個共用磁碟系統,在同一時刻,只有一台伺服器能夠訪問共用磁碟,能夠對外提供服務。只要當此伺服器失效時,才有另一台接管共用磁碟。RAC 則是採用 SHARE EVERYTHING,組成叢集的每一台伺服器都可以訪問共用磁碟,都能對外提供服務。也就是說 FAILSAFE 只能利用一台伺服器資源,RAC 可以並行利用多台伺服器資源。

3、    運行機理:

組成 FAILSAFE 叢集的每台 SERVER 有獨立的 IP,整個叢集又有一個 IP,另外還為 FAILSAFE GROUP 分配一個單獨的 IP(後兩個 IP 為虛擬 IP,對於客戶來說,只需知道叢集 IP,就可以透明訪問資料庫)。工作期間,只有一台伺服器(preferred or owner or manager)對外提供服務,其餘伺服器(operator)成待命狀,當前者失效時,另一伺服器就會接管前者,包括FAILSAFE GROUP IP與CLUSTER IP,同時FAILSAFE會啟動上面的DATABASE SERVICE,LISTENER 和其他服務。客戶只要重新串連即可,不需要做任何改動。對於 RAC 組成的叢集,每台伺服器都分別有自已的 IP,INSTANCE 等,可以單獨對外提供服務,只不過它們都是操作位於共用磁碟上的同一個資料庫。當某台伺服器失效後,使用者只要修改網路設定,如(TNSNAMES。ORA),即可重新串連到仍在正常啟動並執行伺服器上。但和 TAF 結合使用時,甚至網路也可配置成透明的。

4、    叢集容量:

前者通常為兩台,後者在一些平台上能擴充至 8 台。

5、    分區:

FAILSAFE 資料庫所在的磁碟必須是 NTFS 格式的,RAC 則相對靈活,通常要求是 RAW,然而若干 OS 已操作出了 CLUSTER 檔案系統可以供 RAC 直接使用。綜上所述,FAILSAFE 比較適合一個可靠性要求很高,應用相對較小,對高效能要求相對不高的系統,而 RAC則更適合可靠性、擴充性、效能要求都相對較高的較大型的應用。

RAC 和 OPS 區別

RAC 是 OPS 的後繼版本,繼承了 OPS 的概念,但是 RAC 是全新的,CACHE 機制和 OPS 完全不同。RAC 解決了 OPS 中 2 個節點同時寫同一個 BLOCK 引起的衝突問題。 從產品上來說 RAC 和 OPS 是完全不同的產品,但是我們可以認為是相同產品的不同版本

雙機熱備、RAC 和 Data  Guard的區別

Data Guard 是 Oracle 的遠程複製技術,它有物理和邏輯之分,但是總的來說,它需要在異地有一套獨立的系統,這是兩套硬體設定可以不同的系統,但是這兩套系統的軟體結構保持一致,包括軟體的版本,目錄存放結構,以及資料的同步(其實也不是即時同步的),這兩套系統之間只要網路是通的就可以了,是一種異地容災的解決方案。而對於 RAC,則是本地的高可用叢集,每個節點用來分擔不用或相同的應用,以解決運算效率低下,單節點故障這樣的問題,它是幾台硬體相同或不相同的伺服器,加一個 SAN(共用的儲存地區)來構成的。Oracle 高可用性產品比較見下表:

 

節點間的通訊(Interconnect)

通常在 RAC 環境下,在公用網路的基礎上,需要配置兩條專用的網路用於節點間的互聯,在 HACMP/ES 資源的定義中,這兩條專用的網路應該被定義為"private" 。在執行個體啟動的過程中,RAC 會自動識別和使用這兩條專用的網路,並且如果存在公用"public" 的網路,RAC 會再識別一條公用網路。當 RAC 識別到多條網路時,RAC會使用 TNFF (Transparent Network Failvoer Failback) 功能,在 TNFF 下所有的節點間通訊都通過第一條專用的網路進行,第二條( 或第三條等) 作為在第一條專用的網路失效後的備份。RAC 節點間通訊如所示。

 

      CLUSTER_INTERCONNECTS 是在 Oracle RAC 中的一個可選的初始化(init.ora) 參數。此參數可以指定使用哪一條網路用於節點間互聯通訊,如果指定多條網路,RAC 會在這些網路上自動進行負載平衡。然而,當CLUSTER_INTERCONNECTS 設定時,TNFF 不起作用,這將降低 RAC 的可用性,任何一條節點間互連網絡的失效,都會造成 RAC 一個或多個節點的失效。ORACLE RAC 用於 INTERCONNECT 的內網卡的物理串連方式的選擇:採用交換器串連或是網線直連。直連的弊端是,一旦一個節點機的內網卡出現故障,oracle 從 OS 得到兩個節點的網卡狀態都是不正常的,因而會導致兩個執行個體都宕掉。在 INTERCONNECT 線路出現問題的時候,oracle 一般情況下會啟動一個競爭機制來決定哪個執行個體宕掉,如果宕掉的執行個體正好是好的執行個體的話, 這樣就會導致兩個執行個體都宕掉。在 9i 中,oracle 在啟動競爭機制之前,會先等待一段時間,等待 OS 將網路的狀態發給 oracle,如果在逾時之前,oracle 獲得哪個執行個體的網卡是 down 的話,則將該執行個體宕掉,這樣的話,則可以保留正常的那個執行個體繼續服務,否則還是進入競爭機制。

綜上所述節點間通訊分為兩種情況:

? 是接在交換器上面,此時一般情況下,是會保證正常的執行個體繼續服務的,但有的時候如果 os 來不及將網卡狀態送到 oracle 時,也是有可能會導致兩個節點都宕掉的。

? 如果是直連的話,則會導致兩個執行個體都宕掉。

CSS 心跳

OCSSD 這個進程是 Clusterware 最關鍵的進程,如果這個進程出現異常,會導致系統重啟,這個進程提供CSS(Cluster Synchronization Service)服務。 CSS 服務通過多種心跳機制即時監控叢集狀態,提供腦裂保護等基礎叢集服務功能。

CSS 服務有 2 種心跳機制: 一種是通過私人網路的 Network Heartbeat,另一種是通過 Voting Disk 的 DiskHeartbeat。這 2 種心跳都有最大延時,對於 Disk Heartbeat,這個延時叫作 IOT (I/O Timeout);對於 Network Heartbeat, 這個延時叫 MC(Misscount)。這 2 個參數都以秒為單位,預設時 IOT 大於 MC,在預設情況下,這 2 個參數是 Oracle自動判定的,並且不建議調整。可以通過如下命令來查看參數值:

$crsctl get css disktimeout

$crsctl get css misscount

Oracle RAC 節點間使用的通訊協定見下表。

 

LOCK(鎖)是用來控制並發的資料結構,如果有兩個進程同時修改同一個資料, 為了防止出現混亂和意外,用鎖來控制訪問資料的次序。有鎖的可以先訪問,另外一個進程要等到第一個釋放了鎖,才能擁有鎖,繼續訪問。總體來說,RAC 裡面的鎖分兩種, 一種是本地主機的進程之間的鎖,另外一種是不同主機的進程之間的鎖。本地鎖的機制有兩類,一類叫做 lock(鎖),另外一類叫做 latch 閂。

全域鎖就是指 RAC lock,就是不同主機之間的鎖,Oracle 採用了 DLM(Distributed Lock Management,分布式鎖管理)機制。在 Oracle RAC 裡面,資料是全域共用的,就是說每個進程看到的資料區塊都是一樣的,在不同機器間,資料區塊可以傳遞。給出了 GRD目錄結構。

 

可以看出 Mode、Role、n 構成了 RAC lock 的基本結構

  1. Mode 有 N、S、X3 種方式
  2. Role 有 Local 和 Global 兩種
  3. N 有 PI 和 XI 兩種,一般 0 表示 XI,1 表示 PI
  4. 全域記憶體管理
  5. RAC 中的資料庫檔案
  6. RAC 中讀的一致性
  7. 群集就緒服務(CRS)
  8. 全域資來源目錄
一致性管理

資料一致性和並發性描述了 Oracle 如何維護多使用者資料庫環境中的資料一致性問題。在單使用者資料庫中,使用者修改資料庫中的資料,不用擔心其他使用者同時修改相同的資料。但是,在多使用者資料庫中,同時執行的多個事務中的語句可以修改同一資料。同時執行的事務需要產生有意義的和一致性的結果。因而,在多使用者資料庫中,資料並發性和資料一致性的控制非常重要:資料並發性:每個使用者可以看到資料的一致性結果。ANSI/IOS SQL 標準(SQL 92)定義了 4 個交易隔離等級,對交易處理效能的影響也個不相同。這些隔離等級是考慮了事務並發執行必須避免的 3 個現象提出的。3 個應該避免的現象為: ? ?

  1. 髒讀:一個事務可以讀取其他事務寫入但還沒有提交的資料。 ? ?
  2. 不可重複讀取(模糊讀):一個事務重複讀到以前讀到的和查詢到的資料,這些資料是其他的已提交事務已經修改或者刪除的資料。
  3. 幻影讀:一個事務重複執行查詢返回的一些列行,這些行包括其他已經提交的事務已經插入的額外的行。

SQL92 根據這些對象定義了 4 個隔離等級,事務運行在特定的隔離等級允許特別的一些表現。如下表表示隔離等級阻止的讀現象。

 

OCR 結構

(一) OCR KEY 是樹形結構。

(二) OCR PROCESS 每個節點都有 OCR CACHE 的複製,由 ORC MASTER 節點負責更新到 OCR DISK

Oracle Clusterware 後台進程

自動啟動的指令碼/etc/inittab 裡定義:

OCSSD(Clustery Synchronization Service)提供心跳機制監控叢集狀態

DISK HEARTBEAT

NETWORK HEARBEAT

CRSD(Clustery Ready Service)提供高可用、幹預、關閉、重啟、轉移服務。

資源套件括 nodeapps、database-related:前者每個節點只需要一個即可正常工作,後一個與資料庫相關,不受節點限制,可以為多個。

EVMD: 這個進程負責發布 CRS 產生的各種事件,還是 CRS 和 CSS 兩個服務之間通訊的橋樑

RACGIMON: 這個進程負責檢查資料庫健康狀態,包括資料庫服務的啟動、停止和容錯移轉。屬於持久串連,定期檢查 SGA。

OPROCD(Process Monitor Daemon)檢測 CPU hang(非 Linux 平台使用)

RAC 的並發控制

DLM 分布式鎖管理。

  1. Non-Cache Fusion 資源:包括資料檔案、控制檔案、資料字典視圖 、Library Cache、Row Cache
  2. Cache Fusion 資源:包括普通資料區塊、索引資料區塊、段頭、UNDO 資料區塊。
  3. GRD(Global Resource Directory):記錄每個資料區塊在叢集間的分布圖,在SGA中分master node與shadownode
  4. PCM lock:mode role Past Image
  5. LMS0(LOCK MANAGER SERVICE):對應服務為 GCS(Global Cache Service),主要負責資料區塊在執行個體間傳遞Cache fusion 參數 GCS_SERVER_PROCESSES
  6. LMD:對應服務為 GES(Global ENQUEUE Service),主要負責傳遞過程中鎖的管理。
  7. LCK:負責 NON-CACHE FUSION 資源同步訪問,每個執行個體有一個進程。
  8. LMON:這個進程定期通訊每個執行個體,對應服務為 CGS(Cluster Group Service)。提供節點監控 node monitor,通過 GRD 中用位元影像 0,1 來標誌。0:節點關閉 1:節點正常運行通過 CM 層定期通訊。
  9. 兩種心跳機制:網路心跳和控制檔案磁碟心跳 3S 一次。
  10. DIAG:監控狀態,寫日誌 alert.log
  11. GSD:為使用者提供管理介面。
RAC 的主要後台進程RAC 重構觸發條件

(一) NM(NODE MANAGEMENT)group

(二) 重構叢集觸發:有 node 加入或者離開叢集,由 NM 觸發 Network Heartbeat 異常:因為 LMON 或者 GCS、GES 通訊異常 ,由 IMR(Instance Membership Reconfiguration)controlfile heartbeat 觸發。

RAC 優缺點RAC 優點

(一) 多節點負載平衡

(二) 提供高可用性,故障容錯及無縫切換功能,將硬體和軟體的異常造成的影響最小化。

(三) 通過並存執行技術提供事務響應的時間 - 通常用於資料分析系統。

(四) 通過橫向擴充提高每秒交易數和串連數 - 通常用於 OLTP。

(五) 節約硬體成本,可以使用多個廉價的 PC 伺服器代替小型機大型主機,節約相應的維護成本。

(六) 可擴充性好,可以方便添加刪除節點,擴充硬體資源。

RAC 缺點

(一) 管理更複雜,要求更高

(二) 系統規劃設計較差時效能可能會不如單節點

(三) 可能會增加軟體成本(按照 CPU 收費)

【Oracle 叢集】ORACLE DATABASE 11G RAC 知識圖文詳細教程之緩衝融合技術和主要後台進程(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.