1. 程式人生 > >深入瞭解 Oracle Flex ASM 及其優點

深入瞭解 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。

m3445eb3a-gif

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 配置:

m6b7c30d2-2-png
 

Oracle Flex ASM 配置上的 ASM 例項故障:

m15325c3-3-png
 

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 中的關聯資料庫例項也無法啟動,從而導致該資料庫無法訪問。


m4ef5cae8-2

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”

m787cf7b5-2-jpeg



有三個儲存選項:

標準 ASM
  • 12c 之前的 ASM 配置模式
Oracle Flex ASM
  • 推薦
非 ASM 託管的儲存


2c8e17ec-2-png

管理 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 管理指南。