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


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

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

圖3-2 Oracle 10.2 Clusterware的進程
CSS服務的進程包括ocssd、oprocd、oclsomon,這3個進程都具有重啟系統的功能。
如果ocssd進程被kill或者掛掉,節點就會重啟。
Oracle 10.2 之后出現了oclsmon 進程,它負責監控ocssd進程的狀態,如果發現問題,也會重啟節點。
在UNIX平臺上,如果沒有使用第三方的集群軟件,會有oprocd進程,Linux的10.2.0.4及以后的版本也有這個進程,這個進程替代之前的hangcheck timer 模塊,其功能和工作方式也與hangcheck timer 模塊一樣,它也可以導致節點的重啟。
CRS 服務的主進程是 crsd,這個進程負責啟動、關閉、監控資源狀態。Oracle 10.2 的Clusterware是通過一個所謂RACG框架來維護資源的,所有ora.*格式的資源都是通過這個框架來維護的。而其他的應用程序要想交給 CRS 維護,必須提供一個符合 Oracle 規范的 action腳本,然后Clusterware就可以通過這個腳本來操作這些程序了。
最后,EVM 服務對應的進程就是 evmd,這個進程還會有幾個輔助進程,比如 evmlogger記錄日志,另一個重要的輔助進程是racgevt,Oracle Clusterware為用戶提供了響應集群事件的機制,用戶可以把自己的腳本放在指定的目錄下,然后當有事件發生時,EVM就會執行racgevt,后者再執行該目錄下的用戶腳本,并把事件名等一堆參數傳給腳本。于是我們就可以對感興趣的事情做出個性化處理,比如發郵件、發短信等。
2.Clusterware的文件
Oracle Clusterware 10.2中用到的文件有3個,分別是OCR、Voting Disk(Voting File)和Control File。
從 OCR 這個文件的名字我們應該能體會到,它對于 Oracle 集群的作用就像注冊表(Registry)對 Windows 操作系統的作用。這是 Oracle 集群的配置文件,數據庫的、集群的配置信息都在這里,比如集群的節點列表、集群數據庫實例和節點對應關系、CRS應用程序資源profile位置等。
另一個文件是Voting Disk(其他的叫法還有Voting File、表決磁盤、投票磁盤,指的都是同一個文件),它是用來管理節點的成員身份的。Voting Disk也是Oracle Clusterware中重要通信渠道,集群有兩個心跳機制,一個是通過私有網絡的網絡心跳,另一個就是通過Voting Disk的磁盤心跳。當網絡心跳丟失時,集群會通過Voting Disk解決腦裂風暴。
不管是Oracle Clusterware 10.2還是Grid 11.2都有控制文件,這些文件控制一些重要進程的啟用、停用,進而控制重要的集群功能。比如是否啟動oprocd進程。在Linux、AIX系統中這些文件的位置在/etc/oracle/scls_scr/<nodename>/root目錄下,而Sun是在/var/opt/oracle/scls_scr/<nodename>/root目錄下,不同的版本中這個目錄下文件的個數有些區別。
這是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
有grid、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
這些文件的內容一般都是 enable、disable、restart 這樣的字符串,進而控制同名進程的啟停。這些文件內容是由集群自動維護的。比如init.cssd或者crsctl工具,所以我們不要試圖手工去改變這些文件,知道就好了。
3.Clusterware的啟動
Oracle Clusterware是利用操作系統級的init腳本啟動的,Clusterware部署完成后,/etc/inittab中就會被加上下面的內容:
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的核心內容,接下來使用本章開頭介紹的工具來對它進行剖析,以便從操作系統層面來看看它到底都有些什么。
首先使用以下命令檢查集群的運行狀態:
[oracle@center-rac2 admin]$crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy
該命令用來檢查上面提到的三大基本服務,上面的結果顯示集群的狀態是正常的。
再看一看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環境的示意圖。

圖3-3 Clusterware 10.2的組成示意圖
說明:這一部分內容是對Oracle 10.2 RAC 的概要結論,因此這里不展開說明。
3.3 Grid中都有些什么
Oracle Grid 是在 Oracle Clusterware 基礎上發展過來的,Oracle Grid 又分成了 11.1 和11.2 兩個版本,11.1 這個版本基本上是 Clusterware 10.2 的延續,形式和內容上都沒有什么變化。
而Oracle Grid 11.2和Oracle Clusterware或者Oracle Grid 11.1比起來,形式和內容上都有重大的更改,初次接觸容易產生面目全非的錯覺。甚至會有之前積累的知識“都白學了”的感覺。不過,隨著研究的不斷深入,就會發現,Oracle Grid 的變化不是顛覆性的,所有 Oracle Clusterware的內容都在。
打個比方,Oracle Clusterware 就像是個“毛坯房”,三大功能往那一戳,像三根棍子似的頂著 RAC 數據庫。一眼就看到底了,不嫵媚、不深邃、不復雜。得裝修,精裝修后,于是就有了Grid。
Grid 和 Clusterware 比起來,無論門面、內飾、細節上都做得更精細,所以會讓我們有不認識的錯覺,其實扒開來看看房子還是框架結構的,不過確實更好用,也更唬人了。
接下來,使用本章開始介紹的兩個工具來看看Grid 11.2到底長成什么樣,用類似的命令查看同樣的信息,不過命令的語法、輸出的格式這些細節會有些變化,格式上的變化并不是重點,重點要關注內容上的變化。最后,我們還要給出Grid 11.2的組成示意圖。
1.集群棧狀態
檢查集群狀態還是用crsctl命令,也還是用check動作,不過后面的參數不一樣了,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把所有節點上的信息都顯示出來,可以看到,在Grid 11.2中,基本服務仍然是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豐富,目前為止有些資源我們是認識的,很多都不認識,不過沒關系,后面都會一一介紹到。
但是,可以注意到這些資源似乎被做了某種劃分,注意輸出中有幾條虛線,這就是分類。所以,這些資源被分成了兩類,一類是“Local Resources”,代表在每個節點上運行的本地資源,另一類是“Cluster Resources”,代表集群范圍的資源。
這么多資源都有 TARGET、STATE、SERVER 幾個屬性。TARGET 是目標狀態,STATE是當前狀態,SERVER是現在跑在哪個機器上。我們注意到這些資源基本上都是ONLINE狀態,只有一個ora.gsd的狀態是OFFLINE的。這個大家不用擔心,GSD是一個向前(和Oracle 9i RAC)相兼容的一個服務,其實是管理 Oracle 9i RAC 的一個接口而已。如果環境中沒有 9i 的 RAC數據庫,那GSD就什么用都沒有,因此都是OFFLINE的狀態,這是正確的,并不是說部署有問題。
注意,這個命令看到的不是全部資源,還有一些重要的后臺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
這里有兩項之前已經介紹過了,即使用黑體字體的那兩行。ora.cluster_interconnect.haip就是上一章提到的HAIP,ora.ctssd就是之前提到的時間服務CTSS。
到目前為止,我們已經對Oracle Grid 11.2的變化有一定的直觀認識了,它增加了很多的新內容。但是,上面看到的兩個列表還不是全部,還有一些重要的進程無法用命令方式來查看。此外,文字形式看起來也不直觀,所謂“一圖抵千言”,圖3-4就是Grid 11.2的組成示意圖。目前看到的也只是其中第3 列(Oracle Clusterware Process)和第5 列(Oracle Clusterware Resources)的內容。

圖3-4 Grid 11.2的組成示意圖
這一章的目的就是讓讀者對Grid有個感性認識,而不在于深入難點,讀者可以比較圖3-3和圖3-4,看看差別在哪里。
3.4 Grid,你好嗎
在這一章的最后,我們把檢查集群狀態的命令做一個整理,通常完成一個新的集群部署工作之后,需要使用以下方法做一個徹底的檢查。同樣,日常工作中也是使用這些命令作為運維活動的開始。
1.集群的名字
每個Grid環境都需要一個名字,在Grid安裝的第5步(如圖1-9所示)中的Cluster Name輸入的就是這個名字。可以用這個命令獲得這個名字:
[grid@indexserver3 ~]$ cemutlo -n
Indexcluster
2.集群的資源
這個命令之前剛剛用到,包括:
crsctl status res –t
crsctl status res –t –init
3.nodeapps
所謂節點應用(Node Applications)是指那些位于操作系統和RAC實例之間的那些集群元素,縮寫成nodeapps。這些組件包括VIP、ONS Daemon、Network Resource(Grid 11.2中新增的,用來監控公有網絡的)、eONS Daemon、GSD,對節點應用的操作一般是通過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新出現的資源,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監聽情況:
[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和監聽
每個節點都會有自己的VIP以及對應的監聽器,可以這么查看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資源當前的狀態。在前面檢查nodeapps中,已經看到了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關系最緊密的就是本地的監聽器,我們來檢查監聽器配置:
[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
檢查監聽器狀態:
[grid@indexserver1 grid]$ srvctl status listener
Listener LISTENER is enabled
Listener LISTENER is running on node(s): indexserver2,indexserver3,indexserver4,indexserver1
可見,監聽器在所有節點上都運行。根據剛才這一頓檢查,我們可以試著把SCAN VIP、SCAN Listener、VIP、Listener的關系用示意圖總結出來,如圖3-5所示。

圖3-5 資源的分布
6.ASM資源
最后再對ASM的資源進行一個檢查,在Clusterware時期,ASM是作為一個上層資源存在的,并不是 Clusterware 集群乃至數據庫集群(RAC)所必需的,相關的資源只有一個,那就是ASM實例。
另外,Clusterware時代,ASM是作為Oracle Database的一部分,沒裝Database之前是沒有的。Grid 11.2 中ASM 的地位大大提升了,和Clusterware 結合為一體,在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的檢查就算完成了。你的環境有問題嗎?
3.5 小結
通過這一章學習,我們熟悉了Oracle Grid 中最主要的兩個工具CRSCTL和SRVCTL,復習了Oracle Grid的發展歷史,對Oracle Grid有了感性的認識,并演示了檢查Grid的步驟和方法。接下來我們就要深入研究Grid的組成了。