oracle 11g RAC 的一些基本概念(二)

集羣的相關概念


 

配置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集羣軟件的命名如下:

 

進程結構


 
安裝結束後,會產生一些後臺進程來確保集羣正常工作並能夠與外部通訊。其中的一些有序linux平臺的要求需要以root用戶權限來啓動。比如,網絡配置的改動就需要更高的權限。其他後臺進程將以grid軟件所在系統用戶的權限來運行。下面的表格介紹主要的一些後臺進程
後臺進程 說明
Oracle高可用服務 (OHAS) OHAS是服務器啓動後打開的第一個Grid Infrastructure組件。它被配置爲以init(1)打開,並負責生成agent進程。
Oracle Agent Grid Infrastructure使用兩個oracle代理進程。第一個,概括起來說,負責打開一些需要訪問OCR和VOTING文件的資源。它由OHAS創建。
第二個代理進程由CRSD創建,負責打開所有不需要root權限來訪問的資源。這個進程以Grid Infrastructure所屬用戶的權限運行,並且負責在RAC11.1中racg所做的工作。
Oracle Root Agent 和 Oracle 代理進程類似,有兩個Root 代理進程被創建。 最初的代理進程由OHAS引發,它爲linux系統中需要更高權限的資源提供初始化。創建的主要後臺進程是CSSD和CRSD。反過來,CRSD將觸發另一個root代理。這個代理將打開需要root權限、主要和網絡相關的資源
集羣就緒服務進程
(CRSD)
集羣軟件的後臺主要進程,使用oracle集羣註冊信息來管理集羣中的資源
集羣同步服務進程
(CSSD)
管理集羣的配置和節點成員
Oracle進程監控
(OPROCD)
oprocd在11.1版本中負責 I/O 隔離。它是在10.2.0.4補丁集中爲linux系統引入的。在這個補丁集以前,內核hangcheck-timer 模塊來做類似的任務。有趣的是,oprocd以前常被用在非linux平臺中。Grid Infrastructure用cssdagent進程來替換了oprocd進程。
事件管理器(EVM) EVM負責發佈Grid Infrastructure創建的事件
集羣時間同步服務(CTSS) CTSS服務是一個可選項,通過網絡時間協定服務器爲集羣提供時間同步,這個時間同步對RAC很重要。它可以運行在兩種模式下:觀望或者活動。當NTP被激活的時候,它運行在觀察模式,若沒有啓動NTP,它將根據主節點同步所有節點的時間。
Oracle警告服務(ONS) 負責通過快速應用框架發佈事件的主要後臺進程。

 

 

 
在RAC11.2中,Grid Infrastructure的啓動順序有了明顯變化。代替直接通過inittab(5)打開CRS、CSS、EVM,OHAS進程現在主要負責創建agent進程,監控其他節點的健康狀況,和打開集羣資源。在非Oracle管理進程中,NTP是一個特殊的角色,在每個集羣中,它需要提供時鐘同步,Grid Infrastructure也不例外。
以下是11.2中Grid Infrastructure的一些主要後臺進程:

 

 

 

 

配置網絡組件


 
Grid Infrastructure需要一些IP地址來正常工作:每個主機配備一個公共網絡地址;每個主機有一個私有網絡地址;每個主機一個虛擬IP地址(未被指派);1-3個未指派的IP地址用於Single Client Access Name特性;若使用了Grid即插即用,還需要一個未使用的虛擬IP分配給Grid命名服務。
節點虛擬IP是Oracle集羣的最有用的功能之一。它們需要和公共IP配置在一個網段內,並作爲Grid Infrastructure中的集羣資源來維護。在9i中的時候,當一個節點發生故障,該公共IP無法響應連接請求。當一個客戶端會話嘗試連接到這個故障節點時,它必須等待到連接超時,這可能是一個漫長的過程。有了虛擬IP,那就快多了:當一個節點故障,Grid Infrastructure將該節點的虛擬IP地址failover到集羣中的另一個節點上。當一個客戶端會話連接到故障節點的虛擬IP,Grid Infrastructure知道這個節點不能正常工作,會讓它連接到集羣中的下一個節點。另一個需求是1-3個IP地址,不管集羣有多大,這個要求是Grid Infrastructure中新增的,這種地址類型稱爲SCAN(single client access name)。SCAN在Grid Infrastructure升級或安裝時創建並配置,在執行安裝以前,你需要將這些SCAN IP地址添加到DNS中來循環解析。如果你使用Grid命名服務(GNS),你需要在公共網絡上爲它分配一個虛擬IP地址。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章