RAC的一些概念和原理性知識多方總結【1】
對於RAC來說,最重要的還是要理解內部原理和體系結構。安裝不是非常難的事情。重要的還是體系結構以及內部原理,排錯和維護都離不開它們。
例項概念:一組程式和對應的資料結構
資料庫是一個容器,例項相當於從容器裡提取資料的手
單例項:一臺機器上一個庫只能對應一個例項
Rac:一個庫可以對應多個例項,並行。
每個例項執行在一個物理機器上,可以負載均衡,發生故障可以有狀態切換。
需要能讓多個機器同時讀寫的共享磁碟,可以由作業系統提供(AIX concurrent vg,Linux GPFS,)但concurrent vg是作業系統的雙機軟體中的元件所以必須安裝ha軟體。可以用oracle的ASM。crs為oracle的叢集軟體,提供ip切換等叢集功能。
ASM功能類似LVM為os提供儲存管理功能,但是是不可管理,把lun劃給即可。
計算任務分配到不同計算機節點來提高整體計算能力,主要應用在科學計算領域。主要利用的是平行計算。
把業務的負載流量儘可能的平均合理的分配到叢集的各個節點上,每個節點都可以處理一部分負載,並且可以根據負載情況進行動態的平衡。負載均衡演算法不是簡單的平均,而是根據每個節點的可用資源或網路的特殊情況來進行優化分配。因此分配+合理才是負載均衡的核心。
側重於提高系統的可用性,整合硬體和軟體的容錯性來實現整體服務的高可用性。如果某個節點發生故障,另外的節點代替他。
RAC是真正的LB和HA的複合體。從某種意義上說,只有最終應用(資料庫)才能實現真正意義上的LB,而絕大多數的叢集都是HA。
叢集環境中,存在共享儲存的問題。叢集中各個節點對共享儲存是對等的,所有節點對資料有相同的訪問許可權,因此需要某種機制來控制節點對資料的訪問。
在RAC中,採用的是DLM(Distribute Lock Management)機制來進行例項間的併發控制。
如果叢集環境的配置檔案不是集中存放,每個節點都有一個本地副本,叢集正常執行的時候,使用者可以在任何節點修改叢集的配置,並且這些更改都會自動同步到其他節點。
如果節點1因為正常的維護需要關機,節點2修改了配置,然後關閉節點2.啟動節點1,因為之前節點2做的配置修改沒有同步到節點1,所以將節點1啟動以後,他仍然使用舊的配置檔案,造成配置丟失。
叢集中,節點之間需要通過某種機制(心跳)瞭解彼此的健康情況,以確保各個節點協調工作。假設只是心跳出現故障,各個節點還在正常的工作,每個節點都認為其他節點當機,自己是整個叢集的唯一健在者,因此需要獲得整個叢集的“控制權”。儲存是共享的,這就意味著災難,這種情況就是“腦裂”。
解決這個問題的通常辦法是使用投票演算法(Quorum Algorithm),它的演算法機理如下:
叢集中各個節點需要心跳機制來通報彼此的"健康狀態",假設每收到一個節點的"通報"代表一票。對於三個節點的叢集,正常執行時,每個節點都會有3票。當結點A心跳出現故障但節點A還在執行,這時整個叢集就會分裂成2個小的partition。節點A是一個,剩下的2個是一個。這是必須剔除一個partition才能保障叢集的健康執行。
對於有3個節點的叢集,A心跳出現問題後,B和C是一個partion,有2票,A只有1票。按照投票演算法,B和C組成的叢集獲得控制權,A 被剔除。
如果只有2個節點,投票演算法就失效了。因為每個節點上都只有1票。 這時就需要引入第三個裝置:Quorum Device. Quorum Device通常採用的是共享磁碟,這個磁碟也叫作Quorum disk。這個Quorum Disk 也代表一票。當2個結點的心跳出現問題時,2個節點同時去爭取Quorum Disk 這一票, 最早到達的請求被最先滿足。故最先獲得Quorum Disk的節點就獲得2票。另一個節點就會被剔除。
叢集出現故障,必須判斷哪個節點應該獲得叢集的控制權,哪個節點需要被踢出。這是投票需要解決的問題。
僅僅將他們踢出還不足夠,因為他們可能還在繼續執行(只是離開了這個叢集),需要保證他們不再訪問共享資料。這就是IO隔離要解決的問題。
IO Fencing實現有硬體和軟體方式。各個叢集廠商使用的方式不同,有些需要硬體的支援(主要是儲存裝置是否支援某些協議)。Oracle RAC使用的是軟體的方式,直接重啟故障節點。
無論採用哪種方式,IO Fencing的目的就是保證故障節點不能繼續訪問共享資料。
有一些儲存裝置支援SCSI Reserve/Release命令,正常節點使用SCSI Reserve命令鎖住儲存裝置,故障節點發現儲存被鎖定,就知道自己已經被踢出了cluster,自行重啟,這種機制叫做自殺機制(suicide)。例如Sun和Veritas的叢集使用的就是這種機制。
無論軟體還是硬體,大致原理就是:正常節點通過某種方式告知故障節點,故障節點會進行重啟。告知的方式有硬體和軟體之分,硬體更加安全一些。
在單機環境下,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組成的叢集。
Oracle Cluster是一個單獨的安裝包,安裝後,在每個結點上的Oracle Clusterware 會自動啟動。Oracle Clusterware的執行環境由2個磁碟檔案(OCR,Voting Disk),若干程式和網路元素組成。
Clusterware在執行期間需要兩個檔案:OCR和Voting Disk. 這2個檔案必須存放在共享儲存上。OCR用於解決健忘問題,Voting Disk 用於解決健忘問題。Oracle 建議使用裸裝置來存放這2個檔案,每個檔案建立一個裸裝置,每個裸裝置分配100M左右的空間就夠了。
健忘問題是由於每個節點都有配置資訊的拷貝,修改節點的配置資訊不同步引起的。 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個大分支。分別是SYSTEM,DATABASE和CRS。每個分支下面又有許多小分支。這些記錄的資訊只能由root使用者修改。
2) OCR process
Oracle Clusterware在OCR中存放叢集配置資訊,故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 Process向Master node的OCR process提交申請,由Master OCR Process完成物理讀寫,並同步所有節點OCR Cache 中的內容。
Voting Disk這個檔案主要用於記錄節點成員狀態,在出現腦裂時,決定那個Partion獲得控制權,其他的Partion必須從叢集中剔除。在安裝Clusterware時也會提示指定這個位置。 安裝完成後可以通過如下命令來檢視Voting Disk位置。
$Crsctl query css votedisk
Clusterware由若干程式組成,其中最重要的3個是:CRSD,CSSD,EVMD.在安裝clusterware的最後階段,會要求在每個節點執行root.sh 指令碼,這個指令碼會在/etc/inittab檔案的最後把這3個程式加入啟動項,這樣以後每次系統啟動時,Clusterware也會自動啟動,其中EVMD和CRSD兩個程式如果出現異常,則系統會自動重啟這兩個程式,如果是CSSD 程式異常,系統會立即重啟。
1) OCSSD
OCSSD這個程式是Clusterware最關鍵的程式,如果這個程式出現異常,會導致系統重啟,這個程式提供CSS(Cluster Synchronization Service)服務。CSS服務通過多種心跳機制實時監控叢集狀態,提供腦裂保護等基礎叢集服務功能。
CSS服務有2種心跳機制:一種是通過私有網路的Network Heartbeat,另一種是通過Voting Disk的Disk 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 Instance和RDBMS 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, Instance和Service.這些資源被分成2類:
GSD,ONS,VIP和Listener屬於Noteapps類,
Database,Instance和Service屬於Database-Related Resource類。
我們可以這樣理解:Nodeapps就是說每個節點只需要一個就夠了,比如每個節點只有一個Listener,而Database-Related Resource就是說這些資源和資料庫有關,不受節點的限制,比如一個節點可以有多個例項,每個例項可以有多個Service。
GSD,ONS,VIP這3個服務是在安裝Clusterware的最後,執行VIPCA 時建立並登記到OCR中的。而Database,Listener,Instance和Service是在各自的配置過程中自動或者手動登記到OCR中的。
3) EVMD
EVMD這個程式負責釋出CRS產生的各種事件(Event). 這些Event可以通過2種方式釋出給客戶:ONS和Callout Script使用者可以自定義回撥指令碼,放在特定的目錄下,這樣當有某些事件發生時,EVMD會自動掃描該目錄,並呼叫使用者的指令碼,這種呼叫是通過racgevt程式來完成的。
EVMD程式除了複雜釋出事件之外,它還是CRSD和CSSD兩個程式之間的橋樑。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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RAC的一些概念和原理性知識多方總結【2】
- RAC 的一些概念性和原理性的知識
- [轉]RAC 的一些概念性和原理性的知識
- RAC 概念和原理知識
- Web(牛腩)概念知識總結Web
- RAC GUARD概念和管理總結
- Vue一些知識點總結Vue
- jQuery常用的一些知識點總結jQuery
- 《結網》的概念知識吸取
- Java基礎知識總結-1Java
- JS基礎知識總結(1)JS
- 總結關於CPU的一些基本知識
- influxdb知識總結(2)--- influxdb 中的重要概念UX
- Sql Server資料庫的一些知識點定義和總結SQLServer資料庫
- web前端應該總結的知識點(1)Web前端
- 類和物件部分知識總結物件
- Parcelable和Serializable知識總結
- LVM的知識總結和操作大全LVM
- 人工智慧(二、知識表示)——1.知識表示與知識表示的概念人工智慧
- 【總結】日常遇到的一些問題相關知識
- Java類和物件知識點總結Java物件
- NLP知識總結和論文整理
- web前端知識總結-BOM和DOMWeb前端
- linux知識知識點總結Linux
- 零散知識點總結(1) Gradle 使用配置總結Gradle
- Redis知識總結Redis
- Cookie知識總結(-)Cookie
- 圖知識總結
- golang知識總結Golang
- servlet知識總結Servlet
- 常量知識總結
- Docker知識總結Docker
- JQuery知識總結jQuery
- servelt知識總結
- 知識點總結
- SWAP知識總結
- MySQL知識總結MySql
- PayPal知識總結