本篇文章給大家帶來了關于oracle的相關知識,其中主要介紹了rac的相關問題,oracle real application cluster用來在集群環境下實現多機共享數據庫,以保證應用的高可用性,希望對大家有幫助。
推薦教程:《oracle》
應對業務量的不斷增加場景通常有兩個大方向,一種是縱向擴展,也就是增加單臺服務器的CPU計算能力、內存容量和磁盤承載能力等;另外一種是橫向擴展,也就是通過增加服務器的數量來增加處理能力。前者存在業務中斷和擴展上限等諸多的問題,特別是互聯網業務的迅猛發展,單臺服務器幾乎無法滿足業務負載要求,因此目前比較流行的方式橫向擴展的方式。
什么是oracle RAC?
Oracle Real Application Cluster (RAC,實時應用集群)用來在集群環境下實現多機共享數據庫,以保證應用的高可用性;同時可以自動實現并行處理及負載均衡,并能實現數據庫在故障時的容錯和無斷點恢復。它是oracle數據庫支持網絡計算環境的核心技術。
共享存儲多活集群
在該架構中集群中多個節點運行的是同一個數據庫實例,數據完全一致,并且用戶層面無論從哪個節點訪問,獲取到的數據都是相同的。下圖是Oracle RAC的示意圖,通過3個節點構成一個集群,它們共享數據。
RAC 的特點可總結如下:
- 節點互聯起來,向外顯示為1臺服務器;
- 集群軟件把內部結構掩藏起來;
- 磁盤是共享的;
- 每臺機器使用相同的操作系統;
- 多個實例訪問同一個數據庫;
- 每個節點有一個實例;
- 數據庫文件支持物理或邏輯訪問;
- 數據的讀寫通過軟件控制。
Oracle RAC和單個數據庫服務器的區別
如下圖,主要區別還是RAC是集群式數據庫,通過集群軟件管理。
Oracle RAC硬件架構
為了保證整個集群的可用性,Oracle RAC在部署的時候對硬件有比較多的要求。在網絡層面,Oracle RAC總共有3個網絡系統,分別是外部訪問網絡、內部私有網絡和存儲網絡。
外部訪問網絡不用多說,相信大家都理解。內部私有網絡則主要用來進行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。
為了更加深入的理解Oracle RAC我們看一下其內部軟件模塊的組成。整個數據庫層面沒有太多差異,這里面主要多出了如下內容:虛擬IP(VIP)、ASM、Clusterware和仲裁磁盤。這些新組件配合起來完成了Oracle的多活集群功能。
虛擬IP是應用訪問數據庫的入口,該IP并不與任何服務器綁定,而是可以在集群的任意服務器間漂移。由于具有這個特性,當出現服務器宕機等情況時,數據庫集群可以保證通過相同的接口對外提供服務。
ASM與Clusterware實現了集群管理功能,其中ASM實現對磁盤的管理,避免同時訪問磁盤導致數據不一致的風險,而Clusterware則用于管理Oracle集群的軟件進程及資源調度。
仲裁磁盤用于集群中服務器的異常判斷,集群中的節點通過定時更新仲裁磁盤中特定區域的數據標示自身的健康狀態。其它節點可以根據該數據判斷該節點是否宕機。
邏輯結構
下圖是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就是這一類,性能最好,系統最復雜。
推薦教程:《oracle》