自2019年10月起持续记录

事后分析:一个坏的固件批次,以及一个不是镜像的镜像

来自同一生产批次的 41 块 NVMe 硬盘在相同的通电小时数时集体停止响应。两个客户实例丢失了数据,而这个批次错误完全是我们造成的。

摘要

在2024年10月29日至11月1日期间,四个站点的41块企业级NVMe硬盘在到达固定的通电小时数后停止接受命令,这是某个制造批次中的固件缺陷。镜像功能吸收了其中39次故障,对客户无影响。华沙的一个节点在40分钟内丢失了镜像的两半,因为两块硬盘来自同一批次并且同一天上架。该节点上的两个实例丢失了数据。第二部分是我们的错,不是供应商的错。

时间线

所有时间均为UTC。

时间事件
10月29日 03:11华沙节点上的一块硬盘从总线上掉线。镜像降级,热备盘开始重建。常规情况,未触发告警。
10月29日 03:49同一镜像中的第二块硬盘掉线。节点丢失根存储池并停止运行。
10月29日 03:52告警触发。值班人员于03:55上线。
10月29日 04:20节点被宣布无法原地恢复。从热备盘重建不可能,因为热备盘正从已无响应的源进行重建。
10月29日 05:40审核硬盘日志的工程师注意到两次故障相隔18个通电小时,而不是18个月。怀疑从坏运气转为批次问题。
10月29日 06:15按批次标识符和通电小时数进行全舰队查询。受影响批次中有206块硬盘。31块已经超过计数并失败,其余距离该计数还有40到900小时。
10月29日 07:30联系供应商。四小时内确认缺陷:磨损均衡遥测中的计数器在通电小时数达到1,536时溢出并卡死控制器。修复此问题的固件修订版已在六周前悄然发布。
10月29日 09:00开始滚动更新固件,按剩余小时数排序。
10月30日 22:40该批次的最后一块硬盘已更新或更换。
11月1日 14:00受影响的客户实例已恢复或退款。

根本原因

两个原因,其中一个属于硬盘制造商。

他们的: 遥测计数器在固定通电小时数时溢出并卡死控制器。硬盘在断电重启后存活,但会在几分钟内再次卡死。盘上的数据完好但无法访问,这是凌晨四点诊断时最糟糕的组合。

我们的: 我们使用了同一次交付的硬盘来构建镜像。镜像本应是两个独立的故障域,而同一批次、同一下午上架、同一小时内通电的两块硬盘在任何重要意义上都不是独立的。整个舰队中有11个镜像以这种方式构建。其中10个幸运,因为热备盘首先完成了重建。一个没有。

我们多年来在原则上知道这一点。但没有人将其写入构建流程,而构建流程正是人们在凌晨两点交付期限下遵循的东西。

影响

  • 三十九次故障被镜像吸收,对客户无可见影响。
  • 一个节点离线九小时十八分钟。
  • 该节点上的十四个实例从节点外备份恢复,最多丢失十一分钟的写入。
  • 两个实例没有任何备份。两者都丢失了节点上的所有数据。

我们做的改变

  1. 购买批次被拆分。 任何两块来自同一批次的硬盘都不能组成镜像,保护一对的热备盘来自第三批次。由构建工具强制执行,而不是文档。11月4日完成。
  2. 通电小时数的群组告警。 现在,当多个共享批次标识符的硬盘在100小时内接近任何整数小时数时,我们会发出告警。这是一种粗略的启发式方法,但本可以提前19天抓住这个问题。
  3. 生产前固件浸泡测试。 新的硬盘系列在测试机架中运行两千个通电小时,然后才承载客户数据。这个缺陷本会在1,536小时时浮现。
  4. 我们现在按计划阅读供应商固件发布说明。 修复在我们需要它之前六周就已经存在。没有人被指派查看,所以没有人查看。

我们未改变以及原因

我们未更换硬盘系列或供应商。 缺陷是真实的,披露也不佳,但我们的损失来自相关的批次问题,我们会与任何制造商复制同样的问题。更换会显得果断,但解决不了问题。

节点外备份仍是每500GB九欧元的附加服务。 将其普及意味着向每个客户收费,而大多数客户自己复制了这些服务,我们不会为安全的外观而收费。改变的是订购表单,现在明确说明实例存储是镜像的,而镜像不是备份,确认步骤不再允许该句子被静默跳过。

我们未采用三镜像。 它每GB多增加三分之一成本,并不能解决相关故障——这是实际的机制。两个独立的故障域胜过三个依赖的。

两个客户

两者都全额退回了受影响期间的费用,以他们支付的资产形式,且无需任何证明。一位离开了。另一位留下,现在购买备份附加服务,读到了订购表单上的相同句子,而这句话以较弱的形式一直存在。

这两种结果都不在我们的掌控之中。唯一在我们掌控之内的是正确构建镜像,而我们没有做到。

随时恭候

选择城市,选择大小,用加密货币支付。

无需填写关于您的身份信息的表格,无需等待人工审批,无需电话验证。账单结清后,凭证将发送到您的邮箱。