硬件故障坑死人(一)

背景

因为公司提供的产品不单单是软件形式提供,还对应的提供一体机形式(服务器 & 相应软件)。正式工作2年多也接触到了一些硬件的坑,特此总结。

磁盘

因为公司主要提供的产品是分布式存储和虚拟化相关产品,最直接的影响也是产生范围最大的影响就是磁盘了,会直接导致存储出现单副本等问题,从而产生数据恢复,影响集群稳定性。

固件版本

数据中心级别磁盘,相比于性能的要求,稳定性才是重中之重。大部分厂商的磁盘均支持 S.M.A.R.T. 规范,也就是“Self-Monitoring Analysis and Reporting Technology”,即“自我监测、分析及报告技术”,是一种自动的硬盘状态检测与预警系统和规范。我们可以通过相应命令比如 smartctl 直接获取磁盘相应信息,或者对磁盘进行检测。

S.M.A.R.T. 存在两个问题:

  1. 大部分厂商支持,意味着一部分厂商不支持
  2. 不同厂商对于自家磁盘的关键字定义不同

针对上述两个问题,我们只能说做到尽量多的测试踩坑,防止出现意外情况。

介绍了 S.M.A.R.T. ,我们来看看这节标题,固件。磁盘固件版本可以通过 smartctl 或者 sg_utils 工具获取:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@node 07:47:14 ~]$smartctl -i /dev/sdc
smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-693.11.6.el7.smartx.1.x86_64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Model Family: Intel 730 and DC S35x0/3610/3700 Series SSDs
Device Model: INTEL SSDSC2BA400G4
Serial Number: BTHV518009D3400NGN
LU WWN Device Id: 5 5cd2e4 04c00728c
Firmware Version: G2010160
User Capacity: 400,088,457,216 bytes [400 GB]
Sector Sizes: 512 bytes logical, 4096 bytes physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
Device is: In smartctl database [for details use: -P show]
ATA Version is: ACS-3 T13/2161-D revision 5
SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Wed Sep 26 07:47:20 2018 CST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
[root@node 07:47:07 ~]$sg_inq /dev/sdc
standard INQUIRY:
PQual=0 Device_type=0 RMB=0 version=0x05 [SPC-3]
[AERC=0] [TrmTsk=0] NormACA=0 HiSUP=0 Resp_data_format=2
SCCS=0 ACC=0 TPGS=0 3PC=0 Protect=0 [BQue=0]
EncServ=0 MultiP=0 [MChngr=0] [ACKREQQ=0] Addr16=0
[RelAdr=0] WBus16=0 Sync=0 Linked=0 [TranDis=0] CmdQue=0
[SPI: Clocking=0x0 QAS=0 IUS=0]
length=96 (0x60) Peripheral device type: disk
Vendor identification: ATA
Product identification: INTEL SSDSC2BA40
Product revision level: 0160
Unit serial number: BTHV518009D3400NGN

可以看到上面这块磁盘 /dev/sdc 的固件版本就是 0160
我们日常看到的磁盘根据出厂时间的不同,对应的固件版本也不同,平时也都没有在意固件版本。但是某次在进行 POC 时,发现性能不稳定,在排除了存储系统问题后,直接对该磁盘进行 Fio 测试,发现确实是磁盘自身性能不稳定。这块磁盘是 Intel 当时的中高端产品 S3710 系列,理论上不应该存在问题,经过排查,最终确定是固件版本导致的,通过 Intel 提供的升级工具升级后,性能恢复正常。

存储控制器

blkdiscard ,用来清理磁盘扇区的操作。某天 POC 过程中发现当 SSD 进行 blkdiscard 时,直接导致该 SSD IO Error。

当时想法:

  • 第一想法是该磁盘有问题,不支持,结果发现是惠普 OEM Intel 的 S3520 SSD,应该是支持相关指令的;
  • 想到上面一节提到的固件版本问题,由于磁盘是 OEM 的原因,固件只能更新惠普提供的固件,当时去惠普官方网站查询发现已经是最新版本;

上面两个原因都不是,当时没有什么其他的想法,我司售前文工提到,有没有可能是存储控制器的原因?
检查当时的存储控制器,是惠普的一块型号为 Smart Array P440ar Controller 的控制器。检查该控制器固件,查询官网,发现不是最新版本,于是下载更新,控制器固件版本更新方式有两种:

  1. DOS 更新
  2. UEFI 更新

两种方式都是将固件文件放置到 U盘 或者其他存储介质中,然后启动 OS,进行更新。由于现在新款服务器均带 UEFI ,那么方式 2 会简单一些。

更新固件后,发现磁盘执行 blkdiscard 无报错,检查命令返回值($?)也是 0 ,问题解决。

电源

通常服务器配置双路电源,避免单一故障,此为前提。

导致 CPU 频率过低

某次测试,由于上架偷懒,只连接了单路电源就开始进行测试。开始功能测试一切正常,到了性能测试,发现相同物理设备下,这台机器性能比之前验证结果低 20%,发现 CPU 频率过低,查看 /proc/cpuinfo 发现部分 core 低于标准主频数。

查看 IPMI & BIOS 配置,并无异常配置,咨询服务器厂商 400,提示是否是由于电源供电不足导致的,插上第二个电源后,CPU 频率稳定,sysbench 运行结果符合标准,问题解决。

磁盘闪断

在服务器正常运行过程中,磁盘的任何故障都会导致业务受到严重影响,哪怕是分布式存储,采用副本机制,如果同时有多个服务器出现磁盘闪断,后果也是极为严重的。

现在各大服务器厂商出货量较多的均为高密度服务器,也就是我们见到的一个机箱内部同时存在多个节点,比如:

  • 四子星就是一个机箱内部有4个节点,如果前置面板磁盘插槽(2.5 寸)为 24 的话,那么每个节点可以连接磁盘数为 6,;
  • 双子星就是一个机箱内部有 2 个节点,如果前置面板为 3.5 寸磁盘的话,那么每个节点连接磁盘数为 6;
  • 双子星如果前置面板为 2.5 的话,那么每个节点连接磁盘数为 12。

这样的服务器好处就是在同一个机箱中,可以放置更多的 CPU内存,成本低,功耗低。但是它的缺点同样明显:多个节点采用同一电源,若电源出现故障,会导致整个机箱内的所有节点出现故障。

最近发现某个机器频繁出现整个节点的磁盘同时断开再连接的场景,由于是双子星,也就是两个节点共用同一电源,影响较大。

最开始这种涉及到整个节点所有磁盘的故障,想法是这样的:

  • 节点操作系统日志只有磁盘连接断开的日志,无特殊问题
  • 整个节点所有磁盘故障,应该不是单一磁盘问题,估计是控制器问题
  • 检查控制器日志,没有发现报错
  • 检查控制器固件版本,已为最新版本
  • 检查控制器连线,连线正常

想法到这里就断了,只能求助服务器厂商了,厂商检查后发现是电源背板问题,由于电源背板故障,导致供电不足,磁盘连接一直处于连接断开重复状态。

总结

暂时总结了印象比较深的几次硬件故障,由于大家现在都是只做软件,对硬件了解仅限于概念,随着云计算的兴起,很多同学可能没见过真正的服务器,更别提遇到这些诡异的故障。

硬件故障特别难定位,如果没有一定的相关经验,估计会像我一样捉瞎。希望这篇文章对大家有所帮助。