【故障處理】多陣列掛接使裝置名稱混亂導致RAC無法啟動問題

secooler發表於2010-08-30
今天遭遇RAC資料庫伺服器由於主機硬體問題導致重啟,但伺服器重啟之後RAC資料庫無法啟動。
經分析,導致RAC任何一個節點都無法啟動的原因是無法找到ocr導致crs無法正常提供服務。那因何ocr無故消失?

1.以下是採集到的相關故障日誌
1)例項日誌資訊
Sun Aug 29 15:22:19 2010
Error: KGXGN aborts the instance (6)
Sun Aug 29 15:22:19 2010
Errors in file /oracle/app/oracle/admin/secrac/bdump/secrac2_lmon_21008.trc:
ORA-29702: error occurred in Cluster Group Service operation
LMON: terminating instance due to error 29702


2)ASM日誌資訊
ri Jul  9 13:05:10 2010
 LMS 0: 5446 GCS shadows traversed, 0 replayed
Fri Jul  9 13:05:10 2010
 Submitted all GCS remote-cache requests
 Post SMON to start 1st pass IR
 Fix write in gcs resources
Reconfiguration complete
Sun Aug 29 15:22:19 2010
Error: KGXGN aborts the instance (6)
Sun Aug 29 15:22:19 2010
Errors in file /oracle/app/oracle/admin/+ASM/bdump/+asm2_lmon_20702.trc:
ORA-29702: error occurred in Cluster Group Service operation
LMON: terminating instance due to error 29702


3)crs日誌資訊
cat /oracle/crs/oracle/product/10.2.0/crs/log/secrac2/alertsecrac2.log
2009-05-01 16:05:45.637
[crsd(5597)]CRS-1201:CRSD started on node secrac2.
2009-05-01 16:06:55.369
[cssd(6171)]CRS-1601:CSSD Reconfiguration complete. Active nodes are secrac1 secrac2 .
2010-08-29 15:21:37.028
[cssd(6171)]CRS-1606:CSSD Insufficient voting files available [0 of 1]. Details in /oracle/crs/oracle/product/10.2.0/crs/log/secrac2/cssd/ocssd.log.

4)ocssd.log日誌資訊內容
cat /oracle/crs/oracle/product/10.2.0/crs/log/secrac2/cssd/ocssd.log

[    CSSD]2010-08-29 15:21:37.118 [1126189376] >TRACE:   0x0x15a59c00 00 00 00                -                         ...
[    CSSD]2010-08-29 15:21:37.118 [1126189376] >TRACE:   clssscctx->nmctx->nmnode[002]->nodeData:  dump of 0x0x15dfe510, len 61
[    CSSD]2010-08-29 15:21:37.118 [1126189376] >TRACE:   0x0x15dfe510 28 41 44 44 52 45 53 53 - 3d 28 50 52 4f 54 4f 43 (ADDRESS=(PROTOC
[    CSSD]2010-08-29 15:21:37.118 [1126189376] >TRACE:   0x0x15dfe520 4f 4c 3d 74 63 70 29 28 - 44 45 56 3d 31 38 29 28 L=tcp)(DEV=18)(
[    CSSD]2010-08-29 15:21:37.118 [1126189376] >TRACE:   0x0x15dfe530 48 4f 53 54 3d 31 30 2e - 31 30 2e 31 30 2e 32 29 HOST=10.10.10.8)
[    CSSD]2010-08-29 15:21:37.119 [1126189376] >TRACE:   0x0x15dfe540 28 50 4f 52 54 3d 32 31 - 31 34 38 29 29          (PORT=21148))
[    CSSD]2010-08-29 15:21:37.119 [1126189376] >TRACE:   clssscctx->nmctx->nmnode[002]->con:  dump of 0x(nil), len 168
[    CSSD]--- DUMP GROCK STATE DB ---
[    CSSD]----------
[    CSSD]  type 2, Id 3, Name = (crs_version)
[    CSSD]  flags: 0x0
[    CSSD]  grant: count=0, type 0, wait 0
[    CSSD]  Member Count =2, master 0
[    CSSD]   . . . . .
[    CSSD]     memberNo =0, seq 0
[    CSSD]     flags = 0x0, granted 0


這些日誌沒有明顯的說明故障原因。

2.繼續挖掘問題原因
因為系統的crs無法啟動,而且在關閉crs的過程中提示無法定位ocr檔案。在檢查裸裝置資訊的時候驚奇的發現ocr對應的raw1裝置不翼而飛。
secrac1@secrac1 /home/oracle$ ls -l /dev/raw/*
crw------- 1 oracle oinstall 162, 2 08-29 10:14 /dev/raw/raw2
crw------- 1 oracle oinstall 162, 3 08-29 11:48 /dev/raw/raw3
crw------- 1 oracle oinstall 162, 4 08-29 10:14 /dev/raw/raw4
crw------- 1 oracle oinstall 162, 5 08-29 11:48 /dev/raw/raw5

3.問題原因浮出水面
在發現raw1不見之後,進而使用fdisk檢視系統磁碟資訊。此時,系統識別到的儲存裝置是從sdb開始編號的,原來的sda被其他裝置搶佔。因為Redhat 5.1作業系統下部署的RAC,裸裝置是透過/etc/udev/rules.d/60-raw.rules檔案進行指定的,因此sda的消失直接導致的結果就是raw1裸裝置不可用,進而ocr資料無法訪問,資料庫當然無論從哪一個節點啟動都無法成功。
# cat /etc/udev/rules.d/60-raw.rules
ACTION=="add", KERNEL=="/dev/sda1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="1", RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", KERNEL=="/dev/sdb1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="17", RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", KERNEL=="/dev/sdc1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="33", RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", KERNEL=="/dev/sdd1", RUN+="/bin/raw /dev/raw/raw4 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="49", RUN+="/bin/raw /dev/raw/raw4 %M %m"
ACTION=="add", KERNEL=="/dev/sde1", RUN+="/bin/raw /dev/raw/raw5 %N"
ACTION=="add", ENV{MAJOR}=="8", ENV{MINOR}=="34", RUN+="/bin/raw /dev/raw/raw5 %M %m"
KERNEL=="raw1", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw2", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw3", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw4", WNER="oracle", GROUP="oinstall", MODE="0600"
KERNEL=="raw5", WNER="oracle", GROUP="oinstall", MODE="0600"


4.導致裝置名稱混亂的原因
與RAC資料庫伺服器掛載的光纖交換機上存在兩套儲存裝置,就是那套與資料庫無關的儲存裝置導致這起故障的發生。
裝置名稱的識別過程是在作業系統啟動過程中自動完成的,這個應該與Redhat系統kernal有關。

5.小結
從這個案例中總結的的經驗和教訓:
1)有效的備份重於一切,有“備”無患,恢復只是時間的問題;
2)收到故障報警時需要第一時間介入排查;
3)一套有效可行的DRP會錦上添花。

Good luck.

secooler
10.08.30

-- The End --

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

相關文章