2021年11月4日 星期四

3. Grid Infrastructure

Oracle RAC Cluster Ware 自從 11g 開始改稱為 Grid Infrastructure ,以原本 RAC Cluster Ware 的架構為基礎做了一些改變,首先是軟體結構的部分,在 Oracle 10g 的時候, Cluster 軟體的安裝位置以環境變數 ORA_CRS_HOME 來表示,而在 11g 的 Grid Infrastructure 當中, Cluster 軟體的安裝位置仍然是以環境變數 ORACLE_HOME 來表示,這個改變讓一開始接觸的使用者來說很容易混淆,因為以往 ORACLE_HOME 都代表著資料庫軟體的位置,現在卻要代表兩種路徑, Database Home 與 Grid Infrastructure Home ,因此官方建議將安裝資料庫軟體與安裝 Cluster 軟體的使用者分開來,建立一個新的使用者 "grid" 來安裝及管理 Grid Infrastructure ,這樣就不會把 ORACLE_HOME 的路徑搞混,當然對於熟悉的 DBA 來說,使用同一個使用者藉由環境變數的切換來管理兩個 Home 路徑也是可以的。


在 Services Daemon 的部分,原本代表 RAC 所啟動的 CSSD 、 CRSD 統一由一個 Oracle High Availability Service Daemon (OHASD) 來管理,原本 /etc/init.d 底下的 init.cssd 、 init.crsd 、 init.evmd 改為只有 init.ohasd ,整個 Cluster 啟動的方式與原本大不同:

整個 RAC 的啟動過程改由 OHASD 所發起, OHASD 會發起四個 agent process , oraagent 、 orarootagent 、 cssdagent 與 cssdmonitor :


  • oraagent : 在 Cluster 啟動的初始階段,不需要 root 權限就可以啟動的 process 由 oraagent 來發起,例如 evmd 、 ASM …等。

  • orarootagnet : 在 Cluster 啟動的初始階段,需要 root 權限來啟動的 process 由 orarootagent 來發起,這邊有 ctssd (Cluster Time Synchronization Service ,節點之間用來校時的 process ,避免節點之間的時間差過大導致 Cluster 出現問題,如果有設定 NTP 來校時的話, ctssd 會進入 Observer Mode 不會產生作用) 、 gnsd (Grid Naming Service Daemon ,為 Grid Plug and Play 的功能所用) ,以及 crsd ,這邊比較特別的是, 透過 crsd 還會再產生出一組 oraagent 與 orarootagent ,原因就是有些 process 必須要在 crsd 啟動之後才能夠產生出來,因此在初始化階段產生完 crsd 之後,再由 crsd 啟用一組 oraagent 與 orarootagent , crsd 底下的 oraagent 主要是用來啟動在 crsd 之後,不需要 root 權限的 process ,例如 Listener 、 Database Instance …等;而 crsd 底下的 orarootagent 則是用來產生在 crsd 之後,需要 root 權限的 process ,例如 vip 與 scan ip 。

  • cssdagent : 用來啟動 cssd daemon 。

  • cssdmonitor : 用來監控 cssd 狀態的 process 。


大體上整個 Grid Infrastructure 的架構可以歸納出,由 OHASD 作為代表來開頭,底下的 process 可以分為需要 root 權限以及不需要 root 權限,需要 root 權限的由 orarootagent 來發起;不需要 root 的則由 oraagent 來發起, cssdagent 與 cssdmonitor 則獨立由 root 發起,透過 log 也可以明顯的觀察到整個啟動的流程:


由 log 當中的 agent 目錄底下,可以看到有 ohasd 與 crsd 兩個目錄; ohasd 目錄底下,可以看到四個目錄,這四個目錄也就分別代表 ohasd 所發起的四個 agent process ;另外在 crsd 目錄底下,也可以看到 oraagent 與 orarootagent 兩個目錄,這也表示由 crsd 所發起的兩個 agent process 。不過 Grid Infrastructure 的 log 到了 Oracle 12c 之後,統一由 $ORACLE_HOME/log (這裡的 ORACLE_HOME 代表 Grid Infrastructure 軟體的 Home 位置) 這個目錄轉移到 ADR 目錄 ($ORACLE_BASE/diag) 底下, Oracle 12c 之後就沒有對這些 log 做這麼詳細的分類了。


在網路結構部分, Grid Infrastructure 增加了一組 SCAN (Single Client Access Name) 的概念,建議將 SCAN 註冊到 DNS 上並且對應 1 ~ 3 組的 IP Address , SCAN 的用意在於,以往每台 RAC 節點都有屬於自己的 VIP , Client 連線必須設定這些節點的 VIP ,如果 Cluster 有新增或是刪除節點,那麼 Client 就要再添加或刪除這些節點的 VIP 設定,而 SCAN 這個概念就是為了減少 Client 端設定的負擔,不論 Cluster 節點怎麼增減, Client 端只要統一使用 SCAN 這個名稱來連線就好,不用隨著節點的 VIP 增減來修改, tnsnames.ora 的設定由以往需要寫入所有的 VIP 改成只要使用一個 SCAN 就好:


對於 Private IP 的設定,在 11.2.0.2 的版本之後多了一組 HAIP (High Available IP) 的概念,以往對於 Internal Connect 要做 Redundancy 都是把兩張網卡 Binding 起來,而 HAIP 的概念就是允許 Internal Connect 可以有兩張或以上的網卡,不需要 Binging 就可以達到 Redundancy 與 Load Balance 的功能,預設 HAIP 這個功能是啟用的,對於 Private IP 來說,會在 Private 網卡上再自行綁定一組 169.254.*.* 網段作為 HAIP 所用,之後節點之間的傳輸就會都透過這組 169.254.*.* 的網段來溝通。如果只有單網卡或者是已經綁定的單一網卡,可以用 root 的身分執行 crsctl stop res ora.cluster_interconnect.haip –init 來停止 HAIP 這個功能,或者是執行 crsctl modify res ora.cluster_interconnect.haip -attr "ENABLED=0" –init 完整關閉 HAIP ,這邊要注意的是,停用或啟用 HAIP 必須所有節點的設定一致,否則有可能造成 RAC Database 無法啟動等問題。


另外的改變就在於 Listener ,在 Oracle 10g 的 RAC 當中, Listener 是由 ORACLE_HOME (Database Home) 所發起的;而在 11g 的 Grid Infrastructure 當中, Listener 是改由 Grid Infrastructure Home 所發起的,如果有建立 grid 這個使用者,那麼 Listener 這個 process 的擁有權將會是 grid 所屬。


Grid Plug and Play 是 11g Grid Infrastructure 的新功能,用意在於能夠讓整個 Cluster 架構快速增加節點,在增加節點之前不需要規劃新節點所要使用的 Hostname 與 VIP ,由系統自行決定新節點的名稱與 VIP ,整個結構是透過 GNS (Grid Name Service) 來達成:


如果要使用 Grid Plug and Play 這個功能的話,首先必須要設定 GNS 服務,需要設定一組 GNS 所使用的 IP 並註冊到 DNS 上,在 GNS 服務啟用之後,新節點的 VIP 與 SCAN IP 會經由 DHCP 來自動分配,同時在 Cluster 架構之內啟用 mDNS (multicast DNS) ,這個可以視為是 Cluster 內部自己使用的 DNS ,用來解析 GNS 架構下的節點名稱。對於 Client 的連線來說, Client 端還是透過 SCAN 來連線,而這個連線首先會導到 GNS , GNS 在接收到連線的請求之後,會把它底下所擁有的節點名稱反饋回 DNS , DNS 在清楚了這些節點之後,再把連線送達到最終的 Server 。


Grid Plug and Play 在理念上是一個很好的設計,然而在實務上使用並不多見,其一是節點名稱與 VIP 由管理者自行規劃顯然是比較好管理的;其二是連線必須多增加一層 GNS 解析,對於整個連線的時間來說還是會有些效能上的影響。


最後在 Storage 結構的部分,最大的改變就是 OCR 與 Voting 可以放置在 ASM 裡面,而 ASM 啟用的方式也由 10g 時候的 ORACLE_HOME (Database Home) 改由 Grid Infrastructure Home 來啟動。


由於 ASM 改由 Grid Infrastructure Home 來啟動,因此在 Oracle 11g 之後如果想使用 ASM 則必須安裝 Grid Infrastructure ,而這邊有個選項,使用 ASM 不一定是要 RAC 架構, Single Instance 的架構下也可以使用 ASM ,只要在單台 Server 上安裝 Grid Infrastructure 就可以,而這個在單台架構下所安裝的 Grid Infrastructure 就稱作 Oracle Restart 。 Oracle Restart 的架構下,也是經由 OHASD 來發起服務,差別只在於 Oracle Restart 只會有 cssd 不會有 crsd daemon ,透過 crsctl stat res –t –init 可以觀察到 Oracle Restart 不會有 crsd :


Oracle RAC 這項技術在 11g 推出了 Grid Infrastructure 之後可以說已經達到了成熟,直到目前 Grid Infrastructure 已經是 Oracle RAC 的代名詞了。

沒有留言:

張貼留言