Redundansen som inte var redundant

Klustret hade två vägar mellan noderna: en snabb via en tiogigabitswitch och en långsammare via en gigabitswitch. Redundans, med andra ord.

Sedan stängdes den snabba switchen av — den drar ström och står normalt avstängd — och migrering av virtuella maskiner mellan noderna slutade fungera.

Redundans är inte en egenskap hos kablarna

Det fysiska var i sin ordning: varje nod satt i båda switcharna. Problemet låg ett lager upp.

Det nät som klustret använder för migrering var bara konfigurerat på tiogigabitlänkarna. På gigabitvägen fanns det inte — inte som ett fel, utan för att ingen någonsin lagt till det där. Trafiken hade alltså exakt en väg, trots två kablar.

Det här är den vanligaste formen av falsk redundans jag stöter på. Två fysiska vägar, ett logiskt beroende. Ritningen ser redundant ut. Konfigurationen är det inte.

Och länken mellan switcharna var död

Under felsökningen upptäcktes en andra sak, som är värre: förbindelsen mellan de två switcharna stod nere.

Alltså — även om nätet hade varit konfigurerat på båda vägarna hade paketen inte tagit sig fram, eftersom switcharna inte pratade med varandra. Två oberoende brister som var för sig hade räckt för att omintetgöra redundansen, och som tillsammans gjorde att ingen av dem märktes.

Ingen larmade på den nedlagda länken. Den hade förmodligen legat nere länge. En förbindelse som bara används när något annat gått sönder är osynlig ända till den dagen den behövs — vilket är exakt samma dag den inte får vara trasig.

Lösningen: låt systemet välja själv

I stället för att konfigurera en väg och hoppas, buntades de två ihop till ett par med tydlig rangordning: den snabba är förstahandsval, den långsamma står redo. Faller den snabba tar den andra över, och när den snabba kommer tillbaka växlar systemet tillbaka automatiskt.

Det ger två saker. Migrering fungerar även med den strömtörstiga switchen avstängd — långsammare, men den fungerar. Och den långsamma vägen används ibland, vilket betyder att den är bevisat fungerande i stället för teoretiskt tillgänglig.

Att omkonfigureringen råkade göras medan de snabba nätverkskorten låg nere var en lycklig omständighet: reservvägen testades under tiden den byggdes.

Så vet du att det funkar

Stäng av den primära vägen med flit. Inte teoretiskt — dra kabeln eller stäng av switchen, och gör sedan det arbete som ska fungera. Migrera en maskin. Redundans som aldrig prövats är en hypotes.

Kontrollera länkstatus på det du inte använder. Reservvägar och sammankopplingar mellan switchar är precis det som ligger nere utan att någon vet.

Fråga vilket nät varje tjänst faktiskt använder, och kontrollera att det finns på båda vägarna. Redundans byggs per nät, inte per kabel.

Vad jag tar med mig

Redundans är inte något man installerar. Det är något man bevisar med jämna mellanrum, och som slutar gälla i tysthet så fort någon lägger till ett nät, byter en port eller flyttar en kabel.

Det enklaste testet i den här branschen är också det mest försummade: stäng av en sak och se efter vad som slutar fungera. Gör det när du valt tidpunkten, så slipper du göra det när någon annan valt den.

Skrivet av Daniel Azzarri · Om · Alla inlägg