记生产服务器频繁死机重大事故

硬件环境
曙光天阔I620
Vmware ESXI 6.5
虚机机操作系统:centos 6.9
raid 5

问题现象:
系统陆续出现断续无法访问的现象;nginx虚机、mysql虚机阶段性频繁宕机;无Dump日志,kernel日志无异常, message无错误信息;

问题排查过程
最开始我们怀疑是因为软件程序的问题,所以最先查看了linux系统日志,可是日志中并没有留下任何蛛丝马迹。

然后我们又分析了nginx的access日志和error日志同样一无所获,之后根据访问量打印出了top url,收集宕机之前的最后几次请求进行比对,同样没有任何线索。宕机是没有规律且随机发生的事件。

考虑到业务量问题,我们紧接着对nginx所在虚拟机进行了内核优化,包括tcp等参数的调整,期望从这上面找到答案,并且从官方获取到系统镜像的md5进行校验,然而宕机依旧发生,并且发生的时间都是访问的高峰时期或者在磁盘负载很大的时候。主备机制虽然生效了,但是主机宕掉备机宕,为了保证系统正常运行,我们只能是靠人肉运维来支持。
现在已经排除了由服务或者系统引起的宕机,只能从宿主机和硬件设备上找原因了。由于客户的Vmware技术支持服务已经到期,无法取得官方,只能通过网上搜索或者查看官方资料来排查问题了。
所幸vmware是基于linux内核编写的,为排查降低了一定的难度,但是我们对vmware没有任何经验,也只能是摸着石头过河。
为了对系统运行情况有更全面的检测,我们对Vmware ESX服务器系统软件日志进行了深入的分析。经分析我们在“vmkernel.log”文件中发现下列情况,磁盘阵列子系统系统响应不稳定。

? 如下图,磁盘阵列子系统延迟响应时间在9044到1671965微秒之间徘徊(根据经验磁盘平均响应时间一般在30-40毫秒之间),最大延迟达到1.7秒:

? 根据VMware官网相关资料介绍,出现响应延迟的主要原因有4种:A,硬件被改变了;B,磁盘介质有错误;C,出现高负载;D,容错机制生效。在我们的环境下,唯一的可能性是B,即磁盘介质有错误或C,即由于某个磁盘介质出错引起阵列中的容错磁盘进行代偿的容错机制;
https://kb.vmware.com/s/article/2007236?language=en_US

? 为了证实我们的判断,我们有针对系统对磁盘阵列子系统的请求情况进行进一步排查,磁盘阵列子系统("naa.600112f6300064380000004703f9c01f"即本机的磁盘阵列子系统)的请求出现1082次失败。


其中:磁盘阵列子系统返回H:0x2或D:0x2表示RAID卡或磁盘子系统没有准备好,出现没有准备好的原因可能有两种:A,此时磁盘负荷较重;B,磁盘介质有错误。

经过对上述排查资料进行综合分析,我们得出如下初步结论:
磁盘阵列子系统工作不稳定可能是造成近期系统间断无法访问的主要原因;
紧接着我们将如上结论反馈至服务器供应商,联系到供应商后答复为可能是raid卡驱动对vmware不兼容造成的故障,新版本已经修复该问题。经过一系列的协商,我们在约定的时间停掉生产系统对raid卡驱动按照供应商的要求进行了一次升级。
第二天,我们将系统从新上线,当看到网页出现时候我们充满着澎湃和期望。
当系统稳定运行了几天之后,本以为皆大欢喜我们终于解决了该问题,系统有一次宕机了。。。

我们又回到了原点,没有线索没有思绪,我们向供应商反馈可能硬件存在问题,但是由于种种原因供应商并不接受和承认我们的说法。
于是我们不得不从新分析vmwere日志,在这之间我们向客户请求购买官方技术支持或者更换戴尔服务器,客户都以预算为由拒绝了。

紧接着又是一系列的压力和排查!!!

我们怀疑过内存负载过大导致的该问题,于是将生产数台虚机迁移到客户测试环境上,由内存64G已使用60G降到已使用45G进行观察,故障依旧。。。。

这时候我们突然想到,虚拟机是由kvm的qcow2镜像转至成vmdk镜像的,会不会和这有关,于是我们开始对虚机的加载日志进行分析。
在这之中我们发现了一个诡异的信息

虚拟机磁盘的接口定义为“ide“,而不是VMwareESX上定义的“SCSI“接口,即接口定义不匹配。
原因是由于所有虚拟机磁盘文件都是从公司内部的KVM虚拟机文件移植过来,在创建虚机的时候选择了默认的接口格式ide。
根据官方资料,ESXI 6.5版本并不支持IDE模式的接口,我们仿佛找到了突破口,紧接着我们网上搜索资料进行修改
http://blog.sina.com.cn/s/blog_7120c0be0101exol.html
根据上面链接的教程,我们对虚机进行了修改并且经过测试,该修改对虚机无影响,于是我们在夜里对生产虚机进行了修改。
事与愿违,希望越大失望越大。经过一周的测试,故障依旧。。。

最终的解决办法:

幸运的是,虚拟机宕机后有很大的几率会马上重新启动起来,nginx我们用keepalived做了高可用,并且通过脚本和zabbix进行监控和故障转移。即使宕机,对生产并没有很直观的影响。数据库虚机也会重启,但是从来都是在夜里,因为夜里做大量的数据处理。

最终总结:

到目前为止该故障还会偶尔的出现,我们并没有找到根本原因,其他服务的机器也会宕机(所有服务器都有负载均衡或者高可用),但是不如nginx和mysql频繁。
我们最终怀疑的两个方向:1,硬盘问题 2,镜像转制问题
但是如上的怀疑也是猜测,我们无法找到有力的证据证明,并且也没有权利要求更换硬件。

最最终总结:
我们在切换虚机硬盘接口格式的时候,由于快照问题,又发生了重大的生产事故,一系列的小偏差导致了最终的结果“重要生产数据丢失”。不过最终我们拯救了回来,这件事也是我运维生涯中的一次大事记了。这个故事我将会写在另外的文章里。
rc.local在某些特殊情况下并不靠谱不靠谱不靠谱,重要的事情说三遍,在未知原因宕机的时候,我们发现rc.local中的命令并没有被执行,但是在正常启动或者重启的时候又可以正常执行里面的启动命令。最终我们将服务都修改为用chkconfig来管理。

原文地址:http://blog.51cto.com/eisen/2130366

时间: 2024-08-29 04:39:35

记生产服务器频繁死机重大事故的相关文章

优化Linux生产服务器的经验之谈

[51CTO独家特稿]如何优化自己的Linux生产服务器?本文结合实际的工作经验,总结了优化Linux生产服务器的九大要点.如果有些方法您尚未采用,不妨一试. 一.时间同步 生产环境下的服务器对时间的要求是精准的,我的邮件服务器的dovecot服务,以前经常因为时间问题自动停止服务,建议编辑 vim /etc/crontab 至今每天跟ntp时间服务器自动对时一次: 14 04 * * * root /usr/sbin/ntpdate ntp.api.bz > /dev/null 2>&

盘点2018年化工行业大事故!回顾那些令人心痛的瞬间......

作者:流程工业 2018年事故不断发生,损失不可不谓之惨重.从山东枣庄市爆炸事故造成9人死亡到四川宜宾化工厂燃烧造成19人伤亡,这些数字透漏出来严重的安全问题,企业到底该如何搞好化工安全?安全人该如何履行好职责?接下来,跟随流程程一起回顾2018年13起较大化工事故心痛瞬间! 1.新疆吐鲁番恒泽煤化公司"1?24"闪爆 2018年1月24日,新疆吐鲁番市恒泽煤化有限公司在对改质沥青高位槽油气回收管道进行检维修作业时发生闪爆,造成3人死亡.1人重伤,事故教训深刻,影响严重.事故具体起因尚

生产服务器环境最小化安装后 Centos 6.5优化配置备忘

本文 centos 6.5 优化 的项有18处: 1.centos6.5最小化安装后启动网卡 2.解决SSH远程链接访问慢优化 3.更新系统源并且升级系统 4.系统时间更新和设定定时任 5.修改ip地址.网关.主机名.DNS 6.关闭selinux,清空iptables 7.创建普通用户并进行sudo授权管理 8.修改SSH端口号和屏蔽root账号远程登陆 9.锁定关键文件系统(禁止非授权用户获得权限) 10.精简开机自启动服务 11.调整系统文件描述符大小 12.设置系统字符集 13.清理登陆

Linux服务器挂死案例分析

问题现象: 在linux服务器上运行一个指定的脚本时,就会出现无数个相同进程的,而且不停的产生,杀也杀不掉,最后系统就陷入死循环,无法登陆,只能人工去按机器的电源键才可以.这够崩溃的吧? 问题分析过程: 在分析过程中发现这个特定的脚本有些特别,和系统中已有的命令的名字是相同的. 以free命令为例: 这个脚本名字就叫做free(后面没有带.sh),而且这个脚本文件里又去调用了free命令. 这个脚本的本意应该是要去调用free命令来完成一个任务. 那是否就是因为这样就会导致问题呢? 其实光这样是

服务器老是死机,重启后就可以了。。已解决

服务器没过多久又死机了,重启后又可以,开始以为是软件的问题,重装了干净的系统,结果没多久还是出现这个问题,在安装系统的时候非常缓慢,排除了软件问题,应该是硬件有问题了,内存.CPU经过替换法排查都没有问题,想到安装系统的时候非常缓慢,怀疑是硬盘有问题,下载了硬盘检测软件,结果一看,居然很多坏道,马上了一个新硬盘,后面再也没出现这种情况. 分析原因:硬盘有坏道,当系统读取到坏道的时候卡机或死机. 服务器老是死机,重启后就可以了..已解决,布布扣,bubuko.com

Linux生产服务器Shell脚本分享

Linux生产服务器Shell脚本分享 2012-6-6 86市场网 linux 作为一名Linux/unix系统管理员,我经常遇到人问这个问题:shell能做什么?PHP这么强大,为什么不用PHP来完成工作呢?其实相对于PHP这些开发语言而言,shell主要用于数据库备份(SVN备份).计划任务(crontab).服务状态监控.FTP远程备份等.对于这些任务,shell的强大是大家都公认的,这也是每一个Linux/unix系统管理员的基本之一.现在在Windows 2008里也出现了Power

将 Django 应用程序部署到生产服务器

原文出自: http://www.ibm.com/developerworks/cn/opensource/os-django/ 比较有启发性质的一篇文章,会避免很多弯路 Django 是一个基于 Python 的开源 Web 应用程序框架,其目的是使创建数据库驱动的 Web 站点和 Web 应用程序更加容易.开发 Django 应用程序很简单,因为该框架包含了一个开发 Web 服务器.但是这个框架不适合在生产环境中使用,因此需要进一步将 Django 应用程序部署到 Web.在本文中,您将了解

升级生产服务器运行环境来发布网站

生产服务器运行环境: 操作系统:Windows Server 2008 Web服务器:IIS 7.0 任务:发部ASP.NETT程序 准备工作: 该发布程序是在.net 4.0的开发环境运行,但我们的服务器是.net 2.0的运行环境 在发布该程序之前,必须要安装.net4.0环境,并配置好IIS7.0环境 操作步骤: 1.下载.net 4.0安装: https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=17718 2.发布程

郑州铁路局管段发生铁路交通较大事故

12月10日9时42分,郑州局京广线X103次特快货物班列(SS--0045号机车,北京机务段配属并值乘)运行至安阳站客场至运转场下行线K491+200处,撞死6名电务作业人员,2名职工4名民工,根据<铁路交通事故调查处理规则>第十条规定,构成铁路交通较大事故. 据调查,造成这起事故的直接原因是来车预报信息联控不畅,现场安全防护失效所致.一是现场防护员没有尽到防护责任.现场作业期间没有执行3至5分钟主动呼叫制度,也没有认真瞭望,没有发现列车接近并组织人员下道.二是室内外防护员列车预报信息沟通不