2009年6月14日 星期日

淺談 Grid Computing & Oracle RAC - 2

Oracle RAC(Real Application Clusters)允許應用程式在不做改變的情況下來進行 clustered servers 上 Database 的存取。這樣的架構提供了高度的可用性(Highest Availability)及最大的擴充彈性(flexible scalability)。倘若有任何的一台 clustered server 故障,Database 仍可在剩餘的 clustered server上運作。當使用者需要更多運算能力,亦可在不要求使用者離線的情況下增加另一台 server 來滿足需求。

RAC 為企業網格運算架構(Enterprise Grid Computing Architecture)提供了一個基礎。在這個基礎上,RAC 使用低成本的硬體規格來提供優質的服務品質以及高度的可用性與擴充性。在以往,同樣的服務等級得由搭載多顆處理器(SMP)的昂貴大型主機才能夠達成。

RAC 架構
RAC 資料庫其實就是一種叢集資料庫(clustered database)。而所謂的叢集就是讓一群獨立的主機互相合作,如同單一系統般的運作。叢集除了能提升容錯性外,也比 SMP 架構更有效率的因應漸進式的系統成長需求。當系統錯誤發生時,叢集能夠維持系統的可用性,確保關鍵資料不會因此流失。下圖為 RAC 的架構:

透過 RAC,我們可以分離(de-couple) Oracle Instance(泛指 Server 上執行的 process 與 memory 結構)與 Oracle Database(真正儲存資料的部份,一般是指 datafile)一對一的關連性。叢集資料庫允許多個 instance 去存取單一的 database。每一個 instance 是在叢集內的獨立 server 上執行。當系統需要額外的資源時,便可在不用中斷系統的情況下,輕易將 instance 加入叢集。一但新的 instance 加入並啟動後,應用程式不需要做任何的變動或設定,就可使用其帶來的效益。

Oralce Clusterware
Clusterware(叢集軟體)是負責監控與管理 RAC 資料庫。當叢集內有任何一台主機啟動,所有其它的 instances、listeners 與相關 services 也會被一併自動啟動。當任何一個 instance 發生錯誤時,clusterware 會自主性的去重新啟動該 instance。因此往往能在管理者發現錯誤前就修復。另外在 10gR2 版本,Oracle 也提供一個非 Oacle processes 也能使用的 HA(High availability)API。當該 process 向 clusterware 完成註冊程序,並且提供如何去啟動、停止與監控的資訊後,就能夠使用 HA 架構所帶來的優勢。

Hardware Architecture
RAC 是建立在共享的架構上。叢集內所有的 servers 必須共享儲存媒體上的 RAC database。這些共享的儲存空間通常是採用 NAS、SAN 或 SCSI 來建置。選擇儲存媒體的重點在於,是否能如同將 server 加入叢集般,隨著應用程式 I/O 需求來擴充儲存媒體。
叢集使用 LAN 來提供應用程式與 database server 間的連線,也需要使用私有網路(private network)來進行各個節點(node)間的互連(interconnect)。Oracle 官方建議使用兩組網路卡來建置,以達到 HA 的效果。對外提供與 AP 連線的網路,同時具備 failover(錯誤後轉移)與 load balancing(負載平衡)的功能。而對內互連的網路,除用於內部各節點間訊息的傳遞外,並被 RAC 使用作為 cache fusion(快取融合)的傳輸媒介。Oracle 建議在 Gigabit Ethernet 上使用 UDP 的方式建立 interconnect,另外,RAC 不支援使用 crossover cable 來作為 interconnect。
Oracle 10gR2 RAC 叢集最多可支援到 100 節點,叢集內 server 的規格並不需要完全一致,但必須使用相同的作業系統以及相同版本的 Oracle。

File Systems 與 Volume Management
由於 RAC 是建立在一種分享的架構下,因此 volume management 與 file system 也必須是 cluster-aware(支援叢集)。Oracle 建議在 10g 的版本下使用 ASM(Automatic Storage Management)自動儲存管理。ASM 除了能在 file system 上管理非同步 I/O 外,更重要的是,它能分散 I/O 負載至所有可用的硬體資源上來達到最佳化的效能並減少人為的 I/O 調教。
另一個替代方式是採用 raw device 與叢集檔案系統(cluster file systems),例如:Oracle Cluster File System(OCFS),目前此檔案系統支援 Windows 與 Linux 作業平台。

Virtual Internet Protocol Address(VIP)
為叢集內的每一台 server 綁定 Virtual IP(虛擬 IP)是建置 10g RAC 的另一項必要條件。Virtual IP 是指在同一個 LAN 上沒有被使用的 IP,僅被 AP 使用來連線至 RAC database。當任何一個節點發生錯誤時,該點的 Virtual IP 會自動被移轉到叢集的另一個節點上,並繼續提供 AP 服務。這機制大幅的提升 AP 的可用性,不必再等待到錯誤發生並網路中斷,就可以在第一時間直接連線到其他節點。


Oracle RAC 的效益:
RAC 帶來的效益可分為以下兩個層面:High Availability(高度可用性)與 Scalability(擴充性)。

High Availability 主要是透過以下特性來提供:
# Reliability(可靠性)- Oracle database 原本就是以可靠而聞名;透過 RAC 機制來避免 single point of failuer(單點故障)更使其可靠性往前跨出一大步。舉例來說,當其中一個 instance 發生錯誤時,叢集內其它的 instance 仍可維持正常的運作狀況並提供服務。

# Recoverability(可回復性)- 當 RAC database 中有任何一個 instance 發生故障時,叢集中的其它 instance 會將其指認出,並開始自動回復。

# Error Detection(錯誤偵測)- Oracle 叢集軟體自動監看環境中的 RAC database 並提供快速問題偵測。另外,它更能在問題被通知至管理者之前就將其回復。

# Continuous Operations(持續運行)- RAC 架構能提供持續系統運作來面對計畫性與突發性的中斷。當任何一個節點故障時,database 仍然維持正常運作來服務 AP 的資料存取。大部分的資料庫維護作業能循序的進行(rolling fashion),並在不影響使用者的情況下完成。


Scalability
Oracle RAC 提供了一種相當獨特的系統擴充性。傳統上,當 database server 負載能力不足時,往往是採購更高規的 server 來取代。而更高規的 server 也代表著更昂貴的價格。RAC 則是採用另一種替代方式增加負載能力。與其把系統建置在一台高規格的 SMP server 上,不如將其移轉到由中低階 servers 組成的叢集上。這樣的好處在於既有的硬體投資不會被浪費掉,又可透過增加新的 server 至叢集內來增加負載能力。叢集內所的有 server 必須是相同的 OS(Operation System)與相同版本的 Oracle,但負載能力/硬體規格則不需要相同。

Oracle RAC 架構能夠快速改變系統 workload(工作負荷)來因應市場上的瞬息萬變。例如透過指定 service name 的方法來讓 AP 與 database 連線,RAC 便能平衡叢集內的各節點系統負載。RAC 也允許透過指定的方法,來分配特定 AP 連線至特定 database 節點的方法。這些機制讓管理者能夠無痛處理 AP 需求增加帶來的額外負載。

Parallel Execution(平行處理)是 RAC 提供的另一種分散負載的方法。Parallel execution 是將 sql statement 的處理切割成多個程序(process)。在 RAC 的環境下,這些程序可以被分散到多個 instnace 上來進行處理,並且可依據各節點上運算資源的忙碌/閒置狀況來決定程序的分配。例如說,一個需要 6 個 processes 才能夠處理的 transaction 產生時,RAC 會先查看本機節點(local node)是否有 6 個閒置的 CPUs,若有的話,則只會使用本機資源(local resources),來避免跨節點運算帶來的額外負擔;這種動作通常被稱為 intra-node parallelism。倘若本機節點只有 2 個 CPUs 閑置的話,則這 2 個 CPUs 與另一個節點上閒置的 4 個 CPUs 會被使用來作為運算資源;這種分散運算到不同 nodes 的作法就是所謂的 inter-node parallelism。但不管是 intra-node 還是 inter-node parallelism,主要都是著眼在提升系統效能。

1 則留言:

  1. 請教一下
    私有網路(private network)來進行各個節點(node)間的互連(interconnect)
    私有網路節點異常會何影响?

    回覆刪除