[Debian] Równoważenie obciążenia z Nginx

W poprzednich dwóch wpisach opisywałem już serwer Nginx.

W pierwszym z nich, przedstawiona była typowa konfiguracja LEMP – Linux, Nginx (Engine X), MySQL, PHP. Nginx pracował wtedy w roli serwera HTTP, a ponieważ nie ma dla niego odpowiedniego modułu do obsługi języka PHP, wykorzystaliśmy do jego obsługi FastCGI.

W drugim, Nginx był wykorzystany tylko do serwowania statycznych treści – obrazków, plików html, css, pdf itp. Żądania dotyczące plików dynamicznych, czyli takich wymagających sparsowania, np. PHP, przekazywane były do serwera Apache uruchomionego na innym, niestandardowym, porcie. Taka konfiguracja może być wykorzystana do przyśpieszenia już działającego serwera.

W przedstawionej tutaj konfiguracji, wykorzystamy kilka serwerów (u mnie 2), będących zwykłymi serwerami HTTP, obsługującymi ten sam vhost oraz serwer równoważący obciążenie – load balancer, na którym zainstalowany będzie Nginx, wraz ze specjalnie skonfigurowany vhostem, dla tej samej domeny, dla której skonfigurowane będą pozostałe serwery. Load balancer będzie odbierał połączenia TCP od przeglądarek klientów i przekazywał je (jako proxy) do poszczególnych serwerów określonych w puli. W moim przypadku serwerów backendowych, czyli tych które będą odpowiadać na żądania klientów, będzie 2. Load balancer będzie 1, a domena dla której będzie miało miejsce równoważenie obciążenia to e00.eu. Domena ta musi oczywiście wskazywać rekordem A na nasz serwer równoważący obciążenie.

Wadą tej konfiguracji jest spore wykorzystanie łącza do load balancera, w końcu każdy klient się z nim łączy. Dostęp do strony nie będzie również możliwy po jego awarii.

Przygotowanie

1. Instalujemy na wszystkich serwerach, oprócz tego równoważącego obciążenie, serwery HTTP i konfigurujemy na nich wybrany przez nas do równoważenia obciążenia vhost. Tutaj pokażę to na przykładzie domeny e00.eu. Czym są vhosty opisałem w tym wpisie.

Poniżej lista instrukcji instalacji i konfiguracji różnych serwerów HTTP:

2. Na serwerze DNS, np. tym udostępnionym przez naszego rejestratora domeny, przekierowujemy/wskazujemy naszą domenę na serwer równoważący obciążenie.

Instalacja i konfiguracja load balancera

3. Odświeżamy cache repozytoriów Apt-a, usuwany domyślnie zainstalowany w Nazwa.pl, serwer HTTP Apache i instalujemy Nginx-a.

apt-get update
apt-get remove apache2
apt-get install nginx

4. Jeśli nie mamy go zainstalowanego, instalujemy edytor nano.

apt-get install nano

5. Uruchamiamy edytor nano i edytujemy plik naszego vhosta, dla którego będziemy równoważyć obciążenie pomiędzy wiele serwerów. W moim przypadku będzie to host wirtualny e00.eu.

nano /etc/nginx/sites-available/e00.eu

6. Zaznaczamy zawartość poniższego pola tekstowego, kopiujemy go do schowka, a następnie wklejamy w PuTTY przyciskając prawy przycisk myszy na okienku.

upstream backend {
    ip_hash;
    server 176.119.33.56;
    server 176.119.33.156;
}

server {
    server_name e00.eu www.e00.eu;

    location / {
        proxy_pass http://backend;
    }
}

7. W sekcji „upstream backend„, na liście serwerów, podajemy adresy IP swoich serwerów oprócz tego na którym to konfigurujemy.

8. Zapisujemy plik i zamykamy edytor, klikając CTRL+X, Y/T i enter.

9. Przenosimy skrót do pliku konfiguracyjnego vhosta, tak żeby był on przetwarzany jako pierwszy. Robimy to tylko raz, podczas konfiguracji pierwszego vhosta.

mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/000-default

10. Tworzymy skrót do pliku konfiguracyjnego vhosta równoważącego obciążenie dla naszej domeny (u mnie będzie to e00.eu). Utworzenie tego skrótu, z folderu sites-available do folderu sites-enabled, spowoduje włączenie vhosta.

ln -s /etc/nginx/sites-available/e00.eu /etc/nginx/sites-enabled/001-e00.eu

11. Restartujemy serwer Nginx.

/etc/init.d/nginx restart

Autor: Aleksander Kurczyk