Jak mogę zrównoważyć przychodzący ruch internetowy między N serwerami Apache?

12

Chcę użyć czegoś takiego jak Heartbeat / Squid / Varnish / etc, aby zrównoważyć ilość ruchu przychodzącego wśród wewnętrznych instancji apache. Musiałoby to być oprogramowanie, a nie sprzęt, ponieważ wszystkie moje rzeczy są uruchamiane na VPS. Nie mam dużego doświadczenia w tej dziedzinie, więc przepraszam, jeśli niewłaściwie używam terminologii i wybieram niewłaściwe pakiety.

Narysowałem coś, aby zilustrować, o co mi chodzi. Zielona strona jest taka, jak wyglądałaby początkowa konfiguracja, a niebieska strona mogłaby wyglądać po dodaniu większej liczby instancji Apache ze względu na wzrost ruchu. Może nie tak to działa, ale idealnie dodałbym adres IP modułu równoważącego do DNS domeny. Następnie moduł równoważący zobaczyłby liczbę połączeń w każdej instancji apache (za pomocą jakiejś listy konfiguracyjnej wewnętrznych adresów IP lub wiecznych adresów IP) i równo rozdzielił połączenia. Na niebiesko jest drugi balanser, ponieważ jestem pewien, że w pewnym momencie również będzie potrzebował pomocy.

Być może robię to źle, ale szukam pomocy na temat tego, czym powinny być „balansery” i najlepszych praktyk, jak je skonfigurować.

Każda pomoc byłaby świetna. alternatywny tekst


źródło
1
wybacz mi, ale jakiego programu użyłeś do swoich rysunków?
Prix
1
@Prix - Wygląda jak visio ( office.microsoft.com/en-us/visio )
Malonso

Odpowiedzi:

4

Prawie każde „odwrotne proxy” zrobi to, o co poprosisz.

Na przykład Lakier, Funt i HAProxy są dobre w tym, co robią, ale mają też swoje różnice - jednak jeśli chodzi o to, o co prosisz, każde z nich zrobi. Osobiście uważam, że najlepiej będzie z HAProxy, ale to tylko przypuszczenie.

Najlepiej przeczytaj artykuł o modułach równoważenia obciążenia, aby pomóc Ci zdecydować, jakiego rodzaju potrzebujesz: http://1wt.eu/articles/2006_lb/

Możesz również rozważyć skorzystanie z wcześniej przygotowanej usługi - na przykład uruchomienie oprogramowania w elastycznej chmurze Amazon i korzystanie z elastycznego równoważenia obciążenia.

Nagi
źródło
2

Na początku należy odpowiedzieć na ważne pytanie:
czy potrzebujesz sesji użytkownika do obsługi modułu równoważenia obciążenia i zawsze kierowania do tego samego serwera WWW (jeśli żyje)?

  • sesje nie są wymagane : w takim przypadku powinieneś użyć wydajnego programu nginx jako modułu równoważenia obciążenia. Konfiguracja jest łatwa do ustawienia, w którym wystarczy tylko wskazać listę serwerów WWW w upstream upstream_name { server1, ..., serverN }zestawieniu, a następnie, dla danej domeny, potrzebujesz prostej proxy_pass upstream_namedyrektywy.
    Zobacz wiki Nginx .

  • wymagana sesja Istnieje podobne ustawienie dla funta, w którym podajesz nazwę pliku cookie, który będzie obsługiwał identyfikator sesji ( ID MYCOOKIENAME), a następnie listę BACKENDwszystkich serwerów.
    Zobacz na przykład przykład konfiguracji funta .

Gdy heartbeatpojawi się potrzeba kilku modułów równoważenia obciążenia, możesz przejść do konfiguracji, która zapewni, że tylko jeden moduł równoważący zamontuje wirtualny adres IP dla danej domeny (jeśli wymagane są sesje, lub zamontuje oba i będzie zasilał DNS dwoma adresami IP dla instancja). Być może powinno to zostać szczegółowo opisane w innym pytaniu w momencie, gdy staje się ono konieczne (ponieważ narzędzia ewoluują szybko).
Zobacz także ten link na przykład.

Pierścień Ø
źródło
1

Powinieneś potrzebować bardzo dobrego powodu, aby wprowadzić dodatkową złożoność i jeden punkt awarii do swojej architektury.

Równoważenie obciążenia Round-Robin

  • nic nie kosztuje
  • jest prosty do wdrożenia i zarządzania
  • implementuje przełączanie awaryjne na kliencie - jedyne miejsce, w którym awaria może być niezawodnie wykryta
  • pośrednio obsługuje koligację z serwerem, ale nadal umożliwia przełączanie awaryjne bez problemów z zarządzaniem sesjami związanych z sesjami trwałymi
  • nie wymaga dodatkowego oprogramowania / sprzętu / konfiguracji w węzłach klastra

Zadziwia mnie ilość błędnych informacji związanych z rundą. Gdybym był cyniczną osobą, zastanawiałbym się, czy istnieje związek z dostawcami, którzy produkują duży, drogi sprzęt do równoważenia obciążenia.

Jedyne punkty, które przyznam, to to

  1. Adresy IPV4 stają się rzadkie, a zatem drogie - ale wciąż dużo. znacznie tańsze niż powiedzmy Cisco CSS.

  2. Internet coraz częściej działa na usługach internetowych - i nie wszyscy programiści implementują obsługę DNS zgodnie ze specyfikacjami . Ale każda przeglądarka, z której kiedykolwiek korzystałem, działa tak, jak powinna

symcbean
źródło
„nie wymaga żadnego dodatkowego oprogramowania” - cóż, wymaga, aby aplikacja webowa współdzieliła stan sesji (logowanie, zawartość koszyka itp.). A RR RR może mieć nierównomierne równoważenie obciążenia przez długi czas. Tak, DNS RR jest realną metodą, ale nie jest wyraźnie lepsza od alternatyw ...
Jesper M
0

Jeśli chodzi o usługi równoważące, możesz zajrzeć do LVS na http://www.linuxvirtualserver.org/ , być może uruchamiając ldirectord i pulsu w celu kierowania ruchem i przełączania awaryjnego.

jaq
źródło
0

Nginx jest niesamowity jako upstream proxy, użyłem go z wielkim sukcesem w konfiguracji wykonującej codziennie 1M + unikatów

Robert Swisher
źródło
0

OK, to zostało poproszone jakiś czas temu i jestem spóźniony na przyjęcie. Jest jednak coś do dodania.

Jackie, prawie to przybiłeś. Twoja ilustracja pokazuje, jak obsługiwane jest równoważenie obciążenia w większości mniejszych i średnich instalacji.

Powinieneś przeczytać wprowadzenie Willy'ego Tarreau dotyczące równoważenia obciążenia , z którym związany jest Nakedible. Nadal jest ważny i jest to dobre wprowadzenie.

Musisz rozważyć, w jaki sposób pasują one do twoich potrzeb:

  • Równoważenia obciążenia na poziomie TCP / IP (Linux Virtual Server i in.) Najniższy narzut na połączenie, najwyższa prędkość, nie „widzi” HTTP.
  • Równoważenia obciążenia na poziomie HTTP (HAProxy, nginx, Apache 2.2, Pound, Microsoft ARR i więcej). Wyższy narzut, widzi HTTP, może gzip HTTP, potrafi SSL, może balansować obciążenie sesji trwałej.
  • Odwrotne proxy HTTP (serwer ruchu Apache, lakier, kalmary). Może przechowywać obiekty w pamięci podręcznej (niektóre strony internetowe, css, js, obrazy) w pamięci RAM i przekazywać je kolejnym klientom bez angażowania serwera WWW zaplecza. Często może wykonywać te same czynności, co moduły równoważące obciążenie L7 HTTP.

istnieje drugi moduł równoważący, ponieważ jestem pewien, że w pewnym momencie moduł równoważący również będzie potrzebował pomocy.

Cóż, dobrze. Jednak równoważenie obciążenia jest proste i często jeden moduł równoważenia obciążenia może działać szybko . Odsyłam do tego artykułu, który wywołał nerwy w sieci, jako przykład tego, jaką wydajność może zapewnić pojedynczy nowoczesny serwer . Nie używaj wielu LB zanim będziesz musiał. Kiedy potrzebujesz wspólnego podejścia, to równoważenie obciążenia na poziomie IP na samym froncie (lub Round Round Robin DNS), przechodzenie do równoważenia obciążenia na poziomie HTTP, przechodzenie do serwerów proxy i serwerów aplikacji WWW.

pomoc na temat tego, czym powinny być „elementy równoważące” i najlepsze praktyki ich konfigurowania.

Problemem jest obsługa stanu sesji i do pewnego stopnia zachowanie stanu awaryjnego. Samo konfigurowanie modułów równoważenia obciążenia jest stosunkowo proste.

Jeśli używasz tylko 2-4 serwerów WWW zaplecza, mieszanie statyczne oparte na źródłowym adresie IP może być wykonalne. Pozwala to uniknąć konieczności udostępniania stanu sesji między serwerami aplikacji WWW. Każdy węzeł aplikacji internetowej widzi 1 / N całego ruchu, a mapowanie klient-serwer jest statyczne podczas normalnej pracy. Jednak nie nadaje się do większych instalacji.

Te dwie najlepsze algorytmy równoważenia obciążenia, w tym sensie, że mają łagodne działanie pod dużym obciążeniem i równomierny rozkład obciążenia, są prawdziwe round robin i równoważenie obciążenia losowego. Oba te wymagają, aby aplikacja sieciowa miała stan sesji globalnej dostępny w węzłach aplikacji internetowych. To, jak to się dzieje, zależy od stosu technologii aplikacji internetowych; ale istnieją ogólnie dostępne standardowe rozwiązania.

Jeśli ani statyczne haszowanie, ani współużytkowany stan sesji nie są dla ciebie odpowiednie, to ogólnie rzecz biorąc, wybór to ogólnie „ równoważenie obciążenia sesji trwałej ” i stan sesji na serwer. W większości przypadków działa to dobrze i jest to w pełni wykonalny wybór.

moduł równoważący zobaczyłby, ile połączeń jest w każdej instancji apache (poprzez pewną listę konfiguracji wewnętrznych adresów IP lub wiecznych adresów IP) i równomiernie rozdziela połączenia

Tak, niektóre strony tego używają. Istnieje wiele nazw dla wielu różnych algorytmów równoważenia obciążenia . Jeśli możesz wybrać okrągły robin lub losowy (lub ważony okrągły rudzik, ważony losowo), to polecam to zrobić z powodów podanych powyżej.

Ostatnia rzecz: nie zapominaj, że wielu dostawców (F5, Cisco i inni w wysokiej klasy, Fx Coyote Point i Kemp Technologies w bardziej rozsądnych cenach) oferuje dojrzałe urządzenia do równoważenia obciążenia .

Jesper M.
źródło