ORACLE集群概念和原理(二)
概述:寫下本文檔的初衷和動力,來源於上篇的《oracle基本操作手冊》。oracle基本操作手冊是作者研一假期對oracle基礎知識學習的匯總。然后形成體系的總結,一則進行回顧復習,另則便於查詢使用。本圖文文檔亦源於此。閱讀Oracle RAC安裝與使用教程前,筆者先對這篇文章整體構思和形成進行梳理。由於閱讀者知識儲備層次不同,我將從Oracle RAC安裝前的准備與規划開始進行整體介紹安裝部署Oracle RAC。始於唐博士指導,對數據庫集群進行配置安裝,前后經歷2,3個月的摸索。中間遇到不少問題。此文檔也將一一記錄整理。(本文原創/整理,轉載請標注原文出處: ORACLE集群概念和原理(二))
2015年7月16日16:45:02
目錄
Oracle集群概念和原理
Oracle的三種高可用集群方案
1 RAC(Real Application Clusters)
多個Oracle服務器組成一個共享的Cache,而這些Oracle服務器共享一個基於網絡的存儲。這個系統可以容忍單機/或是多機失敗。不過系統內部的多個節點需要高速網絡互連,基本上也就是要全部東西放在在一個機房內,或者說一個數據中心內。如果機房出故障,比如網絡不通,那就壞了。所以僅僅用RAC還是滿足不了一般互聯網公司的重要業務的需要,重要業務需要多機房來容忍單個機房的事故。
2 Data Guard.(最主要的功能是冗災)
Data Guard這個方案就適合多機房的。某機房一個production的數據庫,另外其他機房部署standby的數據庫。Standby數據庫分物理的和邏輯的。物理的standby數據庫主要用於production失敗后做切換。而邏輯的standby數據庫則在平時可以分擔production數據庫的讀負載。
3 MAA
MAA(Maximum Availability Architecture)其實不是獨立的第三種,而是前面兩種的結合,來提供最高的可用性。每個機房內部署RAC集群,多個機房間用Data Guard同步。
RAC概述
共享存儲文件系統(NFS),或甚至集群文件系統(如:OCFS2)主要被用於存儲區域網絡(所有節點直接訪問共享文件系統上存儲器),這就使得節點失效而不影響來自其他節點對文件系統的訪問,通常,共享磁盤文件系統用於高可用集群。
Oracle RAC的核心是共享磁盤子系統,集群中所有節點必須能夠訪問所有數據、重做日志文件、控制文件和參數文件,數據磁盤必須是全局可用的,允許所有節點訪問數據庫,每個節點有它自己的重做日志和控制文件,但是其他節點必須能夠訪問它們以便在那個節點出現系統故障時能夠恢復。
Oracle RAC 運行於集群之上,為 Oracle 數據庫提供了最高級別的可用性、可伸縮性和低成本計算能力。如果集群內的一個節點發生故障,Oracle 將可以繼續在其余的節點上運行。Oracle 的主要創新是一項稱為高速緩存合並的技術。高速緩存合並使得集群中的節點可以通過高速集群互聯高效地同步其內存高速緩存,從而最大限度地低降低磁盤 I/O。高速緩存最重要的優勢在於它能夠使集群中所有節點的磁盤共享對所有數據的訪問。數據無需在節點間進行分區。Oracle 是唯一提供具備這一能力的開放系統數據庫的廠商。其它聲稱可以運行在集群上的數據庫軟件需要對數據庫數據進行分區,顯得不切實際。企業網格是未來的數據中心,構建於由標准化商用組件構成的大型配置之上,其中包括:處理器、網絡和存儲器。Oracle RAC 的高速緩存合並技術提供了最高等級的可用性和可伸縮性。Oracle 數據庫 10g 和 OracleRAC 10g 顯著降低了運營成本,增強了靈活性,從而賦予了系統更卓越的適應性、前瞻性和靈活性。動態提供節點、存儲器、CPU 和內存可以在實現所需服務級別的同時,通過提高的利用率不斷降低成本。
RAC 集成集群件管理
Oracle RAC 10g 在 Oracle 數據庫 10g 運行的所有平台上提供了一個完整集成的集群件管理解決方案。這一集群件功能包括集群連接、消息處理服務和鎖定、集群控制和恢復,以及一個工作負載管理框架(將在下文探討)。Oracle RAC 10g 的集成集群件管理具有以下優勢:
(一) 成本低。Oracle 免費提供這一功能。
(二) 單一廠商支持。消除了相互推諉的問題。
(三) 安裝、配置和持續維護更簡單。Oracle RAC 10g 集群件使用標准 Oracle 數據庫管理工具進行安裝、配置和維護。這一過程無須其它的集成步驟。
(四) 所有平台,質量始終如一。與第三方產品相比,Oracle 對新軟件版本進行了更嚴格的測試。
(五) 所有平台,功能始終如一。例如,一些第三方集群件產品限制了集群內可以支持的節點的數量。借助Oracle RAC 10g,所有平台可以支持多達 64 個節點。用戶還可以在所有平台上獲得一致的響應體驗,從而有效解決了高可用性挑戰,包括服務器節點故障、互連故障以及 I/O 隔離現象等。
(六) 支持高級功能。這包括集成監視和通知功能,從而在發生故障時,在數據庫和應用層之間實現快速協調的恢復。
RAC 的體系結構
RAC 是 Oracle 數據庫的一個群集解決方案,是有着兩個或者兩個以上的數據庫節點協調運作能力的。如下圖所示的 RAC 結構圖:
集群管理器(Cluster Manager)在集群系統中對其他各個模塊進行整合,通過高速的內連接來提供群集節點之間的通信。各節點之間內連接使用心跳線互聯,心跳線上的信息功能確定群集邏輯上的節點成員信息和節點更新情況,以及節點在某個時間點的運行狀態,保證群集系統正常運行。通信層管理節點之間的通信。它的職責是配置,互聯群集中節點信息,在群集管理器中使用由心跳機制產生的信息,由通信層負責傳輸,確保信息的正確到達。還有一些群集監視進程不斷驗證系統的不同領域運行狀況。例如,心跳監測不斷驗證的心跳機制的運作是否良好。在一個應用環境當中,所有的服務器使用和管理同一個數據庫,目的是分散每一台服務器的工作量。硬件上至少需要兩台以上的服務器,而且還需要一個共享存儲設備;同時還需要兩類軟件,一類是集群軟件,另外一類就是 Oracle 數據庫中的 RAC 組件。同時所有服務器上的 OS 都應該是同一類 OS,根據負載均衡的配置策略,當一個客戶端發送請求到某一台服務的 listener 后,這台服務器根據負載均衡策略,會把請求發送給本機的 RAC組件處理,也可能會發送給另外一台服務器的 RAC 組件處理,處理完請求后,RAC 會通過群集軟件來訪問共享存儲設備。邏輯結構上看,每一個參加群集的節點有一個獨立的實例,這些實例訪問同一個數據庫。節點之間通過集群軟件的通信層(Communication Layer)來進行通信。同時為了減少 I/O 的消耗,存在一個全局緩存服務,因此每一個數據庫的實例,都保留了一份相同的數據庫 cache。RAC 中的特點如下:
- l 每一個節點的實例都有自己的 SGA;
- l 每一個節點的實例都有自己的后台進程
- l 每一個節點的實力都有自己的 redo logs
- l 每一個節點的實例都有自己的 undo 表空間
- l 所有節點都共享一份 datafiles 和 controlfiles
RAC 的結構組成和機制
在 Oracle9i 之前,RAC 稱為 OPS(Oracle Parallel Server)。RAC 與 OPS 之間的一個較大區別是,RAC 采用了Cache Fusion(高緩存合並)技術,節點已經取出的數據塊更新后沒有寫入磁盤前,可以被另外一個節點更新,然后以最后的版本寫入磁盤。在 OPS 中,節點間的數據請求需要先將數據寫入磁盤,然后發出請求的節點才可以讀取該數據。使用 Cache Fusion 時,RAC 的各個節點間數據緩沖區通過高速、低延遲的內部網絡進行數據塊的傳輸。下圖是一個典型的 RAC 對外服務的示意圖,一個 Oracle RAC Cluster 包含了如下的部分
- 集群的節點(Cluster node)——2 個到 N 個節點或者主機運行 Oracle Database Server。
- 私有網絡(Network Interconnect)——RAC 之間需要一個高速互聯的私有網絡來處理通信和 Cache Fusion。
- 共享存儲(shared Storage)——RAC 需要共享存儲設備讓所有的節點都可以訪問數據文件。
- 對外服務的網絡(Production Network)——RAC 對外服務的網絡。客戶端和應用都通過這個網絡來訪問。
RAC 后台進程
Oracle RAC 有一些自己獨特的后台進程,在單一實例中不發揮配置作用。如下圖所示,定義了一些 RAC 運行的后台進程。這些后台進程的功能描述如下。
(1)LMS(Global cache service processes 全局緩存服務進程)進程主要用來管理集群內數據塊的訪問,並在不同實例的 Buffer Cache 中傳輸數據塊鏡像。直接從控制的實例的緩存復制數據塊,然后發送一個副本到請求的實例上。並保證在所有實例的 Buffer Cache 中一個數據塊的鏡像只能出現一次。LMS 進程靠着在實例中傳遞消息來協調數據塊的訪問,當一個實例請求數據塊時,該實例的 LMD 進程發出一個數據塊資源的請求,該請求指向主數據塊的實例的 LMD 進程,主實例的 LMD 進程和正在使用的實例的 LMD 進程釋放該資源,這時擁有該資源的實例的 LMS 進程會創建一個數據塊鏡像的一致性讀然后把該數據塊傳遞到請求該資源的實例的BUFFER CACHE 中。LMS 進程保證了在每一時刻只能允許一個實例去更新數據塊,並負責保持該數據塊的鏡像記錄(包含更新數據塊的狀態 FLAG)。RAC 提供了 10 個 LMS 進程(0~9),該進程數量隨着節點間的消息傳遞的數據的增加而增加。(2)LMON(Lock Monitor Process,鎖監控進程)是全局隊列服務監控器,各個實例的 LMON 進程會定期通信,以檢查集群中各個節點的健康狀況,當某個節點出現故障時,負責集群重構、GRD 恢復等操作,它提供的服務叫做 Cluster Group Service(CGS)。
LMON 主要借助兩種心跳機制來完成健康檢查。
(一) 節點間的網絡心跳(Network Heartbeat):可以想象成節點間定時的發送 ping 包檢測節點狀態,如果能在規定時間內收到回應,就認為對方狀態正常。
(二) 通過控制文件的磁盤心跳(controlfile heartbeat):每個節點的 CKPT 進程每隔 3 秒鍾更新一次控制文件的數據塊,這個數據塊叫做 Checkpoint Progress Record,控制文件是共享的,所以實例間可以互相檢查對方是否及時更新來判斷。
(三) LMD(the global enqueue service daemon,鎖管理守護進程)是一個后台進程,也被稱為全局的隊列服務守護進程,因為負責對資源的管理要求來控制訪問塊和全局隊列。在每一個實例的內部,LMD 進程管理輸入的遠程資源請求(即來自集群中其他實例的鎖請求)。此外,它還負責死鎖檢查和監控轉換超時。
(四) LCK(the lock process,鎖進程)管理非緩存融合,鎖請求是本地的資源請求。LCK 進程管理共享資源的實例的資源請求和跨實例調用操作。在恢復過程中它建立一個無效鎖元素的列表,並驗證鎖的元素。由於處理過程中的 LMS 鎖管理的首要職能,只有一個單一的 LCK 進程存在每個實例中。
(五) DIAG(the diagnosability daemon,診斷守護進程)負責捕獲 RAC 環境中進程失敗的相關信息。並將跟蹤信息寫出用於失敗分析,DIAG 產生的信息在與 Oracle Support 技術合作來尋找導致失敗的原因方面是非常有用的。每個實例僅需要一個 DIAG 進程。
(六) GSD(the global service daemon,全局服務進程)與 RAC 的管理工具 dbca、srvctl、oem 進行交互,用來完成實例的啟動關閉等管理事務。為了保證這些管理工具運行正常必須在所有的節點上先start gsd,並且一個 GSD 進程支持在一個節點的多個 rac.gsd 進程位$ORACLE_HOME/bin 目錄下,其 log 文件為$ORACLE_HOME/srvm/log/gsdaemon.log。GCS 和 GES 兩個進程負責通過全局資源目錄(Global Resource Directory GRD)維護每個數據的文件和緩存塊的狀態信息。當某個實例訪問數據並緩存了數據之后,集群中的其他實例也會獲得一個對應的塊鏡像,這樣其他實例在訪問這些數據是就不需要再去讀盤了,而是直接讀取 SGA 中的緩存。GRD 存在於每個活動的 instance 的內存結構中,這個特點造成 RAC 環境的 SGA 相對於單實例數據庫系統的 SGA 要大。其他的進程和內存結構都跟單實例數據庫差別不大。
RAC 共享存儲
RAC 需要有共享存儲,獨立於實例之外的信息,如上面提到的ocr 和 votedisk 以及數據文件都存放在這個共享存儲里的。有OCFS、OCFS2、RAW、NFS、ASM 等這樣的一些存儲方式。OCFS(Oracle Cluster File System) 和 OCFS2 就是一個文件系統而已,和 NFS 一樣,提供一種集群環境中的共享存儲的文件系統。RAW 裸設備也是一種存儲方式,是 oracle11g 之前的版本中 RAC 支持的存儲方式,在 Oralce9i 之前,OPS/RAC的支持只能使用這樣的方式,也就是把共享存儲映射到 RAW Device,然后把 Oracle 需要的數據選擇 RAW device存儲,但是 RAW 相對於文件系統來說不直觀,不便於管理,而且 RAW Device 有數量的限制,RAW 顯然需要有新的方案來代替,這樣就有了 OCFS 這樣的文件系統。當然,這只是 Oracle 自己的實現的集文件系統而已,還有其他廠商提供的文件系統可以作為存儲的選擇方案。ASM 只是數據庫存儲的方案而已,並不是 cluster 的方案,所以這里 ASM 應該是區別於 RAW 和 OCFS/OCFS2同一級別的概念,RAW 和 OCFS/OCFS2 不僅可以作為數據庫存儲的方案,同時也可以作為 Clusterware 里的存儲方案,是 CRS 里需要的 storage,而 ASM 僅作為數據庫的存儲而已,嚴格來說僅是 RAC 中的一個節點應用(nodeapps)。ASM 對於 clusterware 安裝時需要的 ocr 和 votedisk 這兩項還不支持,畢竟 ASM 本身就需要一個實例,而 CRS 是完全在架構之外的,這也就是為什么使用了 ASM 的方案,卻總還要加上 OCFS/OCFS2 和 RAW 其中的一個原因。各種 RAC 共享存儲方式的對比如下:
- 集群文件系統——支持 windows 和 Linux 的 OCFS/OCFS2
- AIX 下的 GPFS 等方式——優點是管理方便,表示也很直觀,但缺點是基於文件系統管理軟件,又要經過 OS 的 cache 處理,性能上和穩定性上都有欠缺,所以不適合在生產環境下使用。可以支持 CRS 集群軟件文件和數據庫文件。
- RAW 裸設備方式——通過硬件支持的共享存儲系統,直接用 RAW 設備存儲,可以支持集群軟件文件和數據庫文件。
- 網絡文件系統(NFS)——通過 NFS 實現共享存儲,不過需要經過 Oracle 認證的 NFS 才行,可以支持CRS 集群軟件文件和數據庫文件。
- ASM——集合 RAW 方式 I/O 高性能和集群文件系統易管理等優點,Oracle10g 下推出的共享存儲方式,但是本身 ASM 就是需要 Oracle 的實例支持,所以 ASM 僅支持數據庫文件,而不支持 CRS 文件。
RAC 數據庫和單實例數據庫的區別
為了讓 RAC 中的所有實例能夠訪問數據庫,所有的 datafiles、control files、PFILE/Spfile 和 redo log files 必須保存在共享磁盤上,並且要都能被所有節點同時訪問,就涉及到裸設備和集群文件系統等。RAC database 在結構上與單實例的不同之處:至少為每個實例多配置一個 redo 線程,比如:兩個實例組成的集群至少要 4 個 redo log group。每個實例兩個 redo group。另外要為每一個實例准備一個 UNDO 表空間。
1、redo 和 undo,每個實例在做數據庫的修改時誰用誰的 redo 和 undo 段,各自鎖定自己修改的數據,把不同實例的操作相對的獨立開就避免了數據不一致。后面就要考慮備份或者恢復時 redo log 和歸檔日志在這種情況下的特殊考慮了。
2、內存和進程各個節點的實例都有自己的內存結構和進程結構.各節點之間結構是基本相同的.通過 Cache Fusion(緩存融合)技術,RAC 在各個節點之間同步 SGA 中的緩存信息達到提高訪問速度的效果也保證了一致性。
參考文獻
- Oracle集群概念和原理:Oracle的三種高可用集群方案
- Oracle 11 RAC生存指南
- Oracle 11gR2 RAC管理與性能優化
- ORACLE_BASE(推薦)
- 大話ORACLE RAC
相關文章
【MySql集群搭建】 真機環境下MySQL-Cluster搭建文檔
【Hadoop集群搭建】Hadoop集群的配置(一)
【Hadoop集群搭建】Hadoop集群的配置(二)