- 大話Oracle Grid:云時代的RAC
- 張曉明
- 84字
- 2019-01-02 08:20:45
第3章 認識 Grid 2.0
Grid即網(wǎng)格。網(wǎng)格計算的概念并非Oracle的發(fā)明,但似乎只有Oracle把它作為商標貼在自己臉上,即“10g”的“g”。不過Oracle當時的想法只有數(shù)據(jù)庫才能撐得起網(wǎng)格這個門面,因此這個“g”當時只是給了DB,而同期落地的Clusterware頭上并沒有這個光圈。
隨著無處不在的云計算的來臨,業(yè)界充分見識到了平臺的力量,顯然,做一個能網(wǎng)格化的平臺要比單純的數(shù)據(jù)庫更富有“錢”景。于是Oracle 11g里,除了DB網(wǎng)格的繼續(xù)發(fā)揚光大外,Clusterware也和光同塵的黃袍加身,Grid化了。
所以,我認為Oracle Grid 11g應(yīng)該算是Oracle的Grid 2.0。
接下來,我們會對Oracle Grid進行深入的剖析,深入到Grid的內(nèi)部去看個究竟。這會是一個很有挑戰(zhàn)性的旅程,這個探索之旅我們必須要借助一些工具才能完成,包括EM、crsctl、srvctl、cluvfy、oifcfg、ocrconfig、ocrcheck和ocrdump。
在這些工具中,我們用得最多的將會是 crsctl、srvctl,它們不僅是我們研究過程中的有益助手,也是我們?nèi)粘_\維過程中的得力工具。
用過Oracle Clusterware 10g的讀者應(yīng)該知道,Oracle 10g有一組以crs_開頭命名的工具,每個工具都有一個特定的功能。這些工具包括crs_stat、crs_register、crs_unregister、crs_start、crs_stop、crs_getperm、crs_profile、crs_relocate和crs_setperm。
在Oracle Grid 11.2中,這些工具都被廢棄掉了。當然被廢除的只是工具,功能還是要保留的,這些功能都被整合到crsctl一個工具中了,于是crsctl就成了Grid的瑞士軍刀了。另外,crsctl工具本身也有些變化,下面這些用法在Oracle Grid 11.2 中被廢除了:
crsctl check crsd;
crsctl check cssd;
crsctl check evmd;
crsctl debug log;
crsctl set css votedisk;
crsctl start resources;
crsctl stop resources。
因為在Oracle Grid 11.2的日常使用中最常用到的命令就是crsctl和srvctl,所以我們先學(xué)習(xí)這兩個命令。
3.1 借我一雙慧眼
crsctl和srvctl這兩個工具每個拎出來都是個“十項全能”。盡管在對資源的操作能力上,二者有些重疊,但是區(qū)別也是挺明顯的。區(qū)別就在于對于那些名字以ora為前綴命名的實體(包括資源、資源類型、Server Pool)都要通過srvctl來維護。而集群層面的一般通過crsctl來維護。
3.1.1 CRSCTL
crsctl在Oracle Grid 11.2中得到了很大的加強,它是之前版本中crsctl和crs_*兩個工具的復(fù)合體。所以,crsctl就是個“萬金油”。從clusterware的啟動、關(guān)閉、監(jiān)控,到voting disk以及其他資源的管理無所不能,當然其中有一些需要關(guān)注的變化。
1.功成身退的crs_***
Clusterware 10.2 中有很多以 crs_開頭的命令,比如 crs_profile、crs_stat 等,這些 crs_***樣式的命令從Oracle Grid 11.2開始被慢慢淘汰。不過Oracle為了保證向后兼容,這些命令在Grid 11.2中還保留著,但功能已經(jīng)整合到crsctl中了。這種并行的局面可能還要持續(xù)一段時間,作為最終用戶,我們最好從現(xiàn)在就開始記住crsctl只此一家,別無分號。
不妨看看之前的這些命令是怎么對應(yīng)的。比如,crs_stat是查看資源狀態(tài)的,現(xiàn)在對應(yīng)的是crsctl status res -t ……
再比如,以前資源的啟停、重新分配用的是crs_start、crs_stop、crs_relocate這3個命令。現(xiàn)在就可以這么做了:crsctl start/stop/relocate resource resourcename。
如果用 Clusterware 維護第三方的應(yīng)用程序,比如 Tomcat,之前我們要用到 crs_profile、crs_register、crs_setperm 一系列命令,這些命令同樣也整合到 crsctl 里了。也就是說,現(xiàn)在可以通過crsctl來創(chuàng)建資源、設(shè)置資源權(quán)限等。后面會用個例子演示如何用Grid來給第三方程序提供高可用性的保護功能。
注意:Clusterware所維護的資源,如果資源的名字是以ora.開頭的,這類資源應(yīng)該用srvctl來維護;否則,就應(yīng)該用crsctl命令來維護。
另外,crsctl status resource –t命令查看的資源中,并沒有包括OHAS棧的daemon,要想查看這部分daemon,還要加上-init,比如“crsctl status res -t –init”。
2.手工啟動集群方式的變化
Oracle集群棧一般是伴隨著操作系統(tǒng)的啟動過程啟動的,當然也支持手工方法的啟動。但手動方法在Oracle 11.2中發(fā)生了變化。這主要是因為Grid 11.2中的Clusterware結(jié)構(gòu)發(fā)生了變化。這個變化稍后會有詳細介紹,這里先開個頭。
Oracle Clusterware 10.2 有CRSD、CSSD、EVMD 三大服務(wù),操作系統(tǒng)的init 會啟動這3個daemon。如果要手工啟動,命令如下:
crsctl start crs
這個命令到了Oracle Grid 11.2還是有效的,不過意義已經(jīng)不一樣了,在Oracle 11.2之前,CRS就是Clusterware的全部,動CRS就是動Clusterware。
而到了Oracle 11.2之后,位于整個集群棧最底層的元素是OHASD,CRS風光不再,它已經(jīng)降格為OHASD管理的資源,而且還只是其中之一。
如果 OHASD 沒有啟動或者被關(guān)閉了,那這個命令的結(jié)果就是“這里的黎明靜悄悄”,不會有任何的東西被啟動,這個節(jié)點無法加入到集群中。
換句話說,在Grid 11.2中的crsctl start crs已經(jīng)淪落到只能啟動CRS這么一個daemon的境地。而且這還得看別人臉色,如果 OHASD 沒有啟動,這條命令也是干賺吆喝,沒有任何效果。
所以在Grid 11.2中正確啟動集群的做法是crsctl start cluster。于是,Oracle Grid 11.2中正確的手工啟動、關(guān)閉、檢查所有集群件的命令是這樣的:
crsctl start cluster –all
crsctl stop cluster –all
crsctl check cluster –all
對于crsctl的變化,暫時就了解這么多,具體的用法我們會在后面的過程中現(xiàn)學(xué)現(xiàn)賣。接下來,來看另一個重要工具srvctl。
3.1.2 SRVCTL
在Oracle RAC的層次結(jié)構(gòu)中,srvctl是用來維護上層應(yīng)用或者資源的。對于Oracle Grid 11.2來說,可以由srvctl維護的資源包括ASM、Database、Instance、Service、Node Applications、Listener、VIP Address、GNS、SCAN VIP、SCAN Listener、Oracle Home、OC4J、SERVER、SERVER POOLS、ASM Disk Group、ASM File System(黑體部分是Grid 11.2中增加的資源)。
srvctl能夠執(zhí)行的操作和之前版本是相同的,包括enable、disable、start、stop、relocate、status、add、remove、modify、config、getenv、setenv、unsetenv。但并不是說每一種資源都支持這么多種操作,支持關(guān)系如表3-1所示。
表3-1 SRVCTL命令參考


使用srvctl時,需要注意的是ASM。要是之前的版本,像srvctl stop asm這種用法沒有任何問題的。到了Oracle 11.2 中就不行了,因為ASM 中有了OCR 和Voting File,這時候CSS是作為客戶端連接到ASM中的。要想關(guān)閉ASM,就必須要關(guān)閉CSSD,因此,關(guān)閉ASM的唯一正確方法就是關(guān)閉OHAS。如果要關(guān)閉的Oracle Home恰好也是ASM Home的話,也會有同樣的問題。
對這兩個工具先介紹這么多,這兩個工具的用法非常類似,語法格式都是一樣的;而且功能上也有重疊,都能夠操縱資源。所以使用時需要注意區(qū)分,我們目前可以記住這么一個竅門:對集群層的操作是crsctl的功能,srvctl沒這功能。那些名字是以ora.開頭的資源,都應(yīng)該用srvctl來操作。其他的就需要我們在以后的使用過程中慢慢總結(jié)和體會了。
接下來進入Grid的正題,先從Oracle Grid的前世今生開始說起。
3.2 Clusterware的前世今生
其實用圖3-1就能講清楚Clusterware和Grid的關(guān)系,以及Oracle 10.2和11.2的變化。

圖3-1 Grid、Clusterware、ASM的關(guān)系
圖3-1包含以下兩層意思:
在Oracle 11.2 之前,ASM是DB的功能。從Oracle 11.2 開始,ASM從DB中移出來,合并到Clusterware中;
Clusterware和ASM合并一處后,再叫原來這兩個名字中的哪個都不合適了,于是就叫Grid了。
那我們就先回顧歷史,看看Clusterware的老底。
Oracle集群從Oracle 7就有了,只是當時還不叫RAC,而是叫OPS(Oracle Parallel Server),RAC 是后來的事。因為是集群數(shù)據(jù)庫,所以不可避免地需要一個集群支撐系統(tǒng)。最初 Oracle是沒有這個系統(tǒng)的,怎么辦呢?只能使用第三方的了,比如IBM的HACMP、Sun的Cluster、HP的True Cluster,這些都是針對特定操作系統(tǒng)的,也有些通用產(chǎn)品,比如Veritas。總之必須借助于一個非Oracle的東西才能搞出Oracle集群來。
可能是Oracle不甘受制于人,也可能是Oracle認為集群的市場巨大、想分一杯羹。Oracle在9i時拿出了它的第一款集群軟件OCM(是Oracle Cluster Manager,不是Oracle認證大師),不過在9i時期,這個產(chǎn)品還只是針對Linux和Windows平臺的,并不支持其他UNIX平臺。
當然,OCM 只是一個試水產(chǎn)品,真正用在生產(chǎn)環(huán)境中商用的案例并不多。而且這個時期Linux還沒成氣候,只是個學(xué)院工具或者技術(shù)狂熱分子的玩具,沒有進入企業(yè)應(yīng)用的領(lǐng)域。
再接下來就是Oracle 10g了,“g”是Grid(網(wǎng)格)的意思。應(yīng)該說,Oracle網(wǎng)格的概念提得忒超前了,很長時間內(nèi)大家都搞不清“網(wǎng)格”是要革誰的命。就像后來人云亦云的“云計算”一樣,其實今天再回頭想想,如果把網(wǎng)格再加上虛擬化,基本就是“云”的翻版。
有點扯遠了,回來說集群軟件,Oracle 10gR1時,Oracle推出了第一款可商用的集群軟件Cluster Ready Service,這是一款跨平臺的產(chǎn)品,能夠支持Windows、Linux、UNIX系統(tǒng)。到了Oracle 10.2,Oracle把它改名成Oracle Clusterware,這也是目前裝機量最多的一個版本。
經(jīng)過這么幾年的市場考驗,Oracle Clusterware已經(jīng)得到了用戶的認可,事實上已經(jīng)成了部署RAC的標準配置了,而其他的集群件卻年景慘淡。根據(jù)我的體驗,除了IBM的HACMP目前還沒被徹底否決外,Sun、Linux 上基本是Oracle Clusterware 的天下了,Veritas 更是“不可聞”。從這個側(cè)面也可以看出Oracle對其他廠商的擠壓,以前Oracle會把Sun、HP、IBM、Red Hat當作親密的合作伙伴。現(xiàn)在的Oracle是年輕力壯、財大氣粗,再也不用看其他人的臉色了。比如,Red Hat收購JBoss后,Oracle馬上推出了自己的Oracle Enterprise Linux,而且提供全線支持,著實把紅頂企鵝惡心夠嗆。
既然在UNIX平臺上有兩種集群管理軟件(廠商自己的、Oracle的Clusterware)可以選擇,那么它們有什么關(guān)系呢?又該如何選擇呢?可以給讀者這樣的結(jié)論:不管什么平臺,Oracle Clusterware(Oracle Grid)是必需的,而廠商的集群軟件是可選的。
如果同時安裝了廠商的集群管理軟件,則Oracle Clusterware就會發(fā)揮橋梁的作用,讓OracleRAC和廠商的集群管理軟件協(xié)同工作。在這種情況下,需要先安裝廠商的集群軟件,然后再安裝Oracle Clusterware。這樣一來,會在/optORCcluster目錄下創(chuàng)建一個叫做libskgxn.so的庫。
比如,在我的AIX環(huán)境下因為使用了HACMP,所以可以看到這個目錄:
[oracle@guangdong_rac1 lib]$cd /opt/ORCLcluster/
[oracle@ rac1 ORCLcluster]$ls
bin lib lib32
[oracle@ rac1 ORCLcluster]$ll lib
total 784
drwxr-xr-x 2 root system 256 Jun 8 2010 .
drwxr-xr-x 5 root system 256 Jun 6 2010 ..
lrwxrwxrwx 1 root system 32 Jun 8 2010 libskgxn2.a ->/opt/ORCLcluster/lib/libskgxnr.a
lrwxrwxrwx 1 root system 33 Jun 8 2010 libskgxn2.so ->/opt/ORCLcluster/lib/libskgxnr.so
-rw-r--r-- 1 oracle dba 204669 Jun 7 2010 libskgxnr.a
-rwxr-xr-x 1 oracle dba 194440 Jun 7 2010 libskgxnr.so
[oracle@guangdong_rac1 ORCLcluster]$ll lib32/
total 728
drwxr-xr-x 2 root system 256 Jun 8 2010 .
drwxr-xr-x 5 root system 256 Jun 6 2010 ..
lrwxrwxrwx 1 root system 34 Jun 8 2010 libskgxn2.a ->/opt/ORCLcluster/lib32/libskgxnr.a
lrwxrwxrwx 1 root system 35 Jun 8 2010 libskgxn2.so ->/opt/ORCLcluster/lib32/libskgxnr.so
-rw-r--r-- 1 oracle dba 189609 Jun 8 2010 libskgxnr.a
-rwxr-xr-x 1 oracle dba 179363 Jun 7 2010 libskgxnr.so
[oracle@guangdong_rac1 ORCLcluster]$ll bin
total 0
drwxr-xr-x 2 root system 256 Jun 6 2010 .
drwxr-xr-x 5 root system 256 Jun 6 2010 ..
而在另一個Sun集群中,因為只用了Oracle Clusterware,所以就看不到這個目錄。
1.Clusterware要管什么
Oracle 10g的Clusterware提供三大功能:
節(jié)點成員身份管理(Node Membership);
全局資源管理;
高可用性保證。
成員身份,就是說一個節(jié)點屬于一個集群。而所謂節(jié)點的成員身份管理,就是要判斷一個節(jié)點是否屬于集群或者是否該被踢出集群。
屬于集群的成員就意味著這個節(jié)點能夠操作集群里的資源,再說淺顯點就是能夠讀寫共享存儲上的數(shù)據(jù)文件。我們知道,Oracle是一種共享一切的集群模式,所有節(jié)點共同操作一份數(shù)據(jù),包括讀和寫,讀還好一點,寫必須要控制。
之所以要做成員身份管理,就是要保證所有這些成員對于這僅有的一份共享數(shù)據(jù)文件的IO活動是在一個受控的環(huán)境下進行的。一旦某個節(jié)點的活動不受控,或者說這個節(jié)點失去了聯(lián)系(沒有了心跳響應(yīng)),那這個節(jié)點的 IO 操作就很可能造成對數(shù)據(jù)的破壞。因此這時就要取消它的成員身份,也就是把它踢出集群。
集群固然重要,24×7固然重要,快速響應(yīng)固然重要,但都比不上用戶數(shù)據(jù)的準確。因此,成員身份管理當之無愧的是頭等大事。既然大家共同開發(fā),就一定要服從命令聽指揮,不能野蠻生長。
再看全局資源。
一個RAC環(huán)境中其實有兩個集群存在:一個是由Oracle Clusterware(或者Oracle Grid)組成的集群,這是一個基礎(chǔ)架構(gòu)層級的集群。另一個是各個數(shù)據(jù)庫實例組成的集群,這是一個應(yīng)用層的集群。
二者的關(guān)系可以這樣理解,前一個集群就相當于是一個劇場,這里有舞臺、燈光、音響、煙火、道具,提供了一切必要的物質(zhì)條件,但是只有這些東西沒用,觀眾真正要看的是演員的表演,這些不過是烘托演員表演的,不能喧賓奪主。后一個集群就是在這個平臺上的演員。
因此,Clusterware只是一個平臺,它上面可以支持各種各樣的應(yīng)用,Oracle數(shù)據(jù)庫恰好是這樣的應(yīng)用之一,可能也是目前為止唯一的一種應(yīng)用。但我們不懷疑以后可能會有越來越多其他的應(yīng)用跑在上面。就算我們自己不這么做,Oracle也會把它作為其他產(chǎn)品的HA方案捆綁銷售,強加給我們的。
所有這些想要運行在Clusterware上或者說想交給Clusterware(Grid)管理、實現(xiàn)集群目標的應(yīng)用程序,都是Clusterware的資源。資源必須注冊到Oracle Clusterware集群中,委托Oracle Clusterware對自己進行監(jiān)管。
Oracle Clusterware所提供的是一個完整的監(jiān)控框架,它并不知道該怎么應(yīng)付一個具體的資源,必須由我們來告訴它。于是 Oracle Clusterware 又提供了一套完整的接口(有 API 的、有命令行的),方便我們把這些程序作為資源注冊到 Clusterware、交給 Clusterware 維護、借助Clusterware實現(xiàn)各種集群能力。
而高可用性是Clusterware的價值所在,這一點我們不需要做過多的討論。
上面這三點是Clusterware所要提供的最基礎(chǔ)的功能。具體到實現(xiàn)上,Oracle 10g Clusterware是通過三大服務(wù)來完成它的使命的,分別是CSS、CRS和EVM。
CSS 服務(wù)(Cluster Synchronization Service)提供了節(jié)點管理(Node Monitor)和組管理 (Group Manager)的功能,可以理解成CSS提供的就是節(jié)點成員身份管理;CRS(Cluster Ready Service)提供的是資源的管理能力;而EVM(Event Management)提供的是事件管理能力。
從DBA的角度來說,這3個服務(wù)中我們最需要關(guān)注的就是CSS服務(wù)了,這是因為Oracle的CSS服務(wù)有一個相當霸道的功能:自行重啟節(jié)點。注意,它這個重啟不是說重啟數(shù)據(jù)庫實例或者Clusterware,而是把操作系統(tǒng)重啟,相當于init -6。
要知道對電信、券商、銀行這樣的單位來說,重啟系統(tǒng)是一件非常嚴肅的事情,需要層層上報審批、雙規(guī)(在規(guī)定時間按照規(guī)定的流程)執(zhí)行。Oracle的這個功能顯然太野蠻了。所以,我們必須要了解CSS中到底有哪些進程、會以什么樣的方式重啟操作系統(tǒng)。
Clusterware的進程可以配合這3個服務(wù)分成3組,如圖3-2所示。

圖3-2 Oracle 10.2 Clusterware的進程
CSS服務(wù)的進程包括ocssd、oprocd、oclsomon,這3個進程都具有重啟系統(tǒng)的功能。
如果ocssd進程被kill或者掛掉,節(jié)點就會重啟。
Oracle 10.2 之后出現(xiàn)了oclsmon 進程,它負責監(jiān)控ocssd進程的狀態(tài),如果發(fā)現(xiàn)問題,也會重啟節(jié)點。
在UNIX平臺上,如果沒有使用第三方的集群軟件,會有oprocd進程,Linux的10.2.0.4及以后的版本也有這個進程,這個進程替代之前的hangcheck timer 模塊,其功能和工作方式也與hangcheck timer 模塊一樣,它也可以導(dǎo)致節(jié)點的重啟。
CRS 服務(wù)的主進程是 crsd,這個進程負責啟動、關(guān)閉、監(jiān)控資源狀態(tài)。Oracle 10.2 的Clusterware是通過一個所謂RACG框架來維護資源的,所有ora.*格式的資源都是通過這個框架來維護的。而其他的應(yīng)用程序要想交給 CRS 維護,必須提供一個符合 Oracle 規(guī)范的 action腳本,然后Clusterware就可以通過這個腳本來操作這些程序了。
最后,EVM 服務(wù)對應(yīng)的進程就是 evmd,這個進程還會有幾個輔助進程,比如 evmlogger記錄日志,另一個重要的輔助進程是racgevt,Oracle Clusterware為用戶提供了響應(yīng)集群事件的機制,用戶可以把自己的腳本放在指定的目錄下,然后當有事件發(fā)生時,EVM就會執(zhí)行racgevt,后者再執(zhí)行該目錄下的用戶腳本,并把事件名等一堆參數(shù)傳給腳本。于是我們就可以對感興趣的事情做出個性化處理,比如發(fā)郵件、發(fā)短信等。
2.Clusterware的文件
Oracle Clusterware 10.2中用到的文件有3個,分別是OCR、Voting Disk(Voting File)和Control File。
從 OCR 這個文件的名字我們應(yīng)該能體會到,它對于 Oracle 集群的作用就像注冊表(Registry)對 Windows 操作系統(tǒng)的作用。這是 Oracle 集群的配置文件,數(shù)據(jù)庫的、集群的配置信息都在這里,比如集群的節(jié)點列表、集群數(shù)據(jù)庫實例和節(jié)點對應(yīng)關(guān)系、CRS應(yīng)用程序資源profile位置等。
另一個文件是Voting Disk(其他的叫法還有Voting File、表決磁盤、投票磁盤,指的都是同一個文件),它是用來管理節(jié)點的成員身份的。Voting Disk也是Oracle Clusterware中重要通信渠道,集群有兩個心跳機制,一個是通過私有網(wǎng)絡(luò)的網(wǎng)絡(luò)心跳,另一個就是通過Voting Disk的磁盤心跳。當網(wǎng)絡(luò)心跳丟失時,集群會通過Voting Disk解決腦裂風暴。
不管是Oracle Clusterware 10.2還是Grid 11.2都有控制文件,這些文件控制一些重要進程的啟用、停用,進而控制重要的集群功能。比如是否啟動oprocd進程。在Linux、AIX系統(tǒng)中這些文件的位置在/etc/oracle/scls_scr/<nodename>/root目錄下,而Sun是在/var/opt/oracle/scls_scr/<nodename>/root目錄下,不同的版本中這個目錄下文件的個數(shù)有些區(qū)別。
這是Clusterware 10.2的文件:
[oracle@center-rac2 root]$pwd
/var/opt/oracle/scls_scr/center-rac2/root
[oracle@center-rac2 root]$ll
total 3
-rw-r--r-- 1 root root 37 Jun 24 19:11 crsdboot
-rw-r--r-- 1 root root 7 Apr 2 2010 crsstart
-rw-r--r-- 1 root root 37 Jun 24 19:11 cssrun
-rw-r--r-- 1 root root 0 Apr 2 2010 noclsmon
-rw-r--r-- 1 root root 0 Jun 24 19:11 noclsvmon
這是Grid 11.2的文件:
[grid@indexserver1 indexserver1]$ ls
grid root
有g(shù)rid、root兩個子目錄,先看grid目錄:
[grid@indexserver1 indexserver1]$ ll grid/
total 4
-rw-r--r-- 1 grid root 8 Jul 5 13:05 cssfatal
再看root目錄:
[grid@indexserver1 indexserver1]$ ll root/
total 12
-rw-r--r-- 1 root root7 Jul 5 13:05 crsstart
-rw-r--r-- 1 root oinstall 8 Jul 18 16:11 ohasdrun
-rw-r--r-- 1 root oinstall 7 Jul 5 13:05 ohasdstr
這些文件的內(nèi)容一般都是 enable、disable、restart 這樣的字符串,進而控制同名進程的啟停。這些文件內(nèi)容是由集群自動維護的。比如init.cssd或者crsctl工具,所以我們不要試圖手工去改變這些文件,知道就好了。
3.Clusterware的啟動
Oracle Clusterware是利用操作系統(tǒng)級的init腳本啟動的,Clusterware部署完成后,/etc/inittab中就會被加上下面的內(nèi)容:
h1:35:respawn:/etc/init.d/init.evmd run >/dev/null 2>&1 </dev/null
h2:35:respawn:/etc/init.d/init.cssd fatal >/dev/null 2>&1 </dev/null
h3:35:respawn:/etc/init.d/init.crsd run >/dev/null 2>&1 </dev/null
這些就是Oracle Clusterware 10.2的核心內(nèi)容,接下來使用本章開頭介紹的工具來對它進行剖析,以便從操作系統(tǒng)層面來看看它到底都有些什么。
首先使用以下命令檢查集群的運行狀態(tài):
[oracle@center-rac2 admin]$crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
該命令用來檢查上面提到的三大基本服務(wù),上面的結(jié)果顯示集群的狀態(tài)是正常的。
再看一看Clusterware所維護的資源清單,需要用到下面這個命令:
[oracle@center-rac2 admin]$crs_stat -t
NameType Target State Host
------------------------------------------------------------
ora....SM1.asm application ONLINE ONLINE center-rac1
ora....C1.lsnr application ONLINE ONLINE center-rac1
ora....ac1.gsd application ONLINE ONLINE center-rac1
ora....ac1.ons application ONLINE ONLINE center-rac1
ora....ac1.vip application ONLINE ONLINE center-rac1
ora....SM2.asm application ONLINE ONLINE center-rac2
ora....C2.lsnr application ONLINE ONLINE center-rac2
ora....ac2.gsd application ONLINE ONLINE center-rac2
ora....ac2.ons application ONLINE ONLINE center-rac2
ora....ac2.vip application ONLINE ONLINE center-rac2
ora.wxxrdb.db application ONLINE ONLINE center-rac1
ora....b1.inst application ONLINE ONLINE center-rac1
ora....b2.inst application ONLINE ONLINE center-rac2
從列表可以看到,Oracle Clusterware管理的典型資源包括ASM、Listener、VIP、Database、Instance、GSD、ONS。圖3-3就是Oracle Clusterware 10.2環(huán)境的示意圖。

圖3-3 Clusterware 10.2的組成示意圖
說明:這一部分內(nèi)容是對Oracle 10.2 RAC 的概要結(jié)論,因此這里不展開說明。
3.3 Grid中都有些什么
Oracle Grid 是在 Oracle Clusterware 基礎(chǔ)上發(fā)展過來的,Oracle Grid 又分成了 11.1 和11.2 兩個版本,11.1 這個版本基本上是 Clusterware 10.2 的延續(xù),形式和內(nèi)容上都沒有什么變化。
而Oracle Grid 11.2和Oracle Clusterware或者Oracle Grid 11.1比起來,形式和內(nèi)容上都有重大的更改,初次接觸容易產(chǎn)生面目全非的錯覺。甚至?xí)兄胺e累的知識“都白學(xué)了”的感覺。不過,隨著研究的不斷深入,就會發(fā)現(xiàn),Oracle Grid 的變化不是顛覆性的,所有 Oracle Clusterware的內(nèi)容都在。
打個比方,Oracle Clusterware 就像是個“毛坯房”,三大功能往那一戳,像三根棍子似的頂著 RAC 數(shù)據(jù)庫。一眼就看到底了,不嫵媚、不深邃、不復(fù)雜。得裝修,精裝修后,于是就有了Grid。
Grid 和 Clusterware 比起來,無論門面、內(nèi)飾、細節(jié)上都做得更精細,所以會讓我們有不認識的錯覺,其實扒開來看看房子還是框架結(jié)構(gòu)的,不過確實更好用,也更唬人了。
接下來,使用本章開始介紹的兩個工具來看看Grid 11.2到底長成什么樣,用類似的命令查看同樣的信息,不過命令的語法、輸出的格式這些細節(jié)會有些變化,格式上的變化并不是重點,重點要關(guān)注內(nèi)容上的變化。最后,我們還要給出Grid 11.2的組成示意圖。
1.集群棧狀態(tài)
檢查集群狀態(tài)還是用crsctl命令,也還是用check動作,不過后面的參數(shù)不一樣了,Grid 11.2中不再支持crs,而是要用cluster,于是就是下面這個命令:
[grid@indexserver2 ~]$ crsctl check cluster -all
**************************************************************
indexserver1:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
indexserver2:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
indexserver3:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
indexserver4:
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
**************************************************************
這個命令等同于Clusterware 10.2 中的crsctl check crs,輸出也類似,我們用-all把所有節(jié)點上的信息都顯示出來,可以看到,在Grid 11.2中,基本服務(wù)仍然是CRS、CSS、EVM三個。我們再接著來看一看資源情況。
2.集群的資源
在Clusterware 10.2 中,檢查資源的命令是crs_stat,在Grid 11.2中,這個命令被整合到了crsctl中,用法是這樣的:
[grid@indexserver1 root]$ crsctl status res -t
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
ONLINE ONLINE indexserver1
ONLINE ONLINE indexserver2
ONLINE ONLINE indexserver3
ONLINE ONLINE indexserver4
ora.LISTENER.lsnr
ONLINE ONLINE indexserver1
ONLINE ONLINE indexserver2
ONLINE ONLINE indexserver3
ONLINE ONLINE indexserver4
ora.asm
ONLINE ONLINE indexserver1
ONLINE ONLINE indexserver2 Started
ONLINE ONLINE indexserver3
ONLINE ONLINE indexserver4 Started
ora.gsd
OFFLINE OFFLINE indexserver1
OFFLINE OFFLINE indexserver2
OFFLINE OFFLINE indexserver3
OFFLINE OFFLINE indexserver4
ora.net1.network
ONLINE ONLINE indexserver1
ONLINE ONLINE indexserver2
ONLINE ONLINE indexserver3
ONLINE ONLINE indexserver4
ora.ons
ONLINE ONLINE indexserver1
ONLINE ONLINE indexserver2
ONLINE ONLINE indexserver3
ONLINE ONLINE indexserver4
ora.registry.acfs
ONLINE ONLINE indexserver1
ONLINE ONLINE indexserver2
ONLINE ONLINE indexserver3
ONLINE ONLINE indexserver4
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
1 ONLINE ONLINE indexserver1
ora.LISTENER_SCAN2.lsnr
1 ONLINE ONLINE indexserver3
ora.LISTENER_SCAN3.lsnr
1 ONLINE ONLINE indexserver4
ora.cvu
1 ONLINE ONLINE indexserver3
ora.indexserver1.vip
1 ONLINE ONLINE indexserver1
ora.indexserver2.vip
1 ONLINE ONLINE indexserver2
ora.indexserver3.vip
1 ONLINE ONLINE indexserver3
ora.indexserver4.vip
1 ONLINE ONLINE indexserver4
ora.oc4j
1 ONLINE ONLINE indexserver4
ora.scan1.vip
1 ONLINE ONLINE indexserver1
ora.scan2.vip
1 ONLINE ONLINE indexserver3
ora.scan3.vip
1 ONLINE ONLINE indexserver4
ora.wxxrdb.db
1 ONLINE ONLINE indexserver1 Open
2 ONLINE ONLINE indexserver2 Open
3 ONLINE ONLINE indexserver3 Open
一眼望去,密密麻麻,資源多了好多啊!不錯,Oracle Grid 11.2 中資源類型遠比 Oracle Clusterware豐富,目前為止有些資源我們是認識的,很多都不認識,不過沒關(guān)系,后面都會一一介紹到。
但是,可以注意到這些資源似乎被做了某種劃分,注意輸出中有幾條虛線,這就是分類。所以,這些資源被分成了兩類,一類是“Local Resources”,代表在每個節(jié)點上運行的本地資源,另一類是“Cluster Resources”,代表集群范圍的資源。
這么多資源都有 TARGET、STATE、SERVER 幾個屬性。TARGET 是目標狀態(tài),STATE是當前狀態(tài),SERVER是現(xiàn)在跑在哪個機器上。我們注意到這些資源基本上都是ONLINE狀態(tài),只有一個ora.gsd的狀態(tài)是OFFLINE的。這個大家不用擔心,GSD是一個向前(和Oracle 9i RAC)相兼容的一個服務(wù),其實是管理 Oracle 9i RAC 的一個接口而已。如果環(huán)境中沒有 9i 的 RAC數(shù)據(jù)庫,那GSD就什么用都沒有,因此都是OFFLINE的狀態(tài),這是正確的,并不是說部署有問題。
注意,這個命令看到的不是全部資源,還有一些重要的后臺DAEMON沒有羅列出來,如果要查看這些后臺DAEMON,則需要使用以下命令:
[grid@indexserver1 indexserver1]$ crsctl stat res -t -init
--------------------------------------------------------------------------------
NAME TARGET STATE SERVER STATE_DETAILS
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.asm
1 ONLINE ONLINE indexserver1 Started
ora.cluster_interconnect.haip
1 ONLINE ONLINE indexserver1
ora.crf
1 ONLINE ONLINE indexserver1
ora.crsd
1 ONLINE ONLINE indexserver1
ora.cssd
1 ONLINE ONLINE indexserver1
ora.cssdmonitor
1 ONLINE ONLINE indexserver1
ora.ctssd
1 ONLINE ONLINE indexserver1 OBSERVER
ora.diskmon
1 ONLINE ONLINE indexserver1
ora.drivers.acfs
1 ONLINE ONLINE indexserver1
ora.evmd
1 ONLINE ONLINE indexserver1
ora.gipcd
1 ONLINE ONLINE indexserver1
ora.gpnpd
1 ONLINE ONLINE indexserver1
ora.mdnsd
1 ONLINE ONLINE indexserver1
這里有兩項之前已經(jīng)介紹過了,即使用黑體字體的那兩行。ora.cluster_interconnect.haip就是上一章提到的HAIP,ora.ctssd就是之前提到的時間服務(wù)CTSS。
到目前為止,我們已經(jīng)對Oracle Grid 11.2的變化有一定的直觀認識了,它增加了很多的新內(nèi)容。但是,上面看到的兩個列表還不是全部,還有一些重要的進程無法用命令方式來查看。此外,文字形式看起來也不直觀,所謂“一圖抵千言”,圖3-4就是Grid 11.2的組成示意圖。目前看到的也只是其中第3 列(Oracle Clusterware Process)和第5 列(Oracle Clusterware Resources)的內(nèi)容。

圖3-4 Grid 11.2的組成示意圖
這一章的目的就是讓讀者對Grid有個感性認識,而不在于深入難點,讀者可以比較圖3-3和圖3-4,看看差別在哪里。
3.4 Grid,你好嗎
在這一章的最后,我們把檢查集群狀態(tài)的命令做一個整理,通常完成一個新的集群部署工作之后,需要使用以下方法做一個徹底的檢查。同樣,日常工作中也是使用這些命令作為運維活動的開始。
1.集群的名字
每個Grid環(huán)境都需要一個名字,在Grid安裝的第5步(如圖1-9所示)中的Cluster Name輸入的就是這個名字。可以用這個命令獲得這個名字:
[grid@indexserver3 ~]$ cemutlo -n
Indexcluster
2.集群的資源
這個命令之前剛剛用到,包括:
crsctl status res –t
crsctl status res –t –init
3.nodeapps
所謂節(jié)點應(yīng)用(Node Applications)是指那些位于操作系統(tǒng)和RAC實例之間的那些集群元素,縮寫成nodeapps。這些組件包括VIP、ONS Daemon、Network Resource(Grid 11.2中新增的,用來監(jiān)控公有網(wǎng)絡(luò)的)、eONS Daemon、GSD,對節(jié)點應(yīng)用的操作一般是通過srvctl命令完成的,查看的方法就是:
[grid@indexserver2 ~]$ srvctl status nodeapps
VIP indexserver1-vip is enabled
VIP indexserver1-vip is running on node: indexserver1
VIP indexserver2-vip is enabled
VIP indexserver2-vip is running on node: indexserver2
VIP indexserver3-vip is enabled
VIP indexserver3-vip is running on node: indexserver3
VIP indexserver4-vip is enabled
VIP indexserver4-vip is running on node: indexserver4
Network is enabled
Network is running on node: indexserver1
Network is running on node: indexserver2
Network is running on node: indexserver3
Network is running on node: indexserver4
GSD is disabled
GSD is not running on node: indexserver1
GSD is not running on node: indexserver2
GSD is not running on node: indexserver3
GSD is not running on node: indexserver4
ONS is enabled
ONS daemon is running on node: indexserver1
ONS daemon is running on node: indexserver2
ONS daemon is running on node: indexserver3
ONS daemon is running on node: indexserver4
4.SCAN
SCAN是Grid 11.2新出現(xiàn)的資源,SCAN是由SCAN-VIP和SCAN Listener配對組成的,因此檢查時這兩部分都要檢查。
(1)檢查SCAN-IP地址的配置:
[grid@indexserver2 ~]$ srvctl config scan
SCAN name: indexgrid.wxxr.com.cn, Network: 1/192.168.123.0/255.255.255.0/eth0
SCAN VIP name: scan1, IP: /192.168.123.216/192.168.123.216
SCAN VIP name: scan2, IP: /192.168.123.214/192.168.123.214
SCAN VIP name: scan3, IP: /192.168.123.215/192.168.123.215
SCAN-IP一共有3個,分別是192.168.123.214/215/216。
(2)檢查SCAN-IP地址的實際分布方式:
[grid@indexserver2 ~]$ srvctl status scan
SCAN VIP scan1 is enabled
SCAN VIP scan1 is running on node indexserver2
SCAN VIP scan2 is enabled
SCAN VIP scan2 is running on node indexserver3
SCAN VIP scan3 is enabled
SCAN VIP scan3 is running on node indexserver1
(3)檢查SCAN監(jiān)聽情況:
[grid@indexserver2 ~]$ srvctl status scan_listener
SCAN Listener LISTENER_SCAN1 is enabled
SCAN listener LISTENER_SCAN1 is running on node indexserver2
SCAN Listener LISTENER_SCAN2 is enabled
SCAN listener LISTENER_SCAN2 is running on node indexserver3
SCAN Listener LISTENER_SCAN3 is enabled
SCAN listener LISTENER_SCAN3 is running on node indexserver1
5.VIP和監(jiān)聽
每個節(jié)點都會有自己的VIP以及對應(yīng)的監(jiān)聽器,可以這么查看VIP的配置情況:
[grid@indexserver2 ~]$ srvctl config vip -n indexserver1
VIP exists: /indexserver1-vip/192.168.123.210/192.168.123.0/255.255.255.0/eth0, hosting node indexserver1
[grid@indexserver2 ~]$ srvctl config vip -n indexserver2
VIP exists: /indexserver2-vip/192.168.123.211/192.168.123.0/255.255.255.0/eth0, hosting node indexserver2
[grid@indexserver2 ~]$ srvctl config vip -n indexserver3
VIP exists: /indexserver3-vip/192.168.123.212/192.168.123.0/255.255.255.0/eth0, hosting node indexserver3
[grid@indexserver2 ~]$ srvctl config vip -n indexserver4
VIP exists: /indexserver4-vip/192.168.123.213/192.168.123.0/255.255.255.0/eth0, hosting node indexserver4
查看VIP資源當前的狀態(tài)。在前面檢查nodeapps中,已經(jīng)看到了VIP資源的狀況如下:
[grid@indexserver2 ~]$ srvctl status nodeapps
VIP indexserver1-vip is enabled
VIP indexserver1-vip is running on node: indexserver1
VIP indexserver2-vip is enabled
VIP indexserver2-vip is running on node: indexserver2
VIP indexserver3-vip is enabled
VIP indexserver3-vip is running on node: indexserver3
VIP indexserver4-vip is enabled
VIP indexserver4-vip is running on node: indexserver4
也可以用srvctl命令一個一個地查看:
[grid@indexserver2 ~]$ srvctl status vip -n indexserver1
VIP indexserver1-vip is enabled
VIP indexserver1-vip is running on node: indexserver1
[grid@indexserver2 ~]$ srvctl status vip -n indexserver2
VIP indexserver2-vip is enabled
VIP indexserver2-vip is running on node: indexserver2
[grid@indexserver2 ~]$ srvctl status vip -n indexserver3
VIP indexserver3-vip is enabled
VIP indexserver3-vip is running on node: indexserver3
[grid@indexserver2 ~]$ srvctl status vip -n indexserver4
VIP indexserver4-vip is enabled
VIP indexserver4-vip is running on node: indexserver4
和VIP關(guān)系最緊密的就是本地的監(jiān)聽器,我們來檢查監(jiān)聽器配置:
[grid@indexserver2 ~]$ srvctl config listener -a
Name: LISTENER
Network: 1, Owner: grid
Home: <CRS home>
/u01/app/11.2.0/grid on node(s) indexserver4,indexserver3,indexserver2,indexserver1
End points: TCP:1521
檢查監(jiān)聽器狀態(tài):
[grid@indexserver1 grid]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): indexserver2,indexserver3,indexserver4,indexserver1
可見,監(jiān)聽器在所有節(jié)點上都運行。根據(jù)剛才這一頓檢查,我們可以試著把SCAN VIP、SCAN Listener、VIP、Listener的關(guān)系用示意圖總結(jié)出來,如圖3-5所示。

圖3-5 資源的分布
6.ASM資源
最后再對ASM的資源進行一個檢查,在Clusterware時期,ASM是作為一個上層資源存在的,并不是 Clusterware 集群乃至數(shù)據(jù)庫集群(RAC)所必需的,相關(guān)的資源只有一個,那就是ASM實例。
另外,Clusterware時代,ASM是作為Oracle Database的一部分,沒裝Database之前是沒有的。Grid 11.2 中ASM 的地位大大提升了,和Clusterware 結(jié)合為一體,在Grid 部署過程中就用到了。ASM實例和ASM磁盤組的地位也成了Grid集群的必需品,因此ASM實例和ASM磁盤組都是被管理的對象。
對于ASM實例,可以這么檢查:
[grid@indexserver1 grid]$ srvctl status asm -a
ASM is running on indexserver2,indexserver3,indexserver4,indexserver1
ASM is enabled.
對于磁盤組資源,可以這么檢查:
[grid@indexserver1 grid]$ srvctl status diskgroup -g DATA
Disk Group DATA is running on indexserver2,indexserver3,indexserver4,indexserver1
這樣一圈下來,對Grid的檢查就算完成了。你的環(huán)境有問題嗎?
3.5 小結(jié)
通過這一章學(xué)習(xí),我們熟悉了Oracle Grid 中最主要的兩個工具CRSCTL和SRVCTL,復(fù)習(xí)了Oracle Grid的發(fā)展歷史,對Oracle Grid有了感性的認識,并演示了檢查Grid的步驟和方法。接下來我們就要深入研究Grid的組成了。
- 企業(yè)數(shù)字化創(chuàng)新引擎:企業(yè)級PaaS平臺HZERO
- Greenplum:從大數(shù)據(jù)戰(zhàn)略到實現(xiàn)
- Spark快速大數(shù)據(jù)分析(第2版)
- Python數(shù)據(jù)分析入門:從數(shù)據(jù)獲取到可視化
- InfluxDB原理與實戰(zhàn)
- 卷積神經(jīng)網(wǎng)絡(luò)的Python實現(xiàn)
- PySpark大數(shù)據(jù)分析與應(yīng)用
- 深入淺出數(shù)字孿生
- 軟件成本度量國家標準實施指南:理論、方法與實踐
- 云數(shù)據(jù)中心網(wǎng)絡(luò)與SDN:技術(shù)架構(gòu)與實現(xiàn)
- PostgreSQL指南:內(nèi)幕探索
- 深入理解InfluxDB:時序數(shù)據(jù)庫詳解與實踐
- Unity 2018 By Example(Second Edition)
- 數(shù)據(jù)挖掘競賽實戰(zhàn):方法與案例
- SQL Server 2008寶典(第2版)