Oracle RAC
Oracle Real Application Cluster (RAC,實時應用集群)用來在集群環境下實現多機共享數據庫,以保證應用的高可用性;同時可以自動實現並行處理及負載均衡,並能實現數據庫在故障時的容錯和無斷點恢復。它是oracle數據庫支持網絡計算環境的核心技術。它是oracle數據庫支持網絡計算環境的核心技術。
rac架構和原理" title="Oracle rac架構和原理" width="539" height="224">
共享緩存技術 減少io負擔
多主機共享一個數據庫,每個節點宕掉后,通過vip到下一個節點
rac架構和原理" title="Oracle rac架構和原理" width="690" height="484">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="507">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="450">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="433">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="496">
Oracle RAC的原理
集群環境層面:
並發控制,健忘症,腦裂,IO隔離;
共享存儲層面:
存儲層,網絡層,集群件層,應用層
數據庫實例層面:
並發訪問和控制
1、集群環境&共享存儲層面
並發控制
Oracle RAC中,使用Distribute Lock Managerment(DLM)機制進行多個節點間並發訪問的控制
健忘症(一個節點更改,其他人不知道)
整個集群只有一份集群配置信息,Oracle RAC使用OCR(oracle 集群注冊器) Disk文件解決
腦裂
在Oracle RAC中Voting Disk用來記錄節點間成員的狀態,出現腦裂時,通過投票機制,獲得最高票數或者最早達到的獲得投票的,幸存,其他節點被踢出。
IO隔離
Oracle RAC采取直接重啟故障節點來限制已剔除節點對共享數據的訪問
如果某個節點有故障,則踢出后並重啟該節點,達到不讓其訪問數據的目的,實現自愈
共享存儲的共享和並發訪問
需要解決存儲設備的共享和並發訪問問題
2、RAC層面
- 存儲層
Cache fusion lock
- 網絡層
共4種網絡環境:
Public網絡-對外提供數據查詢服務、數據庫維護等
Virtua網絡-提供應用連接
Private網絡-用於RAC心跳和cache fusion
存儲網絡-存儲設備、HBA卡、光纖交換機等組成
集群件層
Oracle clusterware:集群管理軟件保證多主機之間的協調工作
應用層
oracle RDBMS層面:由若干CRS Resourcezucheng
oracel RAC提供高可用服務:LMON進程監控應用(CRS Resource),應用異常時對其進行重啟、切換等;
Oracle RAC 的關鍵技術
Oracle RAC的關鍵技術有:
- OCR Disk
- votiong
- vip
- DLM
- cache Fushion
- Failover
- loadbalance
- ASM
OCR Disk
OCR Disk主要用來解決集群的“健忘”問題
在linux系統中信息如下:
rac架構和原理" title="Oracle rac架構和原理" width="530" height="120">
rac架構和原理" title="Oracle rac架構和原理" width="408" height="89">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="258">
不是每個節點都可以操作OCR Disk,每個節點上都有一份其內容的拷貝,在一塊叫OCR cache的內存中。
OCR master node:
可以更改OCR Disk的節點
負責更新本地和其他節點的OCR cache內容
OCR Disk每四個小時自動備份一次
Voting Disk
voting Disk用來解決“腦裂”問題,仲裁哪個節點或者partition獲得集群的控制權。
所以做RAC 至少兩塊盤
在linux系統中信息如下:
rac架構和原理" title="Oracle rac架構和原理" width="453" height="118">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="139">
VIP
Oracle RAC引入VIP,解決TCP/IP協議棧超時問題
VIP和IP的不同是:VIP是浮動的,IP是固定到物理網卡上的。
節點出現故障,VIP會漂移,保證業務連續性
VIP故障,應用程序感知快,捕獲錯誤的時間大大縮短。
rac架構和原理" title="Oracle rac架構和原理" width="440" height="172">
rac架構和原理" title="Oracle rac架構和原理">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="272">
VIP 會在安裝clusterware的最后階段由vipca腳本創建,並作為CRS Resource注冊到OCR中,會綁定到每個節點的Public網卡上。
DLM
DLM(Distributed lock)分布式鎖管理器,負責協調節點間資源的競爭,保證並發的有效性,保護共享數據的安全性。
rac架構和原理" title="Oracle rac架構和原理">
cache Fusion
提供傳輸的擴展性,在實例間傳輸block的image,跟蹤資源的當前位置和狀態,每個實例的sga的目錄結構中保存現有傳輸資源信息。
Cache fusion模型:
Global Resource Directory由Global Cache Service來管理記錄資源的模式、資源的角色、block在實例中的狀態、在各個活動的節點發布資源的master、在必要的時候重新發布master(確如實例的啟動和關閉)
Global Cache Service(GCS):
三種資源模式:null(默認的),share(查詢),exclusive(x)可以block的內容,其他的實例就是null mode)
兩種資源角色
local:第一次請求資源的初始模式:只有一個實例可以有這個block的dirly copy global:當一個block在多個實例中變dirty時,local 就變成了global block,只能由global cacheservice寫到磁盤中
Cache fusion block的傳輸:
例如:有ABCD四個節點,Global Cache Service:GCS
1.Read with no transfer
如果C節點需要向共享磁盤文件上讀一個Block,那么它向GCS發送請求,這個時候請求被定向到D,D是這個Block的master(每個資源都有master)。GCS把資源授權為share mode和local Role,在目錄中記錄下了他的狀態(目錄在節點D),然后通知C,C把這個資源從Null改成share。C開始I/O,現在C有了這個Block以share模式從磁盤文件讀取權限。
- Read to write transfer
B也要這個Block,並且不僅是讀,而且還要改變它的內容。B向D(這個Blocak的master)的GCS發出請求,GCS向C發出請求,要求C把這個Block給B,B收到后,告訴GCS,現在B可以修改這個Block了。
3. Wirte to write transfer
A向D節點的GCS發出請求,GCS告訴B節點放棄他的Exclusive鎖,並且把當前的image傳到A,如果這個請求沒有完成,就會放到GCS的隊列里,B把這個block傳到A,這個時候,要寫log,強制log flush,把模式變成null。發送到A,並且告訴它這個exclusive的資源可以用了。A收到了這個Block的image,會通知GCS並且告訴它block的status是exclusive。這個時候,B不能對這個block做操作,雖然他的buffer cache中,它還有這個block的copy
4.write to read transfer
C要讀這個BLOCAK,先向D(master)發出請求,GCS要求A把它傳輸到C,A接受到請求完成它的工作,這可能會A寫LOG和log flush。在發送這個block之前,A會把它的exclusive鎖降低到share模式。C把從A收到的BLOCK的SCN取出來,建設成一個資源Assumption信息為GCS更新global resource directory。
Failover
Failover 是oracle RAC高可用性的基礎,它指集群中任何一個節點的故障都不會影響用戶的使用,連接到故障節點的用戶會被自動轉移到健康節點,用戶感知不到節點故障。
Failover方式:
1.Client-side Connect time failover
2.TAF
3.Server-side TAF
1.client-side connect time failover
含義:如果用戶端tnsnames中配置了多個地址,用戶發起連接請求時,會先嘗試連接地址表中的第一個地址,如果這個連接嘗試失敗,則繼續嘗試使用第二個地址,直至連接成功或者遍歷了所有的地址。
特點:只在建立連接那一時刻起作用。連接建立之后,節點出現故障都不會做處理。會話斷開、用戶程序必須重新建立連接。
啟用方法:在客戶端的tnsnames.ora中failover=on條目,這個參數默認就是on。tnsnames.ora配置實例如下:
rac架構和原理" title="Oracle rac架構和原理" width="690" height="112">
rac架構和原理" title="Oracle rac架構和原理" width="522" height="404">
rac架構和原理" title="Oracle rac架構和原理" width="529" height="500">
Loadbalance
Loadbalance就是把負載平均的分配到集群的各個節點,從而提高整體的吞吐能。
分散負載的方法:
1.通過connection balance,按照某種算法把用戶分配到不同的節點。也可認為是純技術的分散均衡
2.通過service 在應用層上進行分散,也可認為是面向業務的分散負載。(需要基於軟件開發)
Conection Bablancing
在用戶請求建立連接時,根據每個節點的負載決定把連接分配給哪個實例。連接建立后,會話的所有操作就都在這個實例上完成,而不會分派給其他節點了
1.1 客戶端均衡(Client-side LB)
Oracle 8使用的方法,配置方法是在客戶端的insnames。ora文件中加入:LOAD_BALANCE=YES條目。當客戶端發起連接時,會從地址列表中隨機的選取一個,再使用隨機算法把連接請求分配到各個實例。
缺點:由於隨機未考慮節點實際負載,可能出現負載不均衡情況。若在短時間內同時發起多個連接,有可能被分配到同一個節點(更壞:故障節點)
Connection Balancing
在用戶請求建立連接時,根據每個節點的負載決定把連接分配給哪個實例。連接建立后,會話的所有操作就都在這個實例上完成,而不會分派給其他節點了。
1.2 服務器端均衡(server-side LB)
有了PMON的自動注冊機制后,集群的每個節點的listener都掌握所有節點的負載情況,當收到客戶端連接請求時,就會把連接轉給負載最小的節點,這個節點有可能是自己也有可能是其他節點,
listener的節點選擇方法根據用戶所請求的連接方式會有所不同:
1)如果用戶請求的Delicate專有連接,listener首先選擇負載最小的節點,如果多個節點負載相同,則從節點選擇負載最小的實例。
2) 如果用戶請求的是share server共享功能連接,除了做節點負載比較和實例負載比較之外,還要在所選擇實例上,選擇負載最小的dispatcher進行轉發。
利用Service分散負載
通過把應用按照功能模擬進行划分分成service,進而把每個service固定在某個RAC節點上,從而從根本上提升系統的性能。這種分散負載的方法不是僅靠DBA進行配置就能完成的,需要DBA和開發人員合作,在了解業務數據特點之后才可能看到效果。
ASM
ASM:Automatic Storage Managerment,一種面向Oracle的存儲解決方案與RDBMS相似,由實例和文件組成,可通過sqlplus工具來維護。
ASM實例的創建和刪除也可以用ASMCA這個命令來操作。ASM實例需要CSS進程。
ASM實例
由SGA和后台進程組成。
1.1 SGA組成
ASM實例的SGA包括Buffer cache share pool,Large Pool等。需要注意的是share pool,因為extent map要放在這部分的內從中,需要根據數據量來估計extent map的大小做相應的調整。
SQL>show sga
rac架構和原理" title="Oracle rac架構和原理" width="625" height="277">
ASM
1.2 后台進程
ASM實例比RDBMS實例多2個進程:RBAL和ABRn。
RBAL:Rebalancer進程,負責規划ASM磁盤組的rebanlance活動。
ABRn:是RBAL進程的子進程,可以有多個,n可取1-9,這組進程負責真正完成rebanlance活動。(可用ps-ef|grep asm 查看ASM相關的進程)
使用ASM作為存儲的RDBMS實例也會多出2個進程:RBAL和ASMB
RBAL:打開每個磁盤的所有磁盤和數據的rebalance。
ASMB:作為ASM實例和數據庫實例之間的信息通道。負責與ASM實例的通信,它先利用Diskgroup Name從CSS獲得管理該Diskgroup的ASM實例的連接串,再建立到ASM的持久連接,兩個實例之間通過這條連接定期交換信息,同時也是一種心跳機制。
RDBMS實例想要使用ASM作為存儲,RDBMS實例必須在啟動時從ASM實例獲得extent map,以后發生磁盤組的維護操作,ASM實例還要把Extent MAP的更新信息通知給RDBMS實例,這個2個實例間的信息交換就是通過ASMB進程完成的。這也就是為什么:ASM實例必須要先於數據庫實例啟動,和數據庫實例同步運行,遲於數據庫實例關閉。
ASM配置
ASM可以使用裸設備或者ASMLib方式。
ASM磁盤組
直接管理磁盤,而不是文件
一組磁盤作為一個邏輯單元
原有的磁盤空間被划分為統一的管理單元
ASM把文件均勻的分布在所有的磁盤上
磁盤組中的磁盤可以不斷添加和應用類型分組
自動的存儲管理
內置的高性能集群文件和卷管理(專門針對Oracle數據文件)
有效的分散數據到所有的存儲設備上,實現負載均衡,達到最優性能和資源利用
集成的Mirroring和Strip功能,實現高可靠性和高性能
簡化存儲管理的復雜性
移除對第三方磁盤管理和文件系統的需要
Stripe:
動態、聯機的重組存儲資源
磁盤發生變化時,自動的重新平衡數據分布
在存儲設置過程中,消滅了手工I/O調優的需要
rac架構和原理" title="Oracle rac架構和原理" width="670" height="82">
Oracle RAC的優缺點
Oracle RAC是一種高可用集群架構,與其他架構相比:
1、資源使用
雙機熱備:平時有一台服務器閑置
雙機互備:每台服務器都要預留一部分資源,接管備用
ORACLE RAC:每台服務器資源可以充分利用
2、維護管理
雙機熱備:集群層面維護相對簡單,數據庫維護相同
雙機互備:集群層面維護相對簡單,數據庫維護相同
Oracle RAC:集群層面維護相對復雜,數據庫維護相同
3、接管時間
雙機熱備:基於操作系統層面,數據庫需要重啟,接管時間相對較長
雙機互備:基於操作系統層面,數據庫需要重啟,接管時間相對較長
Oracle RAC:基於數據庫層面,數據庫不需要重啟,接管時間相對較短
4、性能狀況
雙機熱備:數據庫相當於單點,數據庫性能好
雙機互備:資源需要預留,數據性能相對單點差
Oracle RAC:並發查詢性能好,針對不同業務和配置,事務處理能力不一致,性能表現不一致
Oracle RAC架構的延伸
Oracle RAC架構的延伸主要在以下幾方面:
Oracle RAC和RMAN(基於數據庫還原、備份的工具):兩者結合,可更高地保障數據庫數據的安全性
Oracle RAC和Data Guard(基於日志復制技術的數據同步軟件):兩者結合,解決共享存儲出現故障的問題
Oracle RAC和Streams:兩者結合,構成分布式系統,解決Oracle RAC系統負載過高的問題
Oracle RAC和Golden Gate
rac架構和原理" title="Oracle rac架構和原理" width="690" height="467">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="488">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="433">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="462">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="382">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="415">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="512">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="540">
rac架構和原理" title="Oracle rac架構和原理" width="690" height="634">