RAC的一些概念和原理性知識多方總結【1】

spectre2發表於2011-04-18

對於RAC來說,最重要的還是要理解內部原理和體系結構。安裝不是非常難的事情。重要的還是體系結構以及內部原理,排錯和維護都離不開它們。

例項概念:一組程式和對應的資料結構

資料庫是一個容器,例項相當於從容器裡提取資料的手

單例項:一臺機器上一個庫只能對應一個例項

Rac:一個庫可以對應多個例項,並行。

每個例項執行在一個物理機器上,可以負載均衡,發生故障可以有狀態切換。

需要能讓多個機器同時讀寫的共享磁碟,可以由作業系統提供(AIX concurrent vg,Linux GPFS,)但concurrent vg是作業系統的雙機軟體中的元件所以必須安裝ha軟體。可以用oracleASMcrsoracle的叢集軟體,提供ip切換等叢集功能。

ASM功能類似LVMos提供儲存管理功能,但是是不可管理,把lun劃給即可。

叢集分類

1、高效能運算

計算任務分配到不同計算機節點來提高整體計算能力,主要應用在科學計算領域。主要利用的是平行計算。

2、負載均衡叢集(LB

  把業務的負載流量儘可能的平均合理的分配到叢集的各個節點上,每個節點都可以處理一部分負載,並且可以根據負載情況進行動態的平衡。負載均衡演算法不是簡單的平均,而是根據每個節點的可用資源或網路的特殊情況來進行優化分配。因此分配+合理才是負載均衡的核心。

3、高可用性(HA

  側重於提高系統的可用性,整合硬體和軟體的容錯性來實現整體服務的高可用性。如果某個節點發生故障,另外的節點代替他。

RAC是真正的LBHA的複合體。從某種意義上說,只有最終應用(資料庫)才能實現真正意義上的LB,而絕大多數的叢集都是HA

一、叢集環境的特殊問題

1.1、併發控制

叢集環境中,存在共享儲存的問題。叢集中各個節點對共享儲存是對等的,所有節點對資料有相同的訪問許可權,因此需要某種機制來控制節點對資料的訪問。

RAC中,採用的是DLMDistribute Lock Management)機制來進行例項間的併發控制。

1.2、健忘症(Amnesia

如果叢集環境的配置檔案不是集中存放,每個節點都有一個本地副本,叢集正常執行的時候,使用者可以在任何節點修改叢集的配置,並且這些更改都會自動同步到其他節點。

如果節點1因為正常的維護需要關機,節點2修改了配置,然後關閉節點2.啟動節點1,因為之前節點2做的配置修改沒有同步到節點1,所以將節點1啟動以後,他仍然使用舊的配置檔案,造成配置丟失。

1.3、腦裂(split brain

叢集中,節點之間需要通過某種機制(心跳)瞭解彼此的健康情況,以確保各個節點協調工作。假設只是心跳出現故障,各個節點還在正常的工作,每個節點都認為其他節點當機,自己是整個叢集的唯一健在者,因此需要獲得整個叢集的“控制權”。儲存是共享的,這就意味著災難,這種情況就是“腦裂”。

解決這個問題的通常辦法是使用投票演算法(Quorum Algorithm),它的演算法機理如下:

叢集中各個節點需要心跳機制來通報彼此的"健康狀態",假設每收到一個節點的"通報"代表一票。對於三個節點的叢集,正常執行時,每個節點都會有3票。當結點A心跳出現故障但節點A還在執行,這時整個叢集就會分裂成2個小的partition。節點A是一個,剩下的2個是一個。這是必須剔除一個partition才能保障叢集的健康執行。

對於有3個節點的叢集,A心跳出現問題後,BC是一個partion,有2票,A只有1票。按照投票演算法,BC組成的叢集獲得控制權,A 被剔除。

如果只有2個節點,投票演算法就失效了。因為每個節點上都只有1票。 這時就需要引入第三個裝置:Quorum Device. Quorum Device通常採用的是共享磁碟,這個磁碟也叫作Quorum disk。這個Quorum Disk 也代表一票。當2個結點的心跳出現問題時,2個節點同時去爭取Quorum Disk 這一票, 最早到達的請求被最先滿足。故最先獲得Quorum Disk的節點就獲得2票。另一個節點就會被剔除。

1.4IO隔離(IO Fencing)、

叢集出現故障,必須判斷哪個節點應該獲得叢集的控制權,哪個節點需要被踢出。這是投票需要解決的問題。

僅僅將他們踢出還不足夠,因為他們可能還在繼續執行(只是離開了這個叢集),需要保證他們不再訪問共享資料。這就是IO隔離要解決的問題。

IO Fencing實現有硬體和軟體方式。各個叢集廠商使用的方式不同,有些需要硬體的支援(主要是儲存裝置是否支援某些協議)。Oracle RAC使用的是軟體的方式,直接重啟故障節點。

無論採用哪種方式,IO Fencing的目的就是保證故障節點不能繼續訪問共享資料。

有一些儲存裝置支援SCSI Reserve/Release命令,正常節點使用SCSI Reserve命令鎖住儲存裝置,故障節點發現儲存被鎖定,就知道自己已經被踢出了cluster,自行重啟,這種機制叫做自殺機制(suicide)。例如SunVeritas的叢集使用的就是這種機制。

無論軟體還是硬體,大致原理就是:正常節點通過某種方式告知故障節點,故障節點會進行重啟。告知的方式有硬體和軟體之分,硬體更加安全一些。

二、RAC 叢集

2.1Clusterware

在單機環境下,Oracle是執行在OS Kernel之上的。OS Kernel負責管理硬體裝置,並提供硬體訪問介面。Oracle 不會直接操作硬體,而是由OS Kernel代替它來完成對硬體的呼叫請求。

在叢集環境下,儲存裝置是共享的。OS Kernel 的設計都是針對單機的,只能控制單機上多個程式間的訪問。如果還依賴OS Kernel的服務,就無法保證多個主機間的協調工作,這時就需要引入額外的控制機制。在RAC中,這個機制就是位於OracleOS 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組成的叢集。

2.2 Clusterware 組成

Oracle Cluster是一個單獨的安裝包,安裝後,在每個結點上的Oracle Clusterware 會自動啟動。Oracle Clusterware的執行環境由2個磁碟檔案(OCR,Voting Disk),若干程式和網路元素組成。

2.2.1 磁碟檔案:

Clusterware在執行期間需要兩個檔案:OCRVoting Disk. 2個檔案必須存放在共享儲存上。OCR用於解決健忘問題,Voting Disk 用於解決健忘問題。Oracle 建議使用裸裝置來存放這2個檔案,每個檔案建立一個裸裝置,每個裸裝置分配100M左右的空間就夠了。

2.2.1.1 OCR

健忘問題是由於每個節點都有配置資訊的拷貝,修改節點的配置資訊不同步引起的。 Oracle採用的解決方法就是把這個配置檔案放在共享的儲存上,這個檔案就是OCR Disk

OCR中儲存整個叢集的配置資訊,配置資訊以"Key-Value"的形式儲存其中。在Oracle 10g以前,這個檔案叫作Server Manageability Repository(SRVM).Oracle 10g,這部分內容被重新設計,並重名為OCR.Oracle Clusterware安裝的過程中,安裝程式會提示使用者指定OCR位置。並且使用者指定的這個位置會被記錄在/etc/oracle /ocr.Loc(Linux System) 或者/var/opt/oracle/ocr.Loc(Solaris System)檔案中。而在 Oracle 9i RAC中,對等的是srvConfig.Loc檔案。Oracle Clusterware在啟動時會根據這裡面的內容從指定位置讀入OCR 內容。

1). OCR key

整個OCR的資訊是樹形結構,有3個大分支。分別是SYSTEMDATABASECRS。每個分支下面又有許多小分支。這些記錄的資訊只能由root使用者修改。

2) OCR process

Oracle ClusterwareOCR中存放叢集配置資訊,故OCR的內容非常的重要,所有對OCR的操作必須確保OCR 內容完整性,所以在ORACLE Clusterware執行過程中,並不是所有結點都能操作OCR Disk.

在每個節點的記憶體中都有一份OCR內容的拷貝,這份拷貝叫作OCR Cache。每個結點都有一個OCR Process來讀寫OCR Cache,但只有一個節點的OCR process能讀寫OCR Disk中的內容,這個節點叫作OCR Master結點。這個節點的OCR process負責更新本地和其他結點的OCR Cache內容。

所有需要OCR 內容的其他程式,比如OCSSD,EVM等都叫作Client Process,這些程式不會直接訪問OCR Cache,而是向OCR Process傳送請求,藉助OCR Process獲得內容,如果想要修改OCR內容,也要由該節點的OCR ProcessMaster nodeOCR process提交申請,由Master OCR Process完成物理讀寫,並同步所有節點OCR Cache 中的內容。

2.2.1.2 Voting Disk

Voting Disk這個檔案主要用於記錄節點成員狀態,在出現腦裂時,決定那個Partion獲得控制權,其他的Partion必須從叢集中剔除。在安裝Clusterware時也會提示指定這個位置。 安裝完成後可以通過如下命令來檢視Voting Disk位置。

$Crsctl query css votedisk

2.2.2 Clusterware 後臺程式

Clusterware由若干程式組成,其中最重要的3個是:CRSD,CSSD,EVMD.在安裝clusterware的最後階段,會要求在每個節點執行root.sh 指令碼,這個指令碼會在/etc/inittab檔案的最後把這3個程式加入啟動項,這樣以後每次系統啟動時,Clusterware也會自動啟動,其中EVMDCRSD兩個程式如果出現異常,則系統會自動重啟這兩個程式,如果是CSSD 程式異常,系統會立即重啟。

1) OCSSD

OCSSD這個程式是Clusterware最關鍵的程式,如果這個程式出現異常,會導致系統重啟,這個程式提供CSS(Cluster Synchronization Service)服務。CSS服務通過多種心跳機制實時監控叢集狀態,提供腦裂保護等基礎叢集服務功能。

CSS服務有2種心跳機制:一種是通過私有網路的Network Heartbeat,另一種是通過Voting DiskDisk Heartbeat.

2種心跳都有最大延時,對於Disk Heartbeat,這個延時叫作IOT (I/O Timeout);對於 Network Heartbeat, 這個延時叫MC(Misscount)。這2個引數都以秒為單位,預設時IOT大於MC,在預設情況下,這2個引數是Oracle自動判定的,並且不建議調整。可以通過如下命令來檢視引數值:

$crsctl get css disktimeout

$crsctl get css misscount

注:除了Clusterware 需要這個程式,在單節點環境中如果使用了ASM,也需要這個程式;這個程式用於支援ASM InstanceRDBMS Instance之間的通訊。如果在使用了ASM的節點上安裝RAC,會遇到一個問題:RAC節點要求只有一個OCSSD程式,並且應該是執行$CRS_HOME目錄下的,這時就需要先停止ASM,並通過$ORACLE_HOME/bin/localcfig.Sh delete刪除之前的inittab條目。之前安裝ASM時,也使用這個指令碼來啟動OCSSD$ORACLE_HOME/bin /localconfig.Sh add.

2) CRSD

CRSD是實現"高可用性(HA)"的主要程式,它提供的服務叫作CRS(Cluster Ready Service) 服務。

Oracle Clusterware是位於叢集層的元件,它要為應用層資源(CRS Resource) 提供"高可用(HA) ",所以,Oracle Clusterware必須監控這些資源,並在這些資源執行異常時進行干預,包括關閉,重啟程式或者轉移服務。CRSD程式提供的就是這些服務。

所有需要高可用性的元件,都會在安裝配置的時候,以CRS Resource的形式登記到OCR中,而CRSD程式就是根據OCR中的內容,決定監控哪些程式,如何監控,出現問題時又如何解決。也就是說,CRSD程式負責監控CRS Resource的執行狀態,並要啟動、停止、監控、Failover這些資源。預設情況下,CRS會自動嘗試重啟資源5次,如果還是失敗,則放棄嘗試。

CRS Resource包括GSD(Global Serveice Daemon),ONS(Oracle Notification Service),VIP, Database, InstanceService.這些資源被分成2類:

GSD,ONS,VIPListener屬於Noteapps類,

Database,InstanceService屬於Database-Related Resource類。

我們可以這樣理解:Nodeapps就是說每個節點只需要一個就夠了,比如每個節點只有一個Listener,而Database-Related Resource就是說這些資源和資料庫有關,不受節點的限制,比如一個節點可以有多個例項,每個例項可以有多個Service

GSD,ONS,VIP3個服務是在安裝Clusterware的最後,執行VIPCA 時建立並登記到OCR中的。而Database,Listener,InstanceService是在各自的配置過程中自動或者手動登記到OCR中的。

3) EVMD

EVMD這個程式負責釋出CRS產生的各種事件(Event). 這些Event可以通過2種方式釋出給客戶:ONSCallout Script使用者可以自定義回撥指令碼,放在特定的目錄下,這樣當有某些事件發生時,EVMD會自動掃描該目錄,並呼叫使用者的指令碼,這種呼叫是通過racgevt程式來完成的。

EVMD程式除了複雜釋出事件之外,它還是CRSDCSSD兩個程式之間的橋樑。CRS CSS兩個服務之間的通訊就是通過EVMD程式完成的。

4) RACGIMON

RACGIMON這個程式負責檢查資料庫健康狀態,負責Service的啟動、停止、故障轉移(Failover)。這個程式會建立到資料庫的持久連線,定期檢查SGA中的特定資訊,該資訊由PMON程式定時更新。

 

未完待續
RAC的一些概念和原理性知識多方總結【2】 
http://blog.itpub.net/14184018/viewspace-692741/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14184018/viewspace-692739/,如需轉載,請註明出處,否則將追究法律責任。

相關文章