2012 年 10 月 14 日早上,網站突然不能正常訪問。上Web服務器一看,顯示數據庫連接超時;上數據庫服務器一看,SQL Server所有的服務都停止運行,手動啟動也啟動不了。於是,重啟庫服務器。。。汗,竟然沒啟動起來。立即致電機房,讓機房工作人員關機重啟,還是沒啟動起來。。。這時已經是大“汗”淋漓了。讓機房工作人員接上顯示器一看,BIOS引導時出現錯誤。。。瘋掉了,難道服務器硬件出問題了?
這時,理智發出友情提醒:不管遇到什么樣的問題,一定要冷靜。如果服務器硬件真的壞了,后果會怎樣?如果是壞了1塊硬盤,換了上1塊硬盤就行(RAID5);如果是其他硬件壞了,同樣換一下就行(我們用的是Dell服務器,致電Dell,2小時左右就會有Dell工程師過來換)。最糟糕的情況是什么?RAID上同時壞掉2塊硬盤,如果是這樣,有四處的備份數據可以恢復(這台服務器的獨立備份硬盤中,另外三台服務器中),而且壞掉的硬盤可以找數據恢復公司進行恢復。只是恢復需要花費更長的時間。這樣冷靜想過之后,內心就平靜了一些。
接下來,沒什么好想的,直奔機房(機房在外地,奔過去花了一些時間)。到機房一看,陣列上的硬盤都亮着綠燈,心里一塊石頭落地,存放數據的硬盤都沒問題。有一塊不在陣列上的硬盤閃着黃燈。BIOS引導時出現錯誤,並停在了出錯的地方,錯誤的信息是:
Foreign configuration(s) found on adapter Press any key to continue or 'C' load the configuration utility, or 'F' to import foreign configuration(s) and continue.
There are offline or missing Virtual drives with preserved cache. Please check the cables and ensure that all drives are present. Press any key to enter the configuration utility.
看來是陣列卡出問題了。(注:陣列卡壞了,不會造成任何數據丟失,RAID信息都存儲在硬盤中,換一塊陣列卡重新從硬盤中導入RAID信息即可,或者將硬盤安裝到同樣配置的服務器中)
立即致電Dell工程師,反饋故障情況,根據他的指示,先把每塊硬盤拔/插一下,並把那塊不在陣列上的硬盤拔掉,啟動后,第一條錯誤信息消失,只剩下一個錯誤,還是無法啟動:
There are offline or missing Virtual drives with preserved cache. Please check the cables and ensure that all drives are present. Press any key to enter the configuration utility.
看來,第一個錯誤是不在陣列上的硬盤引起的。
然后按任意鍵進入陣列卡的配置程序,所有陣列信息都正常,Dell工程師說陣列卡沒問題。陣列卡沒問題,硬盤也沒問題,但事實就是有問題 —— 一個奇特的問題。
繼續根據Dell工程師的指示,拔/插了一下陣列卡,防止陣列卡接口有松動、接觸不好,但沒有效果,問題仍舊。
。。。
折騰了一段時間后,Dell工程師對這個故障的結論:陣列卡沒有壞,問題可能是因為陣列卡找不到可以引導的虛擬磁盤(硬盤陣列構成的就是一個虛擬磁盤),需要先將陣列中的硬盤安裝到另外一台同樣配置的Dell服務器上,導出數據,然后安裝回這台服務器重建虛擬磁盤。
我們不認同,我們認為:硬盤沒有問題,錯誤信息來自陣列卡,啟動也停留在陣列卡引導過程中,按F2連CMOS都無法進入。問題肯定與陣列卡有關,即使重建虛擬磁盤能解決問題,也不能保證這塊陣列卡以后不出問題;假如重建虛擬磁盤不能解決問題,為此所作的工作會白費,浪費很多時間。我們用Dell服務器這么多年,第一次遇到這樣的問題,出現這個問題,肯定有它的原因,現在不管從哪個角度考慮,陣列卡是最大的嫌疑,必須要換陣列卡。
Dell工程師仍然堅持,在不能確認硬件的確有故障的情況下,Dell公司是不會提供硬件更換服務的。。。這個溝通過程費了一番周折,我們始終堅持必須要換陣列卡。最后,我們說如果Dell公司認為這不屬於保修范圍,那我們付費請Dell工程師過來更換。在我們的堅持下,出現了轉機,Dell工程師同意安排工程師上門更換。
在等待的過程中,我們也准備了第二套恢復方案,以應對換陣列卡不能解決問題的情況。
等了一個半小時左右,Dell工程師上門了,更換了陳列卡。第一次啟動竟然出現同樣的錯誤,崩潰得就差撞服務器;然后進入陣列卡配置程序設置了一下,雖然沒有啟動成功,但錯誤信息不一樣了,當時預感到勝利在望;接着,將另外一塊不在陣列上的硬盤插上去,並在陣列卡配置程序中從硬盤導入所有的陣列信息(對於那塊不在陣列上的硬盤,Dell服務器會當作RAID0處理)。重新啟動后。。。幸福來臨了,那種興奮的感覺無法用語言去表達,興奮得就差抱服務器。
寫這篇文章,也許會面臨很多指責。為什么不進行雙機熱備?出現問題后為什么不先用另外的服務器把網站恢復起來?。。。在這里也不想作更多解釋,很多簡單的問題放在特定的場景下會變得不簡單。就比如我們學習設計模式,如果不能深刻體會設計模式所解決的問題的實際場景,就不深刻理解到它的妙處。寫出來,代表我們能正確面對這個問題,並且有信心從根本上解決這個問題。雙機熱備是必然的選擇,老趙說“如果要避免單點,就得至少再配備一台服務器,那成本就要增加100%。”,如果從總體成本上考慮,會是原來的3倍左右。
Dell來現場更換陣列卡的工程師,在更換之前也檢查了原來的陣列卡,說陣列卡沒問題。但我們相信自己的堅持,對於硬件問題,如果問題是某個硬件引起的,一定要更換;對於軟件問題,如果問題是某段代碼引起的,一定要找出是哪一行;對於人的問題,如果心已變,再多的挽留也是多余。