Oracle RAC/Clusterware的結(jié)構(gòu)和組件
一、RAC主要組件, 軟硬件兩部分
(1) 服務(wù)器 >= 2
(2) 操作系統(tǒng),推薦使用Oracle認(rèn)證的系統(tǒng);版本不要太老,也不要太新
(3) CPU/內(nèi)存 根據(jù)業(yè)務(wù)需要,內(nèi)存至少1G
(4) 本地磁盤空間,>=30G
(5) 網(wǎng)卡 >=2 ,推薦4個(gè)以上千兆網(wǎng)卡
(6) 私有以太網(wǎng)絡(luò),推薦千兆交換機(jī)以上
(7) HBA卡 ,如果是SAN,推薦2個(gè)冗余HBA
(8) 共享存儲(chǔ)設(shè)備,推薦SAN設(shè)備
(9) 存儲(chǔ)管理, ASM/Cluster LV/裸分區(qū)/CFS,不推薦用OCFS,卷管理軟件、多路徑軟件等
(10) 第三方集群軟件: 可選
(11) Oracle Clusterware 軟件
(12) Oracle RDBMS 軟件
二、Clusterware主要進(jìn)程
(1)crsd: 負(fù)責(zé)管理集群的高可用操作。管理的crs資源包括數(shù)據(jù)庫、實(shí)例、監(jiān)聽、虛擬IP,ons,gds或者其他,操作包括啟動(dòng)、關(guān)閉、監(jiān)控及故障切換。改進(jìn)程由root用戶管理和啟動(dòng)。crsd如果有故障會(huì)導(dǎo)致系統(tǒng)重啟。
(2)cssd,管理各節(jié)點(diǎn)的關(guān)系,用于節(jié)點(diǎn)間通信,節(jié)點(diǎn)在加入或離開集群時(shí)通知集群。該進(jìn)程由oracle用戶運(yùn)行管理。發(fā)生故障時(shí)cssd也會(huì)自動(dòng)重啟系統(tǒng)。
(3)oprocd – 集群進(jìn)程管理 —Process monitor for the cluster. 用于保護(hù)共享數(shù)據(jù)IO fencing。
僅在沒有使用vendor的集群軟件狀態(tài)下運(yùn)行
(4)evmd :事件檢測進(jìn)程,由oracle用戶運(yùn)行管理
三、Clusterware使用的共享設(shè)備
(1) Oracle Cluster Registry(OCR):記錄集群的配置信息;
(2) Voting disk : 即投票盤,保存節(jié)點(diǎn)的成員信息,當(dāng)配置多個(gè)投票盤的時(shí)候個(gè)數(shù)必須為奇數(shù),每個(gè)節(jié)點(diǎn)必須同時(shí)能夠連接半數(shù)以上的投票盤才能夠存活;
四、安裝路徑的選擇
注:
(1)在Oracle RAC中,軟件不建議安裝在共享文件系統(tǒng)上;包括CRS_HOME和ORACLE_HOME,尤其是CRS軟件,推薦安裝在本地文件系統(tǒng)中,這樣在進(jìn)行軟件升級(jí),以及安裝patch和patchset的時(shí)候可以使用滾動(dòng)升級(jí)(rolling upgrade)的方式,減少計(jì)劃當(dāng)機(jī)時(shí)間。另外如果軟件安裝在共享文件系統(tǒng)也會(huì)增加單一故障點(diǎn)。
(2)如果使用ASM存儲(chǔ),需要為asm單獨(dú)安裝ORACLE軟件,獨(dú)立的ORACLE_HOME,易于管理和維護(hù),比如當(dāng)遇到asm的bug需要安裝補(bǔ)丁時(shí),就不會(huì)影響RDBMS文件和軟件。
(3)在Oracle 11gR2中將新增存儲(chǔ)選項(xiàng):acfs (Oracle ASM Cluster File System)
第三方集群
在Oracle9i中,除了Windows和Linux,在安裝RAC之前必須先安裝vendor clusterware,即第三方集群,包括IBM的HACMP, HP的ServiceGuard for oracle RAC, Sun cluster,Veritas SFRAC等,這一類的集群軟件為Oracle RAC提供了下面的功能:
(1)共享的邏輯卷管理或者集群文件系統(tǒng)用于存放數(shù)據(jù)文件;
(2)提供了統(tǒng)一的集群的成員組管理;
(3)使用更健壯的SCSI-3 PGR機(jī)制來防止心跳故障(即裂腦split brain)導(dǎo)致的數(shù)據(jù)損壞,這種功能一般叫做IO fencing;
(4)提供效率更高的、更低延遲的心跳網(wǎng)絡(luò)用于cache fusion,可以相對(duì)減少TCP/IP的開銷,包括:
HP SGeRAC: HMP (Hyper Messaging Protocol),
Sun Cluster: RSM (Remote Shared Memory),
Veritas SFRAC: LLT (low-latency transport),
Compac True Cluster: RDG (reliable data grams);
通常如果要使用第三方集群的心跳協(xié)議,需要將$ORACLE_HOME/lib/libskgxpX.so文件替換為第三方集群
軟件提供的libskgxpX.so文件(其中X代表Oracle版本號(hào)9/10/11),skgxp 是System Kernel Generic Interface Inter-Process Communications的縮寫,是oracle開放的一個(gè)應(yīng)用接口,用于傳輸GCS和GES 的數(shù)據(jù)。Oracle自帶的libskgxp文件定義的傳輸協(xié)議是UDP/IP。
(5)提供擴(kuò)展的容災(zāi)方案,例如campus cluster/metro cluster/extended RAC; 以Veritas的SFRAC為例,它提供兩種Oracle Extended RAC方案,方案一是使用Veritas Volume Manager對(duì)底層陣列進(jìn)行鏡像,提供同城容災(zāi)級(jí)別的實(shí)時(shí)數(shù)據(jù)保護(hù);方案二使用GCO/VVR對(duì)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)復(fù)制,可以實(shí)現(xiàn)距離更遠(yuǎn)、超過10km廣域網(wǎng)的容災(zāi);
(6)Veritas SFRAC 還提供了以下特性:
補(bǔ)充的Oracle ODM,可以使Oracle同時(shí)擁有文件系統(tǒng)的易管理和裸設(shè)備的性能;
標(biāo)準(zhǔn)的多路徑軟件(DMP),不需要再安裝其他軟件就可支持絕大多數(shù)磁盤陣列,在異構(gòu)SAN環(huán)境中有更好的兼容性;
從Oracle10g起,Oracle提供了自己的集群軟件,叫Oracle clusterware簡稱CRS,這個(gè)軟件是安裝oracle rac的前提,而上述第三方集群則成了安裝的可選項(xiàng)。同時(shí)提供了另外一個(gè)新特性叫做ASM,可以用于RAC下的共享磁盤設(shè)備的管理,還實(shí)現(xiàn)了數(shù)據(jù)文件的條帶化和鏡像,以提高性能和安全性 (S.A.M.E: stripe and mirror everything ) ,不再依賴第三方存儲(chǔ)軟件來搭建RAC系統(tǒng)。
那么Oracle是如何識(shí)別第三方集群的呢?
在安裝完第三方集群后,會(huì)在特定目錄下生成Oracle RAC接口文件,這個(gè)文件的作用就是上面的第二點(diǎn)功能:集群成員管理信息(cluster membership 簡稱CM)。在HPUX下該文件是/opt/nmapi/nmapi2/lib/pa20_64,在AIX/Solaris/Linux下這個(gè)文件是 /opt/ORCLcluster/lib/libskgxn2.so 。
當(dāng)安裝CRS的的檢查階段,就會(huì)檢測是否有該文件,如果有的話,在安裝CRS過程中生成一個(gè)軟連接文件,文件名是ligskgxn2.so,指向上面的libskgxn2.so或pa20_64文件,這個(gè)軟連接的位置在CRS_HOME/lib/目錄;如果沒有第三方集群,那么CRS安裝過程中生成自己的libskgxn2.so文件。換句話說,在有第三方集群存在的情況下,CRS的集群成員信息是來自于第三方集群,兩套集群的成員信息保持一致和同步;沒有第三方集群情況時(shí),CRS自己管理成員信息。
通過查詢$CRS_HOME/log/hostname/cssd/ocssd.log可以看到css識(shí)別到的第三方集群,下面的例子分別是HACMP、SFRAC、SunCluster、ServiceGuide :
[CSSD]2008-05-27 15:09:43.456 [1029] >TRACE: clssnm_skgxninit: initialized skgxn version (2/0/IBM AIX skgxn) [CSSD]2008-12-30 21:44:56.172 [1029] >TRACE: clssnm_skgxninit: initialized skgxn version (2/0/Veritas Cluster Server MM [CSSD]2007-08-10 02:19:39.572 [3] >TRACE: clssnm_skgxninit: initialized skgxn version (2/2/Oracle Solaris UDLM) [CSSD]2006-09-29 18:57:53.323 [5] >TRACE: clssnm_skgxninit: initialized skgxn version (2/0/Hewlett-Packard SKGXN 2.0)
在9i/8i中沒有css/crs,該信息可以在后臺(tái)進(jìn)程lmon的trace文件中得到(在bdump中);
在安裝Oracle 9i RAC/8i OPS的過程中,Oracle識(shí)別集群方法類似。
在多個(gè)平臺(tái)上,如果兩個(gè)節(jié)點(diǎn)沒有正確鏈接libskgxn2文件,可能會(huì)導(dǎo)致第二個(gè)實(shí)例無法mount或出現(xiàn)ORA-600錯(cuò)誤。
Oracle支持的RAC環(huán)境
因?yàn)镺racle RAC本身比較復(fù)雜,在安裝和管理中可能會(huì)遇到各種問題,涉及到OS、RDBMS、Cluster軟件和網(wǎng)絡(luò)、主機(jī)、存儲(chǔ)等硬件,為了避免不必要的問題發(fā)生,在安裝之前,我們需要確認(rèn)安裝環(huán)境是否滿足要求,包括軟件和硬件兩方面,尤其是Vendor clusterware和OS 的版本的兼容性需要注意,可以從metalink中得到最新的Oracle官方認(rèn)證信息:登陸Metalink.oracle.com 選擇 Certify,選擇by product,選擇real application server,選擇對(duì)應(yīng)平臺(tái)就可以得到。下面列出一些關(guān)于硬件和平臺(tái)支持的常見問題:
官方不支持的:Vmware, Sun LDOM ,Solaris Local Container/Zones
官方支持的: IBM LPAR, IBM VIOS(Virtual IO Server), Solaris Global Containers
RHEL GFS , ISCSI,
私有網(wǎng)絡(luò)(心跳線)的支持: 不支持使用交叉線,支持 Infiniband RDS (10gR2之后)
異構(gòu)環(huán)境:支持不同的硬件、但相同的軟件(OS/Oracle)組成的集群,不支持32位與64位系統(tǒng)間的集群
目前支持的NFS的server包括:
EMC Celerra
Fujitsu Filer NR1000 Series
IBM N Series
NetApp FAS, F, G Series
Pillar Data Systems Axiom 500
Sun StorageTek 5000 Series
Oracle Clusterware的心跳
Oracle clusterware 使用兩種心跳設(shè)備來驗(yàn)證成員的狀態(tài),保證集群的完整性;一是對(duì)voting disk的心跳,ocssd進(jìn)程每秒向votedisk寫入一條心跳信息;二是節(jié)點(diǎn)間的私有以太網(wǎng)的心跳,兩種心跳機(jī)制都有一個(gè)對(duì)應(yīng)的超時(shí)時(shí)間,分別叫做 misscount和disktimeout:
misscount 用于定義節(jié)點(diǎn)間心跳通信的超時(shí),單位為秒;
disktimeout ,默認(rèn)200秒,定義css進(jìn)程與vote disk連接的超時(shí)時(shí)間;
reboottime ,發(fā)生裂腦并且一個(gè)節(jié)點(diǎn)被踢出后,這個(gè)節(jié)點(diǎn)將在reboottime的時(shí)間內(nèi)重啟;默認(rèn)是3秒;
其中misscount默認(rèn)值見下表
用下面的命令查看上述參數(shù)的實(shí)際值:
1. # crsctl get css misscount 2. # grep misscount $CRS_HOME/log/hostname/cssd/ocssd.log [CSSD]2008-11-27 22:29:42.397 [1] >TRACE: clssnmInitNMInfo: misscount set to 600
在下面兩種情況發(fā)生時(shí),css會(huì)踢出節(jié)點(diǎn)來保證數(shù)據(jù)的完整,:
(1) Private Network IO time > misscount,會(huì)發(fā)生split brain即裂腦現(xiàn)象,產(chǎn)生多個(gè)“子集群”(subcluster) ,這些子集群進(jìn)行投票來選擇哪個(gè)存活,踢出節(jié)點(diǎn)的原則按照下面的原則:
節(jié)點(diǎn)數(shù)目不一致的,節(jié)點(diǎn)數(shù)多的subcluster存活;節(jié)點(diǎn)數(shù)相同的,node ID小的節(jié)點(diǎn)存活。
(2) Vote Disk IO Time > disktimeout ,踢出節(jié)點(diǎn)原則如下:失去半數(shù)以上vote disk連接的節(jié)點(diǎn)將在reboottime的時(shí)間內(nèi)重啟;例如有5個(gè)vote disk,當(dāng)由于網(wǎng)絡(luò)或者存儲(chǔ)原因某個(gè)節(jié)點(diǎn)與其中>=3個(gè)vote disk連接超時(shí)時(shí),該節(jié)點(diǎn)就會(huì)重啟。當(dāng)一個(gè)或者兩個(gè)vote disk