天天看點

RAC4——架構和變化

1、RAC的架構

2、由單執行個體變RAC的變化

1、SGA的變化:

      和傳統的單執行個體相比,RAC 執行個體中SGA最顯著的變化時多了一個GRD(Global resource directory)部分。

2、背景程序的變化:

    1) LMSn程序:這個程序是cache fusion 的主要程序,負責資料塊在執行個體間的傳遞,對應的服務叫做GCS(global cache service ),這個程序的名稱來源于Lock Manager Service。從oracle9開始,oracle對這個服務重新命名成global cache service ,但是程序名字卻沒有調整。此程序的數量通過一個參數:GCS_SERVER_PROCESSES來控制,預設值是2,取值範圍是0-9。

    2)LMD程序:這個程序負責的是global enqueue service (GES)具體來說,這個程序負責在多個執行個體之間秀條對資料塊的通路順序,保證資料的一緻性通路。他和前面的LMSn程序的GCS服務還有GRD共同構成了RAC核心功能cache fusion。

3.LMD: Global Enqueue Service Daemon 

oracle官方文檔的描述 

Global Enqueue Service Daemon (LMD) 

The resource agent process that manages requests for resources to control access to blocks. The LMD process also handles deadlock detection and remote resource requests. Remote resource requests are requests originating from another instance. 

LMD程序主要管理對全局隊列和資源的通路,并更新相應隊列的狀态,處理來自于其他執行個體 

的資源請求。每一個全局隊列的目前狀态存儲在相應的執行個體共享記憶體中,該狀态表明該執行個體 

具有相應的權利使用該資源。一個執行個體(master)的共享記憶體中存在一個特殊的隊列,該隊 

列紀錄來自其他遠端執行個體的資源請求,當遠端執行個體的LMD程序發出一個資源請求時,該請求 

指向master執行個體的LMD,當master執行個體的LMD程序受到該請求後,在共享記憶體中的特殊隊列 

中監測該資源是否無效,如果有效則LMD程序更新該資源對列的狀态,并通知請求資源的 

LMD程序該資源隊列可以使用了,如果資源隊列正在被其他執行個體使用或者目前無效,則 

LMD程序通知正在使用中的執行個體的LMD程序應該釋放該資源,等資源釋放變得有效時, 

MASTER執行個體的LMD程序更新該資源隊列的狀态并通知請求資源執行個體的LMD程序該資源 

隊列可以使用了。另外LMD程序也負責隊列的死鎖問題。。。 

   3)LCK程序:這個程序負責non-cache-fusion 資源的同步通路,每個執行個體有一個LCK程序。

   4)LMON程序(lock monitor Prosesses):各個執行個體的LMON程序會進行定期通信,以檢查叢集中各節點的健康狀态,當某個節點出現故障時,負責進群重構、GRD恢複等操作,它提供的服務叫做Cluster Group Services(CGS)。

前面的章節已經介紹了叢集環境中腦裂的危害和解決辦法。但是,在關鍵應用中隻靠叢集軟體的健康監測是不夠的。比如某個節點的Instance異常挂起,導緻其不能對外提供服務,如果單從network、os、clusterware 幾個層面看,可能監測不到這種異常。是以,脫離了應用程式的叢集狀态監測是沒有意義的,資料庫必須有自我監控機制。

oracle RAC的LMON程序,被賦予了自檢功能,這個功能就是LMON提供 的CGS服務,總的來說,這個服務有以下幾個要點。

*** LMON提供了節點監控(node Montior)功能,這個功能是用來記錄應用層各個節點的健康狀态,節點的健康狀态是通過一個儲存在GRD中的位圖(bitmap)來記錄的。每個節點一位,0代表節點關閉,1代表節點正常運作。各個節點間的lmon會互相通信,确認這個位圖的一緻性。

***節點上的LMON程序間會定期進行通信,這個通信可以在CM層完成,也可以不通過CM層,直接通過網絡層完成。

***LMON可以和下層的clusterware合作也可以單獨工作。當LMON檢測到執行個體級别的腦裂時,LMON會先通知下層的clusterware,期待借助于clusterware解決腦裂問題。但是rac并不假設clusterware肯定能解決問題。是以,LMON程序不會無盡等待clusterware層的處理結果,如果發生等待逾時,LMON程序會自動觸發IMR(instance membership recovery) 也叫 instance membership reconfiguration 。 LMON程序提供的IMR功能可以看做是oracle在資料庫層提供的腦裂。io隔離機制。LMON主要也是借助兩種心跳機制來完成健康監測。分别是如下兩種:

節點間的網絡心跳(network heartbeat):可以想象成節點間定時發送ping包監測節點的狀态;如果能夠在規定時間内收到響應。就認為對方狀态正常。

通過控制檔案的磁盤心跳(controlfile heartbeat):每個節點的ckpt程序每隔3秒鐘更新一次控制檔案的一個資料塊,這個資料塊叫做checkpoint progress record;控制檔案是共享的,是以執行個體間可以互相檢查對方是否及時更新以判斷狀态。

   5)DIAG程序:控制執行個體的健康狀态,并在執行個體出現運作錯誤時收集診斷資料記錄到alert.log中。。

   6)GSD程序:這個程序負責從用戶端工具(如,srvctl)接受使用者指令,為使用者提供管理接口。

3、檔案

1)spfile:需要被所有節點通路,需要放在共享存儲上。

2)redo thread:RAC環境下有多個執行個體,每個執行個體都需要自己的一套redo log檔案來記錄日志,這套redo log就叫做redo thread。其實單執行個體下也是redo thread,隻是thread這個詞很少被提及,每個執行個體一套redo thread的設計也是為了避免資源競争造成性能瓶頸。redo thread有兩種,一中是private的,建立文法是“alter database add logfile ... thread n ”另一種是public的,建立文法是“later database add logfile”沒有thread 關鍵字。RAC中每個執行個體要設定thread參數,該參數預設值是0.如果設定了該參數,則執行個體啟動時,會使用該thread的private redo thread;如果沒有設定該參數,則使用預設值0,執行個體啟動後會使用public redo thread,并且該執行個體會用獨占的方式使用 redo thread。

因為RAC中每個執行個體都需要一個redo thread 。是以原來單執行個體中對redo檔案的要求也同樣适用于rac中對每個執行個體的要求。這些要求包括:每個redolog thread至少要有兩個redo log組;每個組成員大象相等,每組至少有兩個以上成員;這些成員應該放在不同的磁盤上,以避免單點失敗。

還需要注意的是,在rac環境下,redo log 組是在整個資料庫級别進行編号的,比如執行個體1有1、2、3、個日志組,那麼執行個體2的日志組就應該從4開始編号,不能在使用1、2、3這三個編号。

在RAC環境下,所有執行個體的聯機日志必須放在共享存儲上,這是因為,如果某個節點異常關閉,剩下的節點就要進行crash recovery,執行crash recovery的這個節點必須能夠通路到故障節點的聯機日志,隻有吧聯機日志放到共享存儲上才能滿足這個要求。

3)undo  tablespace

和redo log 一樣,在rac環境下,每個執行個體都需要有一個單獨的復原表空間。這一點是通過參數sid.undo_tablespace來配置的。

4)SCN

在RAC環境下,每個節點都有自己的scn發生器,每個節點都會修改資料庫。必須有某種機制保證這些scn在時間排序上的精确。如果僅靠計算機的系統時鐘肯定不夠的,必須引入額外的算法。

在rac中,由GCS負責全局維護scn的産生,預設用的是lamport SCN生成算法,該算法的大緻原理就是,在所有節點間通信内容中都攜帶SCN,每個節點把接收到的scn和本機scn對比,如果本機的scn小,則調整本機的scn和接收到的一緻。如果節點間通信不多,還會主動定期互相通報。是以即使節點處于IDLE狀态,還是會有一些redo log産生。還有一種廣播算法,這個方法是在每個commit操作之後,節點要向其他節點廣播scn。雖然這種方式會對系統造成一定的負載,但是確定每個節點在commit之後,都能立即看到scn号。

這兩種算法各有優缺點,lamport雖然負載小,但是節點間會有延遲。廣播雖然有負載,但是沒有延遲。

4、cache fusion,GCS,GES關系

Cache Fusion(記憶體融合)是通過高速的 Private Interconnect t,在執行個體間進行資料塊傳遞,它是 RAC 最核心的 工作機制,它把所有執行個體SGA 虛拟成一個 大的 SGA。每當不同的執行個體請求相資料塊時,這個資料塊就通過 Private  Interconnect 在執行個體間進行傳遞。

整個 Cache Fusion 有兩個服務組成: GCS  和 GES 。 GCS負責資料庫在執行個體間的傳遞, GES 負責鎖管理。

5、Clusterware

在單機環境下,Oracle 是運作在 OS Kernel 之上的。 OS Kernel 負責管理硬體裝置,并提供硬通路接口。 Oracle不會直接操作硬體,而是有 OS Kernel 代替它來完成對硬體的調用請求。

在叢集環境下, 儲存設備是共享的。 OS Kernel 的設計都是針對單機, 隻能控制單機上多個程序間的通路。 如果還依賴 OS Kernel 的服務,就無法保證多個主機間的協調工作。 這時就需要引入額外的控制機,在 RAC中,這個機制就是位于 Oracle和 OS Kernel 之間的 Clusterware,它會在 OS Kernel 之前截獲請求,然後和其他結點上的 Clusterware 協商,最終完成上層的請求。 

在 Oracle 10G 之前, RAC 所需要的叢集件依賴與硬廠商,比如 SUN,HP,Veritas. 從 Oracle 10.1  版本中, Oracle 推出了自己的叢集産品 . Cluster Ready Service(CRS), 從此 RAC 不在依賴與任何廠商的叢集軟體。 在 Oracle 10.2版本中,這個産品改名為: Oracle Clusterware 

是以我們可看出, 在整個 RAC 叢集中,實際上有 2個叢集環境的存在, 一個是由 Clusterware  軟體組成的叢集,另一個是由 Database 組成的叢集。 

 轉:http://blog.csdn.net/cymm_liu/article/details/7905398

文章可以轉載,必須以連結形式标明出處。

本文轉自 張沖andy 部落格園部落格,原文連結:http://www.cnblogs.com/andy6/p/5759303.html   ,如需轉載請自行聯系原作者