1. 引言
本節詳細介紹oracle ADG和RAC。當然這里講得的詳細是相對理論的深入,不涉及到實驗,比如ADG和RAC的搭建及調優等。
RAC (Real Application Clusters) 和 ADG (Active Data Guard)是Oracle 的兩大核心高可用和災備技術。它們是 Oracle 數據庫高可用性(HA)、災難恢復(DR)、可擴展性和數據保護架構的基石,但解決的問題和實現方式有本質區別。
2. Oracle RAC (Real Application Clusters):
2.1 目標:
實例級高可用性 (HA) 和橫向擴展 (Scale-Out)。
2.2 原理:
多個服務器(節點)共享訪問同一個物理數據庫(存儲)。每個節點運行一個獨立的 Oracle 實例(包含 SGA、后臺進程等),這些實例同時掛載并打開同一個數據庫文件(數據文件、控制文件、聯機重做日志)。如下圖
2.3 關鍵組件:
共享存儲: SAN, NAS, ASM, Exadata Storage 等。所有節點必須能并發讀寫同一份數據。
集群軟件: Oracle Clusterware (包括 OCR, Voting Disk) 管理節點成員、心跳檢測、故障轉移協調。
高速互連: 專用網絡(通常是 InfiniBand 或 10GbE+)用于節點間高速緩存同步(Cache Fusion)。
SCAN (Single Client Access Name): 簡化客戶端連接,自動負載均衡和故障轉移。
2.4 如何工作:
并行處理: 應用程序可以連接到任何一個活動節點執行操作。多個節點可以同時處理針對同一個數據庫的不同事務或查詢。
Cache Fusion: RAC 的核心技術。當一個節點需要訪問的數據塊不在其本地 SGA 中,但可能在另一個節點的 SGA 中時,它可以通過高速互連直接從其他節點的內存中獲取該塊(而不是從磁盤讀取),極大提升性能。這涉及復雜的全局鎖管理(Global Resource Directory - GRD)。
故障轉移 (Failover): 如果某個節點發生故障(硬件、軟件、網絡):
- Clusterware 檢測到故障。
- 故障節點被逐出集群。
- 故障節點上正在運行的事務會回滾。
- 客戶端連接(通過 TAF/SCAN)會透明地重新連接到存活的節點。
- 存活的節點接管故障節點的工作負載(可能需要從磁盤重新讀取一些數據塊到自己的 SGA)。
- 數據庫本身(數據文件)始終在線且可用。 服務中斷時間通常很短(秒級到分鐘級)。
2.5 主要優勢:
高可用性: 單節點故障不影響數據庫整體可用性。
可擴展性: 通過添加節點,可以線性或接近線性地提升處理能力(特別是讀密集型負載,寫密集型需要更謹慎設計)。
負載均衡: 工作負載可以自動或手動分配到不同節點。
透明客戶端故障轉移: 應用程序感知不到后端節點的變化(需配合 TAF/FAN/SCAN)。
2.6 主要局限性:
復雜性: 安裝、配置、管理、調優(尤其是 Cache Fusion)比單實例復雜得多。
成本: 需要額外硬件(服務器、高速網絡、共享存儲)、Oracle RAC 許可證(按 CPU 核心計費)。
共享存儲單點故障: 雖然存儲本身通常有 RAID/鏡像保護,但如果整個共享存儲不可用,所有節點都會宕機。需要配合 ASM 冗余或存儲級復制解決。
腦裂風險: 需要 Voting Disk 和冗余網絡防止。
寫擴展性: 對寫沖突非常敏感的應用,擴展性可能受限(需要精心設計應用和數據分區)。
不解決數據損壞/邏輯錯誤: 一個節點上的誤操作(如 DROP TABLE)會立即影響整個數據庫。
不提供地理分散的容災: 節點通常位于同一個數據中心內(或近距離同城)。
3. Oracle ADG (Active Data Guard):
3.1目標:
數據保護、災難恢復 (DR)、報表/查詢卸載。提供物理備用數據庫。
3.2原理:
基于 Oracle 的 Redo Apply 技術。在主數據庫(Primary Database)之外,維護一個或多個物理上完全相同的備用數據庫(Standby Database)。主庫產生的重做日志(Redo Log)實時或近實時地傳輸到備庫,并在備庫上應用(Redo Apply),使備庫的數據與主庫保持同步。ADG架構如下圖:
3.3 關鍵組件:
主數據庫: 生產數據庫,接受讀寫操作。
備用數據庫: 物理副本,通常(在最大可用性或最大保護模式下)處于 MOUNT 狀態或 READ ONLY WITH APPLY 狀態。數據文件結構與主庫完全相同。
日志傳輸服務: 負責將主庫的重做日志(歸檔日志或在線日志)傳輸到備庫(使用 LGWR/ARCH 進程 + Net Services)。
日志應用服務: 在備庫上,使用 MRP (Managed Recovery Process) 應用接收到的重做日志,保持數據同步。
Data Guard Broker: 可選的管理框架,簡化配置、監控和角色切換。
3.4 工作模式:
物理備用: 備庫是主庫的逐塊物理副本。通過應用重做直接修改數據文件。這是 ADG 的基礎。
ADG 核心特性: 物理備庫可以在應用重做的同時,以 READ ONLY 模式打開!這是與普通物理備庫(只能 MOUNT)的關鍵區別。
- 只讀訪問: 允許在備庫上執行只讀查詢、生成報表、運行 BI 工具等,完全不影響主庫性能,也不影響重做應用。
- 實時查詢: 從 Oracle 11gR2 開始,支持實時查詢,即使接收到的重做尚未完全應用到數據文件,查詢也能看到最新的已傳輸重做所對應的數據狀態(需要 STANDBY_MAX_DATA_DELAY 參數配合)。
3.5 保護模式:
最大性能 (Max Performance): 默認模式。異步傳輸重做。主庫提交事務無需等待備庫確認。提供最高主庫性能,但備庫可能有少量數據丟失(RPO > 0)。適用于異地災備。
最大可用性 (Max Availability): 同步傳輸重做。主庫提交事務需等待至少一個備庫確認寫入重做日志(但不一定已應用)。如果備庫不可用,主庫會自動降級為最大性能模式,不會掛起。平衡了高可用和數據保護(RPO ≈ 0)。適用于同城或近距離災備。
最大保護 (Max Protection): 同步傳輸重做。主庫提交事務必須等待至少一個備庫確認重做已寫入磁盤日志文件。如果所有同步備庫不可用,主庫會關閉,防止數據丟失。提供最高數據保護(RPO = 0),但犧牲了主庫可用性。較少使用。
3.6 角色切換:
切換 (Switchover): 計劃的、無損的主備角色互換。用于維護、升級等。主庫變為備庫,備庫變為主庫。操作相對簡單,停機時間短。
故障轉移 (Failover): 當主庫發生不可恢復的故障(硬件損壞、數據中心故障)時,將備庫提升 (Activate) 為新的主庫。這通常是有損操作(可能有數據丟失,取決于保護模式和傳輸延遲),需要手動介入或 Broker 自動執行。
3.7 主要優勢:
強大的災難恢復: 提供地理上獨立的數據庫副本,應對站點級故障。
數據保護: 防止存儲故障、數據損壞(可利用備庫恢復主庫)、人為誤操作(可利用備庫閃回或恢復)。
報表/查詢卸載: 利用 ADG 的只讀能力,將昂貴的只讀負載(報表、BI、查詢)從主庫卸載到備庫,顯著提升主庫性能和可擴展性。這是 ADG 非常核心的價值。
零數據丟失潛力: 在最大可用性/保護模式下可實現 RPO=0。
滾動升級/打補丁: 通過 Switchover,可以在備庫(新主庫)上先應用變更,驗證后再切換回來,減少計劃停機時間。
數據庫快照: 可以在 ADG 備庫上創建臨時的、可寫的快照數據庫用于測試、開發,不影響主庫或備庫的同步。
備份卸載: 可以在備庫上進行備份操作,減輕主庫壓力。
3.8 主要局限性:
備庫只讀: ADG 備庫是物理只讀的,不能直接接受寫操作(快照數據庫除外)。
延遲: 備庫數據與主庫存在一定的延遲(RPO),取決于網絡帶寬、距離、保護模式、主庫負載。
資源需求: 需要額外的服務器、存儲、網絡帶寬和 Oracle 許可證(ADG 需要額外許可,但比 RAC 便宜很多)。
不解決主庫實例級故障: 主庫實例崩潰,需要 RAC 或其他機制保證實例級高可用。
應用兼容性: 卸載查詢到備庫時,需注意只讀限制(如不能修改序列)和會話狀態問題。
4. RAC 與 ADG 的關系
RAC 和 ADG 是互補的技術,它們解決不同層面的問題:
4.1 RAC + ADG 黃金組合: 這是企業級高可用和災備的最佳實踐。
- RAC: 在主站點提供實例級高可用性,解決單臺服務器故障問題,提供負載均衡和橫向擴展能力。
- ADG: 將整個 RAC 數據庫(包含所有節點共享的數據)復制到一個或多個異地站點的物理備庫(可以是單實例或另一個 RAC)。提供:
災難恢復: 應對站點級故障。
數據保護: 防止邏輯/物理損壞。
報表卸載: 在備庫運行只讀負載,釋放主 RAC 集群資源。
效果: 實現了從服務器、實例到數據中心的多層次高可用和容災。
4.2獨立使用:
**只有 RAC:**能應對單節點故障,但無法應對共享存儲故障、站點故障、數據損壞/誤操作。缺乏異地容災和查詢卸載。
**只有 ADG:**能提供數據保護、容災和查詢卸載,但主庫本身是單點故障(單實例)。如果主庫實例宕機,需要手動 Failover 到備庫,恢復時間(RTO)較長。
4.RAC 與 ADG綜合對比
簡單來說,RAC 是“多個人(實例)同時操作同一份文件(數據庫)”,解決的是干活的人(服務器)突然病倒(故障)的問題,并可以加人提高效率(擴展)。ADG 是“實時復印機”,把主文件(數據庫)一模一樣地復制一份或多份到其他地方(備庫)。主文件壞了(災難/損壞),可以用復印件(備庫)。同時,復印件可以用來查閱(只讀查詢),減輕主文件查閱壓力(卸載)。
本文完。
碼字不易,寶貴經驗分享不易,請各位支持原創,轉載注明出處,多多關注作者,后續不定期分享DB基本知識和排障案例及經驗、性能調優等。