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来现场更换阵列卡的工程师,在更换之前也检查了原来的阵列卡,说阵列卡没问题。但我们相信自己的坚持,对于硬件问题,如果问题是某个硬件引起的,一定要更换;对于软件问题,如果问题是某段代码引起的,一定要找出是哪一行;对于人的问题,如果心已变,再多的挽留也是多余。