Samenvatting
Tussen 29 oktober en 1 november 2024 stopten eenenveertig enterprise NVMe-schijven op vier locaties met het accepteren van opdrachten bij een vast aantal power-on-uren, een firmwaredefect in één productiebatch. Mirroring absorbeerde negenendertig van die storingen zonder impact voor klanten. Eén node in Warschau verloor binnen veertig minuten beide helften van een mirror, omdat beide schijven uit dezelfde batch kwamen en op dezelfde dag in het rek waren gemonteerd. Twee instances op die node verloren gegevens. Dat tweede deel was onze fout, niet die van de leverancier.
Tijdlijn
Alle tijden UTC.
| Tijd | Gebeurtenis |
|---|---|
| 29 okt 03:11 | Schijf valt van de bus op een node in Warschau. Mirror verslechtert, hot spare begint met herbouwen. Routine, geen pagina. |
| 29 okt 03:49 | Tweede schijf in dezelfde mirror valt uit. Node verliest zijn root-pool en stopt. |
| 29 okt 03:52 | Pagina gaat af. On-call online om 03:55. |
| 29 okt 04:20 | Node ter plaatse onherstelbaar verklaard. Herbouw vanaf de hot spare is onmogelijk; de spare was midden in een herbouw vanaf een bron die niet meer antwoordt. |
| 29 okt 05:40 | Ingenieur die schijflogboeken bekijkt, merkt dat de twee storingen achttien power-on-uren uit elkaar liggen, niet achttien maanden. Vermoeden verschuift van pech naar een cohort. |
| 29 okt 06:15 | Fleet-brede query op batch-identificatie en power-on-uren. Tweehonderdzes schijven zitten in de getroffen batch. Eenendertig hebben het aantal al overschreden en zijn uitgevallen; de rest zit tussen veertig en negenhonderd uur verwijderd. |
| 29 okt 07:30 | Leverancier gecontacteerd. Defect binnen vier uur bevestigd: een teller in de wear-levelling-telemetrie loopt over bij 1.536 power-on-uren en blokkeert de controller. Een firmware-revisie die dit verhelpt, was stilletjes zes weken eerder uitgebracht. |
| 29 okt 09:00 | Rollende firmware-update begint, geprioriteerd op resterende uren. |
| 30 okt 22:40 | Laatste schijf in de batch bijgewerkt of vervangen. |
| 1 nov 14:00 | Getroffen klantinstances hersteld of terugbetaald. |
Hoofdoorzaak
Twee oorzaken, en slechts één daarvan is van de schijffabrikant.
Hunne: een telemetrieteller liep over bij een vast aantal power-on-uren en hing de controller op. De schijf overleeft een powercycle, komt terug en blokkeert binnen enkele minuten opnieuw. Gegevens op de platter zijn intact en onbereikbaar, wat de slechtste combinatie is voor iemand die het om vier uur ’s nachts probeert te diagnosticeren.
Onze: we bouwden mirrors van schijven die in dezelfde levering arriveerden. Een mirror is bedoeld als twee onafhankelijke storingsdomeinen, en twee schijven uit één batch, dezelfde middag in het rek gemonteerd en binnen hetzelfde uur ingeschakeld, zijn in geen enkele zin die ertoe doet onafhankelijk. Elf mirrors in de fleet waren zo gebouwd. Tien hadden geluk doordat de hot spare eerst klaar was met herbouwen. Eén niet.
We wisten dit al jaren in principe. Niemand had het in de bouwprocedure geschreven, en de bouwprocedure is wat mensen volgen om twee uur ’s nachts onder een leveringsdeadline.
Impact
- Negenendertig storingen opgevangen door mirrors zonder klantzichtbaar effect.
- Eén node negen uur en achttien minuten offline.
- Veertien instances op die node hersteld vanaf off-node-back-ups, met maximaal elf minuten aan writes verloren.
- Twee instances zonder enige back-up. Beide verloren alles op de node.
Wat we hebben gewijzigd
- Aankoopbatches worden gesplitst. Geen twee schijven uit dezelfde batch mogen een mirror vormen, en de hot spare die een paar beschermt, komt uit een derde batch. Afgedwongen door de bouwtooling, niet door een document. Gereed op 4 november.
- Cohortwaarschuwing op power-on-uren. We waarschuwen nu wanneer meer dan vier schijven met dezelfde batch-identificatie binnen honderd uur van elkaar zitten en een rond aantal uren naderen. Het is een grove heuristiek en het had dit negenendertig dagen eerder opgevangen.
- Firmware-soak vóór productie. Een nieuwe schijffamilie draait tweeduizend power-on-uren in een testrek voordat hij klantgegevens draagt. Dit defect zou aan het licht zijn gekomen bij 1.536.
- We lezen nu firmware-release-opmerkingen van de leverancier op schema. De fix bestond zes weken voordat we die nodig hadden. Niemand was toegewezen om te kijken, dus keek niemand.
Wat we niet hebben gewijzigd, en waarom
We hebben de schijffamilie of leverancier niet gewijzigd. Het defect was echt en de openbaarmaking was slecht, maar ons verlies kwam door gecorreleerde batching, die we met elke fabrikant zouden hebben gereproduceerd. Overstappen zou daadkrachtig hebben gevoeld en niets hebben opgelost.
Off-node-back-up blijft een add-on voor negen euro per vijfhonderd gigabyte. Het universeel maken betekent elke klant factureren voor een dienst die de meesten zelf repliceren, en we gaan mensen niet factureren voor de schijn van veiligheid. Wat wel is gewijzigd, is het bestelformulier, dat nu duidelijk vermeldt dat instance-opslag gespiegeld is en gespiegeld geen back-up is, en de bevestigingsstap staat niet langer toe dat die zin stilzwijgend wordt overgeslagen.
We zijn niet overgestapt op drievoudige mirroring. Het kost eenderde meer per gigabyte en lost gecorreleerde storingen niet op, wat het werkelijke mechanisme hier was. Twee onafhankelijke domeinen verslaan drie afhankelijke.
De twee klanten
Beiden zijn volledig terugbetaald voor de getroffen periode, in het asset waarmee ze betaalden, zonder dat ze iets hoefden te rechtvaardigen. Eén vertrok. De ander bleef en koopt nu de back-up-add-on, na het lezen van dezelfde zin op het bestelformulier die er in zwakkere vorm al die tijd al stond.
Geen van beide uitkomsten lag in onze macht. Het enige dat in onze macht lag, was het correct bouwen van de mirror, en dat deden we niet.