2000年 7月中旬
广欣电力通信公司 mIS项目的荧光屏在服务器机房里泛着冷光。
机房空调的嗡鸣中,网益公司的技术团队正进行上线前最后一轮压力测试。
广欣公司的曾总监隔着玻璃观察屏,手指在ipaq上快速滑动:“财务系统的报表生成模块必须与 mIS的实时数据同步,下个月税务稽查可不能出岔子。”
网益公司的陈副总推了推眼镜,示意技术经理 Jackson上前。
Jackson调出系统拓扑图,激光笔在投影幕布上划出红线:“mIS就像中枢神经,oA的流程审批调用它的权限数据库,邮件系统的通讯录同步依赖它的员工信息表,call center的客户工单更是直接读取 mIS的产品数据。”
他顿了顿,指向计费模块,“这里用的是 oracle的实时同步机制,每笔交易都会生成日志文件。”
连续三天的暴雨让城市变成了泽国。
我把湿透的衬衫扔在阳台上,灌下整瓶冰啤酒,凉菜在胃里泛出凉意。
爬上床的时候,拿起手机看了一下时间,21:47,眼皮像挂了铅块。
迷迷糊糊中,摩托罗拉 V998的“致爱丽丝”彩铃突然炸响。
我像触电般扑过去,屏幕上跳动的“Jackson”三个字刺得眼睛生疼。
“服务器集群全瘫了!”
电话那头的电流声里混着键盘敲击声,“oA系统打不开审批单,邮件服务器拒收所有邮件,财务的月末结账程序卡在百分之三十七,call center的坐席全报‘数据库连接失败’!”
Jackson的声音劈了叉,“告警短信已经炸了曾总监的手机,他现在就在机房等着!”
我慌乱中穿好衣服,抓起工牌冲下楼,雨刷器在出租车上疯狂摇摆。
车窗外,霓虹灯在积水里碎成彩色的河。
赶到广欣公司时,玻璃门内映出一片忙乱的影子。
Jackson正对着白板画系统关联图,berry把笔记本电脑架在会议桌上,ben手里攥着网线测试仪来回踱步。
“william被堵在珠江大桥了,”Jackson把一沓打印的日志摔在桌上,“从告警时间看,先是 mIS的核心数据库响应延迟,三分钟后 oA的应用服务器报连接超时,接着邮件队列开始堆积,最后整个局域网的数据包丢失率超过百分之四十。”
我翻到网络安全日志那页,瞳孔猛地收缩:“这里有大量来自粤北 Ip段的异常访问,时间集中在晚上十点十五分。”
ben突然拍桌子:“我刚查了网络拓扑,粤北管理站通过 VpN专线直连总部核心交换机!”
他扯过网线图,红笔沿着线路画了个圈,“这条链路没有流量控制!”
berry的手指在键盘上翻飞,屏幕上的 oracle日志不断刷新:“数据库事务日志有大量回滚记录,像是被恶意中断了。”
她突然停下手,“爱虫病毒!日志里有这个特征码,它会篡改邮件附件名,还会删除数据库索引文件!”
Jackson扯开领带,喉结滚动着:“粤北值班室那台管理工作站,肯定有人用它收了带病毒的邮件。”
他抓起电话按下免提,“查粤北管理站昨晚的登录记录,对,就是那台装了数据库客户端的机器!”
雨还在下,会议室的空调发出疲惫的嗡鸣。
凌晨一点,分工终于明确:berry负责从灾备系统恢复数据库索引,她抱着备份磁带跑进机房时,睡裙的下摆扫过满地的网线;
我在服务器机柜间穿梭,给每台主机加装病毒防火墙,汗水顺着额角滴进键盘;
我手指在键盘上敲出病毒特征码检索命令,屏幕瞬间跳出密密麻麻的红色警告。
“不止邮件系统,mIS数据库的后台进程也被感染了。”
我猛地拍向服务器电源开关,机箱嗡鸣骤然低沉,“ben,立刻登录核心交换机,关闭所有与粤北管理站的 VpN隧道接口!”
说着我扯过网线跳线,膝盖顶住机柜边缘开始插拔:“先关 oracle的 tNS监听服务,还有 IIS的 web服务,这些都是病毒传播的通道。”
指尖触到滚烫的服务器外壳,余光瞥见 berry举着备份磁带愣在原地,“把灾备系统的病毒库升级到最新版,恢复前必须全盘扫描!”
ben的指甲在交换机面板上划出白痕:“Gi1\/0\/1到 Gi1\/0\/4接口全关了,总部局域网和粤北链路物理隔离!”
他突然回头,额前碎发滴着汗,“但 call center的终端还在报病毒库过期!”
我摸出 U盘甩过去:“这里有刚从瑞星官网下的离线补丁包,让坐席先断本地连接,手动运行 scan.exe。”
蹲在地上逐台检查终端时,皮鞋后跟被网线缠住,踉跄中带倒了电源插排,机房一半屏幕瞬间黑屏。
“别动!”
我扑过去按住急着合闸的 ben,“先确认 UpS供电稳定,贸然上电会损坏数据库文件!”
凌晨三点的机房里,键盘敲击声此起彼伏。
我对着对讲机喊:“所有终端按 Ip段分组扫描,完成一台就接入隔离区验证,没问题再接入主网。”
撕开应急灯包装时,荧光棒在掌心发出噼啪轻响,“berry,数据库恢复后先跑事务一致性校验,尤其财务模块的总账表,少一条记录都要重导!”
当最后一台终端弹出“扫描完成,未发现威胁”的提示时,天已泛白。
我瘫坐在服务器旁,看着 ben用酒精棉擦拭满是指纹的交换机接口,突然笑出声:“等下让行政部发通知,所有终端必须启用 U盘写保护,邮件附件禁止自动运行。”
说着把染着油污的工牌别回衣领,“还有,每周三强制做全盘病毒扫描,日志直接同步到安全审计系统。”
ben蹲在配线架前,一把扯掉粤北专线的水晶头,用酒精棉反复擦拭接口:“先物理隔离,重建 VpN隧道需要四十分钟。”
“索引重建到百分之六十了!”
berry的声音从机房传来,带着喘息,“但有三个表空间损坏,需要手动修复!”
我隔着玻璃门朝她比划 oK的手势,手里的杀毒软件正弹出“清除成功”的提示。
ben突然跳起来:“隧道通了!总部到粤北的链路恢复正常!”
他甩了甩发麻的手腕,手指显得有些僵硬。
“现在可以启动服务器集群了。”
Jackson把 Sco UNIx系统盘拍在服务器顶端,指尖在灰扑扑的键盘上敲出ps -ef | grep ora_,屏幕瞬间滚过一片红色错误进程。
“集群心跳线断了,”他扯掉衬衫第二颗纽扣,额角汗珠砸在显示器上,“Node1的 oracle监听进程被病毒篡改了配置文件。”
他拽过交叉线把笔记本连到节点控制台,vi $oRAcLE_homE\/network\/admin\/listener.ora命令打开的文件里满是乱码。
“berry,把备份磁带里的 19号监听配置导过来,”他头也不抬地喊,另一只手在键盘上翻飞,“用tar xvf \/dev\/rst0 .\/listener.ora,注意磁带机是 ScSI接口 0号设备。”
ben抱着网线测试仪跑过来时,Jackson正用ipcs -m检查共享内存段:“去测测两个节点的私有网段 10.10.1.0\/24,必须保证 ping响应时间低于 50ms。”
他突然按住回车键,shutdown immediate命令让数据库进程开始优雅关闭,“Node2的\/etc\/init.d\/oracle启动脚本被删了,得从 Node1拷贝一份。”
晨光从机房天窗斜切进来时,Jackson已经调好了集群参数。
他用sysdef命令查看内核配置,铅笔在纸上飞快计算:“把shmmax调到物理内存的一半,semmni设成 30,msgmni改 100,改完用cd \/etc\/conf\/cf.d;.\/link_unix重建内核。”
说着一次性水杯往地上一墩,“berry,用scp把修改好的\/etc\/hosts传到 Node2,确保两个节点主机名解析正确。”
当lsnrctl start命令返回“tNS-00530: protocol adapter error”时,他突然踹了服务器机柜一脚。
“权限问题,”Jackson扯过 berry递来的湿巾擦手,“chown -R oracle:dba $oRAcLE_homE,再chmod 6751 $oRAcLE_homE\/bin\/oracle,Sco的 SUId位必须显式设置。”
最后重启集群服务时,他盯着cmctl status的输出屏住呼吸。
当屏幕跳出“cluster is running in normal mode”,两个节点的实例状态都变成“opEN”时,Jackson突然瘫坐在防静电地板上,抓起水杯喝了一口,对berry说:“测测跨节点查询,select count(*) from scott.emp@node2能返回结果就算成了。”
他望着机柜顶端闪烁的绿灯笑出声,“下次谁再在 Sco上装 oracle 8i集群,我跟他急。”
晨光爬上服务器指示灯时,call center的测试电话终于拨通了。
Jackson盯着监控屏上跳动的绿色数据流,突然笑出声:“曾总监刚发消息,说要给我们申请加班费。”
但没人接话,berry揉着发红的眼睛,ben把剩下的半瓶矿泉水一饮而尽。
我摸出手机看时间,8:01。
合同里“两小时到场,八小时解决”的条款像根针,扎在每个人的神经上。
走出广欣公司时,william终于坐着一辆摩托车冒雨赶来,裤脚滴着水,他举着手机喊:“刚收到消息,粤北那个值班的,居然在工作站上打游戏!”
Jackson望着天边的朝霞,突然说:“明天起,所有管理工作站安装屏幕监控。”
风掀起他的衬衫,露出后背汗湿的印子,“还有,把 VpN专线改成单向访问。”
我把手机铃声调到最大,心想今晚睡觉前,得把充电器插在床头。
请大家记得我们的网站:品书中文(m.pinshuzw.com)人生何处是归途:花城网事三十年更新速度全网最快。