深入瞭解 Oracle Flex ASM 及其優點
深入瞭解 Oracle Flex ASM 及其優點
簡介
Oracle Real Application Cluster (RAC) 是 Oracle 解決方案中的一個著名產品,用於保持業務資料的高可用性。Oracle RAC 允許在所有叢集節點之間共享負載,採用 N-1 容錯配置來應對節點故障,其中 N 是節點總數。Oracle RAC 一直在不斷改進每個版本,此次也不例外。新的 12.1.0.1 版包含“Flex ASM”和“Flex 叢集”兩個屬性,支援面向雲端計算的環境的各種苛刻需求。
Oracle RAC 12c 引入了兩個新概念:
中心節點: 和以前的版本一樣,它們通過專用網路相互連線,並且可以直接訪問共享儲存。這些節點可以直接訪問 Oracle 叢集登錄檔 (OCR) 和表決磁碟 (VD)。
葉節點: 這些節點是輕型節點,彼此不互連,也不能像中心節點一樣訪問共享儲存。每個葉節點與所連線的中心節點通訊,並通過所連線的中心節點連線到叢集。
此拓撲允許鬆散耦合的應用伺服器與緊密耦合的資料庫伺服器形成一個叢集。緊密耦合的伺服器是中心伺服器,與叢集中的其他中心伺服器共享資料庫、OCR 和表決裝置的儲存並進行對等通訊。鬆耦合的伺服器是葉伺服器,與叢集中的單箇中心伺服器形成鬆散通訊關聯,不需要與叢集中的其他中心伺服器或葉伺服器共享儲存,也不需要與之進行對等通訊,只與所關聯的中心伺服器通訊。在 12.1.0.1 中,葉伺服器旨在提高應用的高可用性和實現多層資源管理。
在 Oracle 12c 之前,對於要使用 ASM 的資料庫例項來說,所有節點上的 ASM 例項必須已處於執行狀態,才能啟動資料庫例項。如果 ASM 例項未執行,則意味著在儲存級使用 ASM 的資料庫例項不能啟動。這實際上意味著無論採用何種技術(即 RAC、ASM 和共享儲存),均不能訪問資料庫例項。
隨著 Oracle 12c 的推出,一個名為 Oracle Flex ASM 的特性解除了上述限制,它的一個主要特性是故障切換到叢集中的其他節點。本質上是一箇中心和葉架構,Oracle Clusterware 通過一個替代 ASM 例項將故障節點的連線將無縫轉移到另一個成員節點。在給定叢集中執行的 ASM 例項數被稱作 ASM 基數,預設值為 3。但此基數值可以使用 Clusterware 命令修改。
Oracle Flex 叢集
從架構上來說,Oracle Flex 叢集包括一箇中心和葉架構,其中只有中心節點可以直接訪問 Oracle 叢集登錄檔 (OCR) 和表決磁碟 (VD)。但是應用可以通過葉節點訪問資料庫,而不必在葉節點上執行 ASM 例項。通過中心節點連線到資料庫使得它對應用透明。
圖 1:描繪了一個典型的 Oracle Flex 叢集,包含 4 個葉節點和 2 箇中心節點。簡單地說,Oracle Flex 叢集需要 Oracle Flex ASM。
Oracle Flex ASM 的實現方面
Oracle Flex ASM 可通過兩種方式實現:
-
純 12c Flex ASM(相同版本)
-
Grid Infrasctructure (GI) 和資料庫都執行在 Oracle 12c 上
-
-
Oracle 12c 之前的混合版本(不同版本)
-
和平常一樣,ASM 例項將在每個節點上執行,Flex 配置支援 12c 之前的資料庫。使用 ASM 磁碟組的相容性引數管理各資料庫例項之間的相容性。這種方法的優點是,如果 Oracle 12c 資料庫例項與一個 ASM 例項的連線斷開,資料庫連線將故障切換至其他伺服器上的另一個 ASM 例項。通過將基數設定為 all 即可以實現這種故障切換。
-
使用 Oracle Flex ASM 的 Oracle RAC 12c
標準 Oracle Flex ASM 配置:
Oracle Flex ASM 配置上的 ASM 例項故障:
1. 登入 RAC 資料庫例項 1 (rac1)
[[email protected] Desktop]$ hostname oel6-112-rac1.localdomain
2. 檢查 ASM 例項和 RAC 資料庫例項的狀態
[[email protected] Desktop]$ ps -ef | grep pmon oracle 3325 1 0 17:39 ? 00:00:00 asm_pmon_+ASM1 oracle 3813 1 0 17:40 ? 00:00:00 mdb_pmon_-MGMTDB oracle 5806 1 0 17:42 ? 00:00:00 ora_pmon_orcl1 oracle 6193 1 0 17:42 ? 00:00:00 apx_pmon_+APX1
3. 從例項 1 (rac1) 檢查 RAC 資料庫例項中 ASM 例項的狀態
[[email protected] Desktop]$ srvctl status asm ASM is running on oel6-112-rac2,oel6-112-rac1
4. 在例項 1 (rac1) 中檢查叢集狀態
[[email protected] Desktop]$ crsctl check cluster CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online
5. 用於檢查 Oracle Flex ASM 是否啟用的命令 (rac1)
[[email protected] Desktop]$ asmcmd ASMCMD> showclustermode ASM cluster : Flex mode enabled ASMCMD> showclusterstate Normal
6. 用於更改 ASM 基數的命令 (rac1)
[[email protected] Desktop]$ srvctl status asm -detail ASM is running on oel6-112-rac2,oel6-112-rac1 ASM is enabled. [[email protected] Desktop]$ srvctl config asm -detail ASM home: /u01/app/12.1.0/grid Password file: +DATA/orapwASM ASM listener: LISTENER ASM is enabled. ASM instance count: 3 Cluster ASM listener: ASMNET1LSNR_ASM
7. 用於檢查 Oracle Flex ASM 是否啟用的命令 (rac2)
[[email protected] Desktop]$ asmcmd ASMCMD> showclustermode ASM cluster : Flex mode enabled ASMCMD> showclusterstate Normal ASMCMD> exit
8. 如何更改 ASM 基數 (rac2)
[[email protected] Desktop]$ srvctl config asm -detail ASM home: /u01/app/12.1.0/grid Password file: +DATA/orapwASM ASM listener: LISTENER ASM is enabled. ASM instance count: 3 Cluster ASM listener: ASMNET1LSNR_ASM
9. 在 RAC 資料庫例項 1 (rac1) 中關閉 ASM 例項
[[email protected] Desktop]$ srvctl stop asm -node oel6-112-rac1 -stopoption abort -force
10. 在 RAC 資料庫例項 1 (rac1) 中檢查 ASM 例項的狀態
[[email protected] Desktop]$ srvctl status asm PRCR-1070 : Failed to check if resource ora.asm is registered Cannot communicate with crsd
11. 在 RAC 資料庫例項 1 (rac1) 中檢查叢集服務的狀態
[[email protected] Desktop]$ crsctl check cluster CRS-4535: Cannot communicate with Cluster Ready Services CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online
12. 在例項 1 (rac1) 中檢查 ASM 和 RAC 資料庫的狀態
[[email protected] Desktop]$ ps -ef | grep pmon oracle 3813 1 0 17:40 ? 00:00:00 mdb_pmon_-MGMTDB oracle 5806 1 0 17:42 ? 00:00:00 ora_pmon_orcl1 oracle 6193 1 0 17:42 ? 00:00:00 apx_pmon_+APX1
注:在這裡,資料庫例項與特定節點中執行的特定 ASM 例項關聯。如果因為某種原因,ASM 例項無法啟動/服務關閉,資料庫例項仍然可以啟動,因為資料庫例項將查詢同一叢集中執行的 ASM 例項。圖 3 描繪了 Flex ASM 的高可用特性。
13. 在 RAC 資料庫例項 1 (rac1) 中檢查沒有 ASM 例項的正在執行的 RAC 資料庫例項的狀態
[[email protected] Desktop]$ . oraenv ORACLE_SID = [orcl1] ? orcl1 ORACLE_HOME = [/home/oracle] ? /u01/app/oracle/product/12.1.0/db_1 The Oracle base remains unchanged with value /u01/app/oracle
14. 從 RAC 資料庫例項 1 (rac1) 登入資料庫例項
[[email protected] Desktop]$ sqlplus /nolog SQL*Plus: Release 12.1.0.1.0 Production on Wed Sep 25 18:24:36 2013 Copyright (c) 1982, 2013, Oracle. All rights reserved. SQL> connect sys/[email protected] as sysdba Connected. SQL> select instance_name,instance_number from gv$instance; INSTANCE_NAME INSTANCE_NUMBER ------------------------------------------- orcl2 2 orcl1 1 SQL> select instance_name,instance_number from v$instance; INSTANCE_NAME INSTANCE_NUMBER ------------------------------------------- orcl2 2 SQL> connect sys/[email protected] as sysdba Connected. SQL> select instance_name,instance_number from gv$instance; INSTANCE_NAME INSTANCE_NUMBER ------------------------------------------- orcl1 1
15. 從 RAC 資料庫例項 1 (rac1) 連線到 RAC 資料庫例項 2 (rac2) 的 ASM 例項
[[email protected] Desktop]$ . oraenv ORACLE_SID = [orcl1] ? +ASM2 ORACLE_HOME = [/home/oracle] ? /u01/app/12.1.0/grid The Oracle base remains unchanged with value /u01/app/oracle [[email protected] Desktop]$ asmcmd --privilege sysasm --inst +ASM2 ASMCMD> lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 4096 1048576 15342 4782 0 4782 0 Y DATA/ ASMCMD>
總結:資料庫例項使用一個專用 ASM 例項,我們強制該 ASM 例項被停止工作來模擬故障,因此資料庫例項重新連線到另一節點(在本示例中為節點 2 (rac2))上的現有 ASM 例項。
Oracle Database 11.2 或早期版本
如前面針對 Oracle 12c 的介紹所述,ASM 與資料庫例項的關聯本質上是特定的。這意味著,如果 ASM 例項無法啟動,該節點/ASM 中的關聯資料庫例項也無法啟動,從而導致該資料庫無法訪問。
1. 登入 RAC 資料庫例項 1 (rac1)
login as: oracle [email protected]'s password: Last login: Fri Sep 27 06:05:44 2013
2. 檢查 ASM 例項和 RAC 資料庫例項的狀態:
[[email protected] ~]$ ps -ef | grep pmon oracle 3053 1 0 05:56 ? 00:00:00 asm_pmon_+ASM1 oracle 3849 1 0 05:57 ? 00:00:00 ora_pmon_flavia1
3. 在 RAC 資料庫例項 1 (rac1) 中檢查 ASM 例項的狀態
[[email protected] ~]$ srvctl status asm ASM is running on rac2,rac1
4. 在 RAC 資料庫例項 1 (rac1) 中檢查叢集的狀態
[[email protected] ~]$ crsctl check cluster CRS-4537: Cluster Ready Services is online CRS-4529: Cluster Synchronization Services is online CRS-4533: Event Manager is online
5. 在 RAC 資料庫例項 1 (rac1) 中停止 ASM 例項
[[email protected] ~]$ srvctl stop asm -n rac1 -o abort -f
6. 在 RAC 資料庫例項 1 (rac1) 中檢查 ASM 例項的狀態
[[email protected] ~]$ srvctl status asm ASM is running on rac2
7. 檢查 ASM 例項和 RAC 資料庫例項 (rac1) 的狀態
[[email protected] ~]$ ps -ef | grep pmon oracle 7885 5795 0 06:20 pts/0 00:00:00 grep pmon
總結:資料庫例項與 ASM 例項強關聯。如果 ASM 例項發生故障,同一節點上的資料庫例項也會發生故障。
為何使用 Oracle Flex ASM
-
Oracle Flex ASM 支援 Oracle Database 12c 客戶端使用更大的 LUN 大小。
-
支援的最大磁碟組數為 511。
-
可以靈活地重新命名磁碟組中的 ASM 磁碟。
-
ASM 例項的補丁級驗證
-
滾動補丁期間禁用補丁級驗證
-
-
複製物理元資料
Oracle Flex ASM 中的網路增強
-
在早期版本中,叢集要求:
-
一個供客戶端應用訪問的公共網路
-
一個或多個用於叢集內節點間通訊(包括 ASM 通訊)的專用網路
-
-
Flex ASM 增加 ASM 網路,可用於 ASM 與其客戶端之間的通訊,以便隔離和分流 ASM 通訊。
部署 Flex ASM
下面是 Flex ASM 安裝程式的螢幕截圖。
-
選擇選項“Advanced Installation”
有三個儲存選項:
標準 ASM
-
12c 之前的 ASM 配置模式
Oracle Flex ASM
-
推薦
非 ASM 託管的儲存
管理 Flex ASM:
-
無需 Flex ASM 特定的例項引數
-
ASM 伺服器例項使用自動記憶體管理 (AMM)
關於作者
Deiby Gómez 是專家 DBA 和 Oracle Ace,擁有豐富的 Oracle Exadata 資料庫雲伺服器和高可用性解決方案經驗。他經常出席 Oracle 活動,包括 OTN 拉美巡講、Java 日、Oracle First Symposium 和在許多大學舉行的活動。Deiby 是第一個在 Oracle LAD 上發表文章的瓜地馬拉人,他經常在其部落格 www.oraclefromguatemala.com.gt 上發表文章。
Yenugula Venkata RaviKumar 是一個擁有逾 15 年經驗的 DBA,擅長高可用性資料庫環境(RAC、Data Guard 等)、調優和效能、遷移、備份和恢復、Oracle Exadata v1/v2/v3,精通 AIX、HP-UX 和 Linux 等作業系統。他目前居住在印度,曾參加過在印度舉行的多次 Oracle 活動並發表演講。他於 2009 年獲得 Oracle Corporation 的 Oracle 認證大師 (OCM) 稱號。
Nassyam Basha 是一名 DBA。他是 OCP 11g,精通 Data Guard、RMAN、RAC 和效能調優等 Oracle 技術。他已在從 RAC 到非 RAC 的各種平臺上完成了 90 多次 Data Guard 安裝,並使用切換和故障切換成功完成了許多業務關鍵生產資料庫的叢集遷移。他積極參加 Oracle 相關論壇(如 OTN),以 CKPT 身份發表了近 10000 個帖子,他還在 Oracle-Lists 上發表文章。他經常在其部落格 www.oracle-ckpt.com 上發表文章,最近還與人合著了 Oracle Data Guard 11gR2 管理指南。