Rozkładanie obciążenia za pomocą serwera DNS
Napisał: Patryk Krawaczyński
09/06/2009 w Hacks & Scripts Brak komentarzy. (artykuł nr 67, ilość słów: 346)
P
rzedstawiony hack jest tłumaczeniem “Distributing Server Load with Round-Robin DNS” z książki “Linux Servers Hacks” autorstwa Rob’a Flickenger’a udostępnionym on-line (Hack #79) na stronie http://hacks.oreilly.com. Do tłumaczenia zostało dodane także parę informacji od tłumacza.
Jeśli udostępniasz szczególnie popularną stronę, w pewnym momencie zorientujesz się że istnieje ściana: twój serwer nie jest w stanie obsłużyć więcej żądań. W świecie serwerów WWW, nazywa się to efektem Slashdot, a to nie jest ładna witryna (no, cóż). Nawet dodając więcej pamięci RAM, zmieniając procesory na lepsze oraz używając szybszych dysków twardych i magistral poprawi tylko na krótką chwilę sytuację, wtedy przekonasz się, że jedna maszyna po prostu nie da rady wykonać tej całej pracy.
Jedną z dróg rozwiązań przekroczenia limitów monolitycznego serwera jest rozkład obciążenia wśród wielu maszyn, przez co możesz nie tylko poprawić wydajność, ale także stabilność sieci. Jeśli masz rezerwę dynamiczną lub trzy działające cały czas komputery, to jeśli jeden zacznie sprawiać problemy, inne mogą przejąć jego obowiązki bez przerywania pracy systemu.
Możliwe, że najprostszym sposobem na rozkład obciążenia publicznego ruchu jest wykorzystanie samego publicznego ruchu do rozkładania obciążenia. Dzięki magicznemu krągłemu układowi DNS, przybywające żądania do jednej nazwy hosta mogą być kierowane do dowolnej liczby adresów IP.
W serwerze BIND 9 jest to łatwe jak dodanie wielu rekordów A dla jednego hosta. Dla przykładu, załóżmy, że używamy tych ustawień dla strefy pliku dla strony oreillynet.com:
www 60 IN A 208.201.239.36 www 60 IN A 208.201.239.37
Teraz, kiedy hosty będą sprawdzały www.oreillynet.com w DNS w połowie czasu zobaczą:
rob@caligula:~$ host www.oreillynet.com www.oreillynet.com has address 208.201.239.36 www.oreillynet.com has address 208.201.239.37
oraz z reszty czasu dostaną:
rob@caligula:~$ host www.oreillynet.com www.oreillynet.com has address 208.201.239.37 www.oreillynet.com has address 208.201.239.36
Większość aplikacji korzysta tylko z pierwszego adresu zwróconego przez DNS, rozwiązanie sprawdza się świetnie. Mniej więcej połowa żądań powędruje do każdego adresu, a więc obciążenie dwóch serwerów powinno być równe połowie obciążenia pojedynczego serwera. Ustawiliśmy niską wartość TTL (na 60 sekund), aby uniemożliwić przechowanie jednego uporządkowania serwerów w buforujących serwerach DNS, które znajdują się na drodze, co dzięki temu liczba żądań obu komputerów powinna być mniej więcej taka sama.
Więcej informacji: Hacks O’Reilly, Round Robin