记录一下,2016年的5月5日这天的中午。
正在跟老刘、大亮、Good宁一起吃午饭,突然手机接到短信报警,说是主数据库Down了。出大事了!!!
这个是很常见的场景吧,如何在这种情况下处理服务器故障呢?基本吃饭的时候是不会携带笔记本的,所有的操作只能在手机上完成了。
如果是iphone手机,装上Termius
;如果是android手机,装上Juicessh
。这两个都是远程ssh软件(我们的服务器都是Linux,没有Windows)。另外公司是有openvpn的,必须通过vpn才能连接到IDC的服务器,所以也需要手机装上openvpn软件。
拨通vpn,用ssh连上服务器,然后快速运行实现编写好的ping脚本:
1cat 1.ping.sh
2#!/bin/sh
3ping 172.8.$1
这个脚本很奇怪吧,名字叫做1.ping.sh,是因为在手机上操作,一切都要迅速,Termius和Juicessh都是支持命令补全的{tab}键的,所以只要输入./1{tab} 1.1 就等于执行了ping 172.8.1.1,上面只输入了6个字符,而完整的ping命令则需要输入14个字符,这就是原因了。
ping一下不通,那就赶紧执行脚本,抓一下服务器idrac前面板的信息:
1cat 2.idrac.sh
2#!/bin/sh
3sshpass -p "xxxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm get System.LCD.CurrentDisplay
上面脚本用dell的radadm来抓取服务器idrac的前面板信息,idrac和网卡的网段只是前面第一段不同,网卡是172,idrac是10,这样很方便记忆。
得到结果:
1CPU1 has internal error. (IERR)
彻底完蛋!CPU出错了,想都不用想,硬件重启:
1cat 3.reboot.sh
2#!/bin/sh
3sshpass -p "xxxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm serveraction powercycle
从powercycle到Centos完全启动,系统开始记录/var/log/messages,所有时间共花费了7分钟。
注意:有可能在重启的过程中需要按一下F1的按钮继续,这样就需要打开vnc,按那一下子,或者提前在idrac里设置ErrPrompt disabled,不需要按F1就重启。
1sshpass -p "xxxxxx" ssh -oStrictHostKeyChecking=no root@10.8.$1 racadm set BIOS.MiscSettings.ErrPrompt Disabled
总结:这起故障从接到报警到检查完毕只花费了3分钟,然后重启,7分钟机器系统启动,2分钟oracle备库恢复,3+7+2=12分钟。这真是个极限时间了。
运维能做到的也就这么快了吧。