0x01 前言

在过去的几天里,我有两台虚拟机不断被检测到IO超时。可是最近并没有对这两台虚拟机做出任何修改,服务器也没有增加虚拟机,肯定是哪里有异常导致的。

0x02 软件

在zabbix监控中,web和node2这两台虚拟机的磁盘IO被报告超时,故障时间长达4天。我的邮件也收了好几百封。因为zabbix每10分钟会复检一次,不能排除故障就发邮件。

邮件内容如下:

虚拟机web:

Trigger: Disk I/O is overloaded on web.t.com
Trigger status: PROBLEM
Trigger severity: Warning
Trigger URL: 

Item values:

CPU iowait time (web.t.com:system.cpu.util[,iowait]): 26.9 %

虚拟机node2:

Trigger: Disk I/O is overloaded on node2.t.com
Trigger status: OK
Trigger severity: Warning
Trigger URL: 

Item values:

CPU iowait time (node2.t.com:system.cpu.util[,iowait]): 15.27 %

web这台虚拟机运行着zabbix server和ELK套件,node2仅运行elasticsearch。

这几天我正对我的网站进行渗透测试,生成了将近5GB的日志。根据以往的情况,logstash和elasticsearch的效率很高,但也不至于使得iowait高达25%到50%。

我登录到服务器中查看filebeat的情况,发现filebeat早已将日志文件传输完毕。同时zabbix对数据库的读写也不至于产生那么高的IO。

以下是web这台虚拟机的IO情况:

以下是node2的IO情况:

从图中可以看到,读写速度并没有很高,这居然也能报iowait错误。我觉得这应该不是系统问题导致的,所以我转而从硬件入手。

0x03 硬件

我第一个想到的是硬盘坏了,导致阵列被降速。但是我发现服务器背后的状态灯和前部诊断显示器都是正常的蓝色,以下是idrac中关于磁盘的信息:

以下是阵列控制器的信息:

从上面的信息可以确认硬件一些正常。这时候我又检查服务器硬件日志,在 Lifecycle日志中注意到存储日志中有异常情况:

我注意到这个月的10号,服务器的阵列控制器启动了一个名为Patrol Read的任务,直至14号才结束。而zabbix的警告也是从10号到今天才结束。

0x04 Patrol Read

查询资料后发现,Patrol Read是Dell PowerEdge系列服务器阵列卡的一个功能,会定时巡检磁盘,检查数据。主要是为了校验阵列中的数据,以防出错。

但是在巡检的时候会导致磁盘读写性能下降,对服务器的正常运行影响非常大。我不想这功能自动运行,所以我在idrac中将它设为手动,当我有需要的时候手动运行即可。

进入idrac阵列控制器的属性配置界面:

将“巡检读取模式”选为手动,然后将“应用操作模式”按需选择以便新配置应用到系统中。因为我的服务器不能立即关机,只能等到下次重启时才能应用,因此我选择“下次重新引导时应用”。

点击应用后,这个任务会被添加到系统作业队列中:

点击作业队列即可查看现有的任务队列:

另外,为了日后在有需要的情况下可以手动启动巡检功能,我还需要将“手动巡检模式操作”设为“停止”而不是“禁用”。

0x05 结语

这一次的巡检已经结束,服务器的IO也已经恢复正常。以下是web虚拟机:

Trigger: Disk I/O is overloaded on web.t.com
Trigger status: OK
Trigger severity: Warning
Trigger URL: 

Item values:

CPU iowait time (web.t.com:system.cpu.util[,iowait]): 1.02 %

以下是node2虚拟机:

Trigger: Disk I/O is overloaded on node2.t.com
Trigger status: OK
Trigger severity: Warning
Trigger URL: 

Item values:

CPU iowait time (node2.t.com:system.cpu.util[,iowait]): 0.3 %