程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> oracle 11g RAC 的一些基本概念

oracle 11g RAC 的一些基本概念

編輯:Oracle數據庫基礎
 

配置Active/active集群

    在這種模式下,所有的節點都能提供服務(不會有用戶請求在standby上被閒置的情況)。大部分案例中,集群成員的硬件配置都是相同的,避免可能的性能問題,也更容易實現負載均衡。Active/active集群需要更復雜的管理軟件來管理所有資源,比如磁盤和內存需要在所有節點間進行同步。更常見的,一個私有網絡被用做心跳連接。集群管理軟件必須能夠檢測到節點問題,比如節點故障或者集群通訊問題
    腦裂(split-brain)是集群中的一個糟糕的情況:集群中的所有集群正在工作的時候,內部通訊被斷開。這種情況下,集群被分成了幾個部分,每個部分的集群軟件都會嘗試去接管其他節點的資源,因為在它看來,別的節點發生了故障。可能會出現以下問題:如果應用能夠正常連接集群的這些部分,因為此時這些集群部分不同步,可能會有不同的數據會被寫入到磁盤中。腦裂對集群的危害顯而易見,集群軟件的供應商必須提供方案來解決這個問題
    oracle的集群軟件(11g中的Grid Infrastructure),使用一個仲裁設備(quorum device),稱作voting disk,來決定集群中的成員。集群中的所有節點共享一個voting disk,當一個節點不能向內部網絡和voting disk發送心跳時,它就會被逐出集群。若一個節點不能和其他節點通訊,但依然能連接到voting disk,集群在這種情況下將進行投票,並發出指令將該節點剔除。這個投票使用的是STONITH方式,軟件將發出一個請求,使被踢出的節點自動重啟。當需要重啟的節點hung住的時候,重啟指令變得不可用,這種情況比較棘手。幸運的是,若硬件允許,Grid Infrastructure可以支持IPMI(智能平台管理接口),可以向一個節點發出結束指令。當一個節點故障或被踢出集群,剩余的節點能夠接管用戶服務請求。

配置Active/passive集群

    一個active/passive集群工作方式與active/active不同。一個active/passive集群中的成員硬件配置依然應該一致或基本一致,但同一時間兩個節點中只有一個節點能處理用戶請求。集群管理軟件會不斷地監控集群中資源的健康狀況,當一個資源失敗,集群管理軟件會嘗試將該資源重啟數次,若還是無效,備用節點將進行接管。
    根據安裝時的選項,集群的資源可以分配在共享存儲或文件系統上,後者在資源failover的時候也會進行一次failover。使用共享文件系統比使用非共享的文件系統更有優勢,後者在重新掛載到standby節點上以前可能需要進行fsck(8)檢測。Veritas集群套件、Sun(Oracle)集群和IBM的HACMP就可用作安裝active/passive集群的集群管理工具。
    鮮為人知的是,使用Oracle Grid Infrastructure來安裝一個active/passive集群非常簡單,利用Grid Infrastructure的應用程序接口和作為集群邏輯卷管理器的Oracle ASM,可以輕松地不間斷監控一個單實例oracle數據庫。當一個節點發生故障,數據庫會自動遷移到備用節點。根據初始化參數fast_start_mttr_target和恢復集的大小,這個故障切換可能非常迅速。不過,作為failover過程的一部分,用戶的數據庫連接將被斷開。
    Active/passive模式可以通過將active_instance_count參數設置為1來打開,但僅當節點數為2時才有效。

配置Shared-All架構

    一個所有節點同時訪問共享存儲和數據的集群被稱為shared-all或者shared-everything結構。Oracle RAC就是基於shared-everything架構:一個數據庫位於共享存儲中,通過集群各個節點上運行的實例來訪問。在Oracle術語中,一個實例由內存結構和一些進程組成。對應的,數據庫存儲在磁盤中的數據文件裡。在RAC中,實例的故障並不意味著該實例管理的數據的丟失。在一個節點發生故障後,集群中的另一個實例將會進行實例恢復,所有剩余節點都將繼續服務。使用高可用技術,例如FCF或TAF,可以將實例失效對用戶造成的影響降到最低。故障節點最後將重新加入集群並分擔工作量。

配置Shared-Nothing架構

  在一個shared-nothing數據庫集群中,每個節點有它私有的獨立存儲,其他節點不能訪問。數據庫被集群中的節點分割成幾個部分,返回的查詢結構集是各個節點結果集的結合。丟失一個節點會導致對應的數據無法訪問。因此,一個shared-noting集群經常被實施成一些單獨的active/passive或者active/active集群來增強可用性。MySQL的集群就是基於shared-nothing架構。

RAC的主要概念

集群節點

    集群由單獨的節點組成,在Oracle RAC中,允許的節點數和集群版本有關,公開文檔中說明Oracle 10.2集群軟件支持100個節點,而10.1支持63個實例。即使當個節點發生故障後,基於RAC上的應用能繼續運行,還是應該花點精力來確認數據庫服務器中的單個組件不會出現單點故障(SPOF)。
    采購新的硬件時應該采用可熱插拔的組件,比如內置磁盤和風扇,另外,服務器的電力供給、主機總線適配器、網卡和硬盤都應該做了冗余。可能的話,最好做一個邏輯綁定,比如硬盤硬件RAID或軟件RAID、網卡綁定、存儲網絡的多路徑。在數據中心也應該注意:要使用不間斷的電源供應、足夠的散熱措施、服務器的專業上架。最好還能有個遠程的lights-out管理控制台,當一個節點不知道由什麼原因掛起,可能迫切需要進行故障排除或者重啟。

內部互聯

    集群內部互聯是Oracle RAC的特征之一。它不僅使得集群在不同實例間傳遞數據塊時突破block pinging算法的限制,它還可用作心跳和常規通訊。連接失敗將導致集群的重組來避免腦裂發生,Grid Infrastructure將使一個或多個節點重啟。可以為RAC和Grid Infrastructure配置一個單獨的連接,這種情況下你需要配置RAC來使用正確的連接。這個連接始終應該是私有的,不應該受到其他網絡的干擾。RAC用戶可以使用兩種技術來實現內部互聯:以太網和Infiniband。

使用基於以太網的內部互聯

    使用10G以太網作為集群內部互聯可能是目前使用最多的,集群的後台進程使用TCP/IP進行通信。Cache Fusion(用來保持緩存的一致性)使用另一種通信方式:UDP(UserData該ramProtocol)。UPD和TCP同屬於傳輸層,後者面向連接,使用顯式的通訊握手來保證網絡數據包按順序到達,並轉發失敗的數據包。UDP則不包含狀態,它是一個發完就忘(fire-and-forget)協議。UDP只是簡單發送一個數據包到目的地。UDP比起TCP而言主要的好處是它比較輕便。
    注意:兩節點集群間應該避免使用交叉線來直連,集群的內部通訊必須經過交換,交叉電纜的使用應該被明確禁止!
    使用jumbo frames可以使集群內部通信的效率和性能得到提升。Ethernet Frames可以使用不同的大小,一般被限制在1500byte字節(MTU值)。框架大小決定了單個以太網框架能夠傳送多少數據,一個框架承受越大的數據負荷,服務器和交換機需要做的工作就越少,提供了更高的通訊效率。許多交換機允許在一個框架中容納比標准MTU值更大的字節數(1500-9000),也叫jumbo frame。注意jumbo frames是不能路由的,因此它不能被使用在公共網絡上。當決定使用jumbo frames時,一定要確定集群中的所有節點使用同樣的MTU。
    剛才說過數據庫服務器的相關組件應該有一個容易,網卡也是其中之一。多個網絡端口可以在linux中使用bonding技術綁成一個邏輯單位,和很多其他操作系統不同,linux中網卡的綁定不需要購買其他軟件就能實現。

使用基於Infiniband的內部互聯

    Infiniband常被用來實現遠程內存直接訪問(RDMA remote direct memory access architecture)。這是一個高速互聯,常與高性能計算(HPC)環境聯系在一起。RDMA可以在集群的節點間使用並行、直接、內存到內存的傳輸,它需要專門的RDMA適配器、交換機和軟件。它還能避免基於以太網的實現中的CPU處理和環境轉換的開支。在linux中有兩種途徑來實現Infiniband互聯。第一種叫做IP over Infiniband(IPoIB),它采用IB架構作為鏈路控制層,使用封裝的方法實現IP和IB報文的轉換,從而使在以太網運行的程序可以直接運行在Infiniband上。另一個方法就是使用基於Infiniband的 Reliable Datagram Sockets,oracle 1.2.0.3開始支持這個方法。RDS可以通過Open Fabric Enterprise Distribution(OFED)在linux和windows上實現。RDS的重要特征是低延遲、低開銷和高帶寬。Oracle數據庫服務器和Exadata存儲服務器使用了Infiniband,為集群內的通訊提供高達40Gb/s的帶寬,這是以太網所不可能做到的。Infiniband為高性能展現了巨大的優勢,但它的成本同樣非常高昂。

Clusterware/Grid Infrastructure

    Grid Infrastructure與操作系統緊密結合,並提供以下服務:節點間連接;維護集群成員;消息傳送;集群邏輯卷管理;隔離(fencing)

I/O隔離:
當集群系統出現"腦裂"問題的時候,我們可以通過"投票算法"來解決誰獲得集群控制權的問題。 但是這樣是不夠的,我們還必須保證被趕出去的結點不能操作共享數據。  這就是IO Fencing 要解決的問題。


IO Fencing實現有硬件和軟件2種方式:
軟件方式:對於支持SCSI Reserve/Release 命令的存儲設備, 可以用SG命令來實現。 正常的節點使用SCSI Reserve命令"鎖住"存儲設備, 故障節點發現存儲設備被鎖住後,就知道自己被趕出了集群,也就是說自己出現了異常情況, 就要自己進行重啟,以恢復到正常狀態。 這個機制也叫作 Sicide(自殺). Sun 和Veritas 使用的就是這種機制。
硬件方式:STONITH(Shoot The Other Node in the Head), 這種方式直接操作電源開關,當一個節點發生故障時,另一個節點如果能偵測到,就會通過串口發出命令,控制故障節點的電源開關,通過暫時斷電,而又上電的方式使故障節點被重啟動, 這種方式需要硬件支持。

    各個版本的Oracle集群軟件的命名如下:
圖片  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved