Symulacje awarii sieci
Napisał: Patryk Krawaczyński
16/11/2014 w Administracja Brak komentarzy. (artykuł nr 465, ilość słów: 485)
W
ięc stworzyliśmy swoją niezawodną aplikację / system / usługę (* niepotrzebne skreślić) i jesteśmy gotowi na produkcję. Wszystko logicznie zostało zaprogramowane – wyłączyliśmy / włączyliśmy – przetestowane. Jednak cykl życia aplikacji w prawdziwej dżungli IT wygląda trochę inaczej.
Na początek nasza aplikacja, jeżeli nie zostanie dobrze ograniczona lub sprofilowana może być trochę zachłanna, jeśli chodzi o zużycie pamięci. System Linux bardzo dobrze radzi sobie z takimi sytuacjami wywołując OOM Killer na najbardziej zasobożernych procesach. Nie musimy czekać na tego typu sytuację – wystarczy, że sami szybko i skutecznie zabijemy nasz produkt za pomocą polecenia: kill -9 [PID]. Ot tak. Nie będziemy świadomi, jak się nasz system zachowa dopóki sami nie zobaczymy go w warunkach awarii. Szczególnie tyczy się to procesów, które komunikują się z innymi procesami – niezależnie, czy są one lokalne, czy zdalne. Trudno przewidzieć, co się stanie, jeśli komunikacja pomiędzy tymi procesami zostanie zakłócona lub przerwana, ale bardzo łatwo doprowadzić do symulacji takich warunków w systemie Linux.
1. Pierwszym narzędziem jakie możemy wykorzystać to iptables
. Za jego pomocą możemy przeprowadzić symulację prawdopodobieństwa zaginięcia 10% przychodzącego i wychodzącego ruchu na maszynie i sprawdzeniu, jak zachowa się nasza usługa w takich warunkach. Przy zabawie z tego rodzajem “bardzo ubogiego” połączenia nie można przesadzić z procentami, ponieważ przy wartości 14% i wyżej używanie daemona SSH staje się praktycznie niemożliwe.
iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP
Całkowity zanik komunikacji do innego procesu nasłuchującego na porcie TCP 61616 możemy przeprowadzić przy pomocy:
iptables -I INPUT 1 -p tcp --sport 61616 -j DROP iptables -I INPUT 2 -p tcp --dport 61616 -j DROP
2. Drugim narzędziem wręcz stworzonym do emulacji sieci jest netem. Za jego pomocą możemy emulować opóźnienia, straty, szumy, powielanie oraz zamianę pakietów sieciowych. Na przykład polecenie:
tc qdisc add dev eth0 root netem delay 250ms loss 10% rate 1mbps
doda nam na interfejsie eth0 250ms opóźnienia z 10% utratą pakietów oraz ograniczeniem przepustowości do 1Mbps.
tc qdisc add dev eth0 root netem delay 50ms 20ms distribution normal
Możemy również dodawać przedziały opóźnień i realistyczny ich rozkład (aby otrzymać ładną krzywą w kształcie dzwonu), a także wspomniane wcześniej inne zakłócenia:
tc qdisc add dev eth0 root netem reorder 0.02 duplicate 0.05 corrupt 0.01
Oprócz programów wbudowanych lub dostarczonym razem z każdą dystrybucją systemu Linux możemy również wykorzystać zewnętrzne narzędzia, jak: Chaos Monkey, Comcast, delay-net, slow, WANem.
Więcej informacji: Failure Testing Made Easy