2021年12月29日 星期三

5. Oracle ASM 架構

Oracle ASM (Automatic Storage Management) 是從 Oracle 10g 開始推出的新功能,為了用來搭配 RAC 所使用的一種存儲結構,有了 ASM 之後,搭建 RAC 就不再需要第三方的 Cluster File System ,自此 Oracle 便擁有了一套完整的 Cluster 架構。 ASM 一開始於 Oracle 10g 推出的時候,是歸於 Database Home 底下進行管理,而從 Oracle 11g 之後, ASM 就屬於 Grid Infrastructure 的一部分了。


傳統磁碟的使用方式是將磁碟做成 Volume ,然後再將其 Format 成 File System 並掛載在作業系統上,之後就可以存放檔案了;而 ASM 則是完全取代了這一部分,這個部分以 ASM 的 Disk Group取代之,檔案存放在 ASM 的 Disk Group 裡面。


ASM Disk Group 是一種邏輯的存儲概念,一個 Disk Group 由一個或多Disk 所構成,有點類似 Tablespace 與 Data File 這種邏輯與實體結構 :


對於 Oracle 資料庫的邏輯結構來說,底層的 Physical block 會 Format 成 Oracle Block ,多個 Oracle Block 構成 Extent ,多個 Extent 構成 Segment ,最上層的 Tablespace 則是由實體的 Data File 所構成;對於 ASM 來說,首先將實體的 Disk 格式化為 ASM Disk ,一個或多個 ASM Disk 組成一個 Disk Group ,在 Disk Group 裡面存放的檔案稱作 ASM File ,而 ASM File 裡面又可以劃分多個 Allocation Unit (AU) , AU 則是由底層的 Physical Block 所構成。


ASM 的 Allocation Unit (AU) 在建立 Disk Group 的時候就必須決定每個 AU 的大小,在 Oracle 10g 的時候 AU 預設為 1M ,到了 Oracle 12c 之後預設則為 4M ,也是比較建議的大小。一個 ASM File 是由多個 AU 所組成,而 ASM 的特性是會將這些 AU 平均分散在每個 ASM Disk 上面,如果有 ASM Disk 新增或者是移除,它也會動態的平衡 (Rebalance) 到這些新增或者是移除所剩下的 ASM Disk 上面,這個行為有點類似 Storage 的 RAID 0 結構。


ASM 除了動態平衡的特性之外,也可以為 AU 設置冗餘,用途是為了避免當 ASM Disk 損壞時造成資料的遺失,冗餘必須在 Disk Group 建立時決定是否設置, External Redundancy 表示不設置冗餘,所有的 AU 都只有一份 ; Normal Redundancy 表示每一個 AU 都維持兩份, High Redundancy 表示每一個 AU 都複製成三份。當有冗餘設置時,在一個 ASM Disk Group 裡面必須再劃分 Failure Group , Failure Group 的用意在於每一個 AU 的 copy 必須存放在不同的 Failure Group 上面,這樣當一份損毀時,還有另外一份可以用。 Failure Group 的概念就是將一個 ASM Disk Group 裡面的 ASM Disk 進行分組,每一個 AU 的 copy 必須存放在不同組別上,這樣才有保護的作用,在 Normal Redundancy 架構下必須劃分兩個 Failure Group 以上; High Redundancy 則是要劃分三個 Failure Group 以上, Normal Redundancy 可以容許一個 Failure Group 完全損壞,因為所有的 AU 都保留兩份,損壞了一份還有一份可用,同理 High Redundancy 則是可以容許兩個 Failure Group 損壞,如果在建立 Disk Group 時沒有自行將 ASM Disk 分組為 Failure Group ,則預設一個 ASM Disk 自己會做為一個 Failure Group 所使用,例如一個 ASM Disk Group 裡面有四個 ASM Disk ,如果沒有指定哪些 ASM Disk 屬於哪個 Failure Group ,則這四個 ASM Disk 自己都會是一個 Failure Group ,也就是總共會有四個 Failure Group 。 ASM 這種冗餘的概念,有點類似 Storage 的 RAID 1 結構,但不同的是, RAID 1 是 Disk 對 Disk 做 Mirror ,而 ASM 則是以 AU 為單位作為 Mirror ,每一個 AU 的 Primary copy 與 Secondary copy 不一定是在哪個 ASM Disk 上面,可以確定的是,它們只會屬於不同的 Failure Group 。


ASM Disk Group 是由 ASM Disk 所組成,而 ASM Disk 則是由實體的 Disk 格式化成 ASM Disk 而來,實際上 ASM 只會識別作業系統上面所提供的 Disk 名稱,作業系統上面的 Disk ,底層可能是沒有經過分割的裸磁碟,或者是透過 Storage 做成 RAID 之後所形成的 Disk ,這些都可以用來作為 ASM Disk 所用,因此在冗餘的選擇上,底層可以選擇使用裸磁碟,然後只使用 ASM Disk Group 層面的 Normal 或 High Redundancy ;或者是底層已經使用冗餘 (例如 RAID 1+0) ,然後在 ASM Disk Group 層面不使用冗餘 (External Redundancy) ,這兩者都具有資料保護的作用。


ASM 的使用上,必須啟動 ASM Instance , ASM Instance 啟動之後所有的 Disk Group 才可以使用,在 Oracle 10g 的時候, ASM 屬於 Database Home 所管理,所以 ASM Instance 需要透過 DBCA 來額外建立,從 Oracle 11g 以後, ASM Instance 屬於 Grid Infrastructure 的一部分,要使用 ASM 必須要安裝 Grid Infrastructure , ASM Instance 屬於 CRS 的一部分, ASM Instance 跟隨著 CRS 一起啟動,在 ASM Instance 啟動之後, ASM 本身會產生 RBAL 、 ARBn 與 GMON 三個 Background Process :


ASM Instance 的 RBAL process 是用來管理 ASM Disk Rebalance 所用,也就是一個 Rebalance Coordinate Process ; ARBn 則是實際上執行 Disk Rebalance 的 Process ; GMON 為 Disk Group Monitor Process ,用來監控 ASM Disk ,例如新增或刪除 ASM Disk ,或者是 ASM Disk Online 、 Offline 狀態…等。對於 Database Instance 來說,如果要將 Data File 放置於 ASM ,則必須透過 ASMB 與 RBAL 兩個 Process , ASMB 是 Database Instance 用來與 ASM Instance 連線所用,也就是這兩種 Instance 之間溝通的橋樑; RBAL 則是 Database Instance 用來存取 ASM Disk 所用,也就是 Database Instance 與 ASM Disk 之間溝通的橋樑。將 Data File 建立於 ASM 只需簡單的指定 Disk Group 名稱,裡面的檔案均以 OMF 命名,好處是不用特別管理 ASM File ,或者是直接指定 Data File 的名稱也可以,只不過這個名稱對於 ASM 來說只是一個別名,其實底層還是有一個 OMF 的檔案存在:


SQL> create tablespace asm_tbs datafile '+DATADG' size 512M;

      (建立 Tablespace 至 ASM 的 DATADG ,以 OMF 命名)

SQL> create tablespace asm_tbs datafile '+DATADG/ORCL/asm_tbs01.dbf' size 512M;

      (建立 Tablespace 至 ASM 的 DATADG ,自行命名為 asm_tbs01.dbf)


我們除了可以將 Data File 放置在 ASM Disk Group 當中,也可以將其放置在 ACFS 上, ACFS (ASM Cluster File System) 是一種建立在 ASM 結構之上的一種 File System 架構, ASM Disk Group 實際上是一種直接存取 Disk 的架構,並不是像傳統在作業系統上面可以看到的一種 File System , ASM Disk Group 在作業系統上是無法看到的,必須透過 Oracle 的指令來進行查詢,而 ACFS 則是 ASM 一種進階的運用,基於 ASM Disk Group 將其劃分出 Volume ,然後將其格式化之後掛載到作業系統上面,這樣作業系統就可以看到一個 File System 掛載在上面,這個 File System 就稱作是 ACFS ,差別只在於 ACFS 是由 ASM Disk Group 所劃出的 Volume 而來,而一般的 File System 則是由傳統的 Disk Volume 所產生出來,除此之外, ACFS 是一種 Cluster File System ,必須是在 Cluster (RAC) 架構下才可以使用。另外 ACFS 與原始的 Disk Group 差別在於, ASM Disk Group 只能存放 Oracle 相關的檔案,例如資料庫的 Data File 、 Archive Log 、 RMAN 備份 , expdp 的 dump 檔…等,而 ACFS 則是在作業系統上可見的 File System ,與一般的檔案系統無異, ACFS 可以放置任何的檔案。


對於 Disk Group 的規劃,一般建議建立兩個 Disk Group ,一個為 DATADG ,用來放置資料庫的 Data File ,另一個為 RECODG ,用來放置資料庫的 Redo Log 與 Archive Log ,除此之外,可以獨立建立一個 SYSTEMDG 專門來放置 Grid Infrastructure 的 OCR 與 Voting Disk,這些不一定要建立單獨 Disk Group 來存放,可與 DATADG 放置在一起,唯一要注意的是,放置 OCR 與 Voting Disk 的 Disk Group ,如果設置為 Normal Redundancy ,那至少要設定三組以上的 Failure Group ; 如果為 High Redundancy ,那麼至少要設定五組以上的 Failure Group 。



沒有留言:

張貼留言