Podsumowanie
Między 29 października a 1 listopada 2024 roku czterdzieści jeden korporacyjnych dysków NVMe w czterech lokalizacjach przestało przyjmować polecenia po osiągnięciu określonej liczby godzin pracy, co było wadą oprogramowania układowego w jednej partii produkcyjnej. Mirroring pochłonął trzydzieści dziewięć z tych awarii bez wpływu na klientów. Jeden węzeł w Warszawie stracił obie połowy mirrora w ciągu czterdziestu minut, ponieważ oba dyski pochodziły z tej samej partii i zostały zamontowane tego samego dnia. Dwie instancje na tym węźle utraciły dane. Ta druga część była naszą winą, a nie dostawcy.
Oś czasu
Wszystkie godziny UTC.
| Czas | Zdarzenie |
|---|---|
| 29 paź 03:11 | Dysk wypada z magistrali na węźle warszawskim. Mirror degraduje się, dysk zapasowy zaczyna przebudowę. Rutynowe, bez zgłoszenia. |
| 29 paź 03:49 | Drugi dysk w tym samym mirrorze wypada. Węzeł traci pulę główną i zatrzymuje się. |
| 29 paź 03:52 | Zgłoszenie alarmowe. Dyżurny online o 03:55. |
| 29 paź 04:20 | Węzeł uznany za nieodwracalnie uszkodzony na miejscu. Przebudowa z dysku zapasowego niemożliwa; zapasowy był w trakcie przebudowy ze źródła, które już nie odpowiada. |
| 29 paź 05:40 | Inżynier przeglądający logi dysków zauważa, że dwie awarie dzieli osiemnaście godzin pracy, a nie osiemnaście miesięcy. Podejrzenie przechodzi z pecha na kohortę. |
| 29 paź 06:15 | Zapytanie floty według identyfikatora partii i godzin pracy. Dwieście sześć dysków jest w dotkniętej partii. Trzydzieści jeden już przekroczyło licznik i uległo awarii; reszta jest od czterdziestu do dziewięciuset godzin od tego momentu. |
| 29 paź 07:30 | Skontaktowano się z dostawcą. Wada potwierdzona w ciągu czterech godzin: licznik w telemetrii niwelowania zużycia przepełnia się po 1536 godzinach pracy i blokuje kontroler. Poprawka oprogramowania układowego została wydana po cichu sześć tygodni wcześniej. |
| 29 paź 09:00 | Rozpoczyna się zbiorcza aktualizacja oprogramowania układowego, priorytetyzowana według pozostałych godzin. |
| 30 paź 22:40 | Ostatni dysk w partii zaktualizowany lub wymieniony. |
| 1 lis 14:00 | Dotknięte instancje klientów przywrócone lub refundowane. |
Przyczyna źródłowa
Dwie przyczyny, a tylko jedna należy do producenta dysków.
Ich: licznik telemetrii przepełnił się przy stałej liczbie godzin pracy i zawiesił kontroler. Dysk przetrwa cykl zasilania, wraca i ponownie zawiesza się w ciągu kilku minut. Dane na talerzu są nienaruszone i niedostępne, co jest najgorszą kombinacją dla każdego, kto próbuje to zdiagnozować o czwartej nad ranem.
Nasza: zbudowaliśmy mirror z dysków, które przyjechały w tej samej dostawie. Mirror ma być dwoma niezależnymi domenami awarii, a dwa dyski z jednej partii, zamontowane tego samego popołudnia, włączone w ciągu tej samej godziny, nie są niezależne w żadnym istotnym sensie. Jedenaście mirrorów we flocie było tak zbudowanych. Dziesięć miało szczęście – dysk zapasowy zdążył dokończyć przebudowę. Jeden nie.
Znaliśmy tę zasadę od lat. Nikt nie zapisał jej w procedurze budowania, a procedura budowania jest tym, czego ludzie przestrzegają o drugiej w nocy pod presją terminu dostawy.
Wpływ
- Trzydzieści dziewięć awarii pochłoniętych przez mirror bez widocznego wpływu na klientów.
- Jeden węzeł offline przez dziewięć godzin i osiemnaście minut.
- Czternaście instancji na tym węźle przywróconych z backupów poza węzłem, tracąc maksymalnie jedenaście minut zapisów.
- Dwie instancje bez żadnego backupu. Obie straciły wszystko na węźle.
Co zmieniliśmy
- Partie zakupowe są dzielone. Żadne dwa dyski z tej samej partii nie mogą tworzyć mirrora, a dysk zapasowy chroniący parę pochodzi z trzeciej partii. Egzekwowane przez narzędzia budowania, nie przez dokument. Zrobione 4 listopada.
- Alerty o kohortach dla godzin pracy. Alertujemy teraz, gdy więcej niż cztery dyski o tym samym identyfikatorze partii są w odstępie stu godzin od siebie i zbliżają się do dowolnej okrągłej liczby godzin. To prymitywna heurystyka, ale wykryłaby to dziewiętnaście dni wcześniej.
- Testowanie oprogramowania układowego przed produkcją. Nowa rodzina dysków przechodzi dwa tysiące godzin pracy w stojaku testowym, zanim przenosi dane klientów. Ta wada ujawniłaby się przy 1536.
- Czytamy noty wydań oprogramowania układowego dostawcy zgodnie z harmonogramem. Poprawka istniała sześć tygodni przed tym, jak jej potrzebowaliśmy. Nikt nie był wyznaczony do sprawdzenia, więc nikt nie sprawdził.
Czego nie zmieniliśmy i dlaczego
Nie zmieniliśmy rodziny dysków ani dostawcy. Wada była realna, a komunikacja słaba, ale nasza strata wynikała ze skorelowanych partii, co powtórzylibyśmy z każdym producentem. Zmiana dostawcy byłaby pozornie zdecydowana i niczego nie naprawiła.
Backup poza węzłem pozostaje opcją za dziewięć euro za pięćset gigabajtów. Uczynienie go uniwersalnym oznacza obciążenie każdego klienta usługą, którą większość z nich replikuje samodzielnie, i nie zamierzamy obciążać ludzi za pozór bezpieczeństwa. Zmienił się natomiast formularz zamówienia, który teraz wyraźnie stwierdza, że pamięć instancji jest zmirrorowana, a mirror nie jest backupem, a krok potwierdzenia nie pozwala już pominąć tego zdania po cichu.
Nie przeszliśmy na potrójny mirror. Kosztuje o jedną trzecią więcej za gigabajt i nie rozwiązuje problemu skorelowanych awarii, który był rzeczywistym mechanizmem tutaj. Dwie niezależne domeny biją trzy zależne.
Dwaj klienci
Obaj otrzymali pełny zwrot za dotknięty okres, w aktywie, którym płacili, bez konieczności uzasadniania czegokolwiek. Jeden odszedł. Drugi został i teraz kupuje dodatek backupu, przeczytawszy to samo zdanie w formularzu zamówienia, które w słabszej formie było tam od początku.
Żaden z tych wyników nie był w naszej gestii. Jedyną rzeczą w naszej gestii było prawidłowe zbudowanie mirrora, a tego nie zrobiliśmy.