Oracle RAC原理

 

 

在說Oracle RAC之前,按照慣例,阿呆來一段前戲~

 

最近阿呆在看資治通鑑,看得津津有味。每當看到那些叱吒風雲的英雄人物最終淹沒於歷史長河之中,不禁放下手機,望着地鐵車廂裏的茫茫人海(一排排後腦勺),悵然若失。。。今天我們來講一對好兄弟張耳和陳餘的故事,他們本來是生死之交,最後卻鬥得你死我活。

 

話說魏國有兩個名士張耳和陳餘,是刎頸之交。陳餘年輕,他就像對待父親一樣侍奉張耳。秦國統一了六國,聽說這兩個人很有名,就懸賞百金捉拿他們(有名士不拉攏,反而消滅,真吊)。他倆改名換姓,一塊兒逃到陳地,充當里正衛維持生活。裏中小吏曾因陳餘犯了小的過失鞭打他,陳餘打算起來反抗,張耳趕快用腳踩他,示意不動接受鞭打,小吏走後,張耳就把陳餘帶到桑樹下,責備他說:”當初和你怎麼說的?如今遭到小小的屈辱,就要死在裏吏身上嗎?”陳餘認爲他說的對(張耳年紀大,就是老奸巨猾啊)。

 

後來陳勝吳廣大澤鄉起義,他倆也去投奔,擁護趙王佔領趙國,陳餘做大將軍,張耳做右丞相,真是好搭檔啊。不過,接着發生了一件事,秦朝大將章邯手下軍隊包圍了張耳和趙王,陳餘帶了幾萬援軍在外面卻不進攻,理由是打不過秦軍,只會白白犧牲。然後,就是我們熟悉的,項羽帶領楚軍破釜沉舟,背水一戰,打敗秦軍,解救了趙國。但是張耳卻恨陳餘不救援,收了他的軍隊,兩個人從此分道揚鑣。項羽做了西楚霸王,分封諸侯,張耳跟他入關,封常山王,陳餘沒跟他,只封了個侯。陳餘氣壞了,帶兵把張耳趕跑了(年輕人真衝動),他們反目成仇。張耳沒辦法,投降了劉邦,陳餘自己做了代王。劉邦有一次想讓陳餘借點兵給他,結果陳餘的條件居然是要劉邦殺掉當年的好兄弟張耳,至此,他們鬥得你死我活。劉邦自然沒殺張耳,找了個替死鬼。

 

陳餘的結局很慘,被戰神韓信背水列陣法打敗,陳餘戰死。張耳反而幸運,被劉邦封了王,兒子張敖娶了劉邦的女兒,所以劉邦和呂后消滅異姓王,張家倖免於難。

 

從張耳和陳餘的故事,阿呆不由得想到了Oracle RAC的腦裂,本來他倆還是有心跳檢測的,聯絡感情,後來各自牛逼了,忙啊,心跳檢測就少了,分道揚鑣之後,心跳斷了。從此,就發生了腦裂,誰都不認輸,覺得自己吃虧了,爭着要做老大。最終,命運之神做了表決盤Voting Disk,選擇張耳活下來。這個故事告訴我們,朋友之間要多交流,定期心跳檢測,這樣才能知道對方還是一如既往的情深義重。否則,斷了聯繫,很可能就腦裂了。

 

什麼是Oracle RAC

 

RAC,全稱real application clusters,譯爲“實時應用集羣“,是Oracle數據庫支持網格計算環境的核心技術。
 

 

集羣

 

  • 節點互聯起來,向外顯示爲1臺服務器;

  • 集羣軟件把內部結構掩藏起來;

  • 磁盤是共享的;

  • 每臺機器使用相同的操作系統。

 

  • 多個實例訪問同一個數據庫

  • 每個節點有一個實例;

  • 數據庫文件支持物理或邏輯訪問;

  • 數據的讀寫通過軟件控制。

 

Oracle RAC和單個數據庫服務器的區別

 

如下圖,主要區別還是RAC是集羣式數據庫,通過集羣軟件管理。

 

Oracle RAC硬件架構

 

下圖爲一個兩節點RAC系統,可以看出,從主機到交換機,都做了冗餘,無論哪臺設備出了故障,業務不會受影響。共享存儲是自帶RAID冗餘的。

 

 

其中,主機叫做節點(Node),它們要有相同的CPU、內存等配置,每臺至少兩個網卡,訪問內外網,還有HBA卡連接共享存儲,但更多是通過FC交換機連到FC存儲陣列。共享存儲是RAC架構中的核心,絕大部分文件都在共享存儲,很多功能都是爲了共享存儲的安全性開發的。一般是光纖通過FC接口連接,運行SCSI協議。

 

Oracle RAC軟件架構

 

如下圖,是個雙節點RAC系統,Oracle RDBMS是數據庫軟件,Oracle Clusterware是集羣軟件。驅動主要是網卡,HBA卡,ASMLib等。

 

每個節點上必須是相同的操作系統,版本必須一致,包括補丁號等。如操作系統: RHEL AS 4.8 64bit,Linux內核版本: 2.6.9-89.EL。

集羣軟件:單機情況下只要OS和驅動就可以了,但是多機需要訪問其他機器的硬件,需要集羣軟件。它是集羣環境的核心組成部分,管理集羣硬件資源,爲上層應用提供服務。

集羣文件系統:向多個節點提供文件讀寫功能。Oracle RAC支持OCFS和ASM。

 

邏輯結構

 

下圖是Oracle RAC的邏輯結構,後面將依次介紹裏面的各個組件。

 

DLM:併發控制

 

每個節點都有對等的權利訪問共享存儲的數據,Oracle RAC使用Distribute Lock Management( DLM)進行多個節點間併發訪問的控制。分佈式鎖管理器負責協調節點間對共享資源的競爭,節點訪問數據時,先通過DLM申請,確認不會和其他節點衝突時才能使用。

 

OCR:健忘症

 

健忘症:如果每個節點都有一份集羣配置信息,那麼如果修改配置後沒有同步就會出錯。

 

所以,集羣只能有一個配置信息,所有節點共享。Oracle RAC使用OCR Disk文件解決健忘症。

 

OCR Disk只有Master節點才能修改,每個節點有一份Copy,在OCR Cache內存中。節點要修改OCR Disk時,請求Master節點,該節點上OCR進程更新本地和其他節點OCR Cache內容。OCR Disk每幾個小時定期備份。

 

Voting Disk:腦裂

 

腦裂:集羣中節點之間通過心跳檢測來知道對方是不是好的,如果心跳出了問題,節點雙方都認爲對方出錯了,就會要求獨享數據,這樣就會破壞數據的一致性。

 

Voting Disk用來記錄節點間成員的狀態,出現腦裂的時候,選擇票數高的獲得控制權,踢出其他節點。

 

IO隔離:踢出去的節點,不能再讓它訪問數據,所以要做IO隔離。Oracle RAC的機制就是重啓故障節點。

 

Cache Fusion Lock

 

數據庫文件是共享的,Cache Fusion Lock是在集羣層面之外解決存儲共享、併發訪問控制。

 

四種網絡

 

1. Public網絡:用Public IP,對外提供數據查詢、數據庫維護、服務器維護。

2. Virtual網絡:用Virtual IP,提供應用連接,應用程序使用該IP。

TCP/IP協議中,TCP Header包含源和目標端口,IP header包含源和目標IP,應用層的數據庫監聽記錄IP和端口,在TCP超時時知道數據庫或監聽出了問題。TCP/IP協議棧超時時間由OS決定,每個OS定義不一樣。爲了縮短捕獲錯誤的時間,Oracle RAC使用了VIP。Virtual IP是浮動的,並不與物理網卡綁定,某個節點故障,則VIP移到好的節點上,但好節點的監聽裏找不到該VIP,應用程序會立刻發現問題,轉而向其他VIP發送連接請求。

 

3. Private網絡:用Private IP,用於RAC心跳檢測和Cache Fusion Lock,速度要求很高。

4. 存儲網絡:存儲設備、HBA卡、FC網絡組成。

 

Oracle Clusterware

 

單機的時候只要OS就可以處理上層請求,但是多機的時候,集羣管理軟件Oracle Clusterware會在OS內核之前截獲對其他節點的請求,和其他節點的Clusterware通信完成請求。

 

應用層:RDBMS

 

應用層由若干CRS Resource組成,每個resource是若干個進程組成的完整服務。LMON(Lock Monitor)監控CRS Resource,異常時進行重啓、切換等,保證Oracle RAC服務的高可用性。

 

Cache Fusion

 

Cache Fusion從字面就可以理解——緩存融合,其實就是把各個節點的緩存統一管理起來,避免了每次讀都是操作磁盤,加速IO性能。因爲Private網絡速度很快,比讀磁盤要快。從不同位置讀數據塊的時間:

  • 本地Cache:0.01 ms

  • 網絡訪問其他節點Cache:2.5 ms

  • 磁盤:14 ms。但現在有了存儲端的SSD或者全閃存陣列後,延遲就在1 ms左右了。所以有了全閃存陣列後,Cache Fusion估計就沒有意義了。

 

Cache Fusion通過GCS(Global Cache Service)管理,就是把大家的Cache看成是一個大Cache。

 

讀Cache流程

 

寫Cache流程

 

 

寫磁盤流程

 

 

負載均衡

 

用戶像RAC發起各種請求的時候,負載均衡負責把任務平攤到不同機器上。

  • 按用戶分配

是從幾個機器裏面隨機的挑一個嗎?NO!那也太Low了,RAC會根據每個機器的狀態動態分配任務。數據庫運行時,PMON後臺進程節點的負載信息,登記到Listener,1-10分鐘更新一次。每個節點的Listener知道所有節點的負載情況,把客戶端請求發給最閒的節點。

 

  • 按服務分配

按用戶分配有缺點,就是可能讓Cache Fusion更忙了。因爲RAC節點數據共享,大家通過Cache Fusion同步數據,RAC的性能很大程度上受限於Cache Fusion性能。要麼讓Private網絡更牛,比如用昂貴的InfiniBand,另一種是減少Cache Fusion的流量,其實就是減少節點實例之間的依賴。而按用戶分配的機制無益於後面的方案。

所以RAC支持根據服務分配節點,比如生產和銷售用不同節點,自己的數據在自己的Cache裏面,就不用訪問別的節點了。性能得到提升。

 

三類集羣

 

  • 負載均衡集羣:按一定算法把請求分配給不同成員;

  • 高性能集羣(HPC,High Performance Cluster):採用向量處理器等專用軟硬件組成的牛逼機器,計算性能強悍,價格超貴,比如天河計算機;

  • 高可靠性集羣(HAC:High Available Cluster,Failover Cluster):可靠性非常好,硬件和軟件的容錯性很強,日常使用的數據庫集羣屬於這類。

 

高可靠性集羣

 

雙機熱備

 

平時有一個閒着待命,幹活的掛了,就讓候補的頂替。

雙機互備

 

平時兩臺都幹自己的活,但是要預留一部分資源,因爲有一個掛了,另一個就得幹兩個人的活。

 

雙機雙工

 

舉個例子:

老大老二合開一家店,平時老大主要賣包子,老二主要賣豆漿,老大有問題,老二就又賣包子,又賣豆漿,老二不行了,老大就又賣包子,又賣豆漿。

包子豆漿是數據,互相照應叫做心跳檢測,頂替對方工作叫做failover(故障轉移)。如果兩個兄弟突然都瞎了聾了,不知道現在對方到底是否正在幹活,都認爲自己要頂對方的工作,這個叫做腦裂,然後需要第三者,比如他們的老爹來解決問題,這個叫做表決,或者讓他們兩個的媳婦過來拉走其中一個,這個叫做IO隔離。Oracle RAC就是這一類,性能最好,系統最複雜。

 

 

參考文章

 

http://wenku.baidu.com/link?url=VQTq1n4F_GzNyqwPPBLLQSOs2WPMWGx3tfWmg6mIW9i8DWdgKSHdtmA5719R84Zwp1dI2O28jD2hzAkJCjreJJtWkkcnuSkrq3M1aMIJhUq

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章