Vyhledávání na webu

Jak používat Nginx jako HTTP Load Balancer v Linuxu


Pokud jde o nastavení více aplikačních serverů pro redundanci, je vyvažování zátěže běžně používaným mechanismem pro efektivní distribuci příchozích požadavků na služby nebo síťového provozu přes skupinu serverů typu back-end.

Vyvažování zátěže má několik výhod včetně zvýšené dostupnosti aplikací díky redundanci, zvýšené spolehlivosti a škálovatelnosti (při zvýšení provozu lze do mixu přidat více serverů). Přináší také lepší výkon aplikací a mnoho dalších výhod.

Doporučená četba: Nejlepší průvodce zabezpečením, zpevněním a zlepšením výkonu webového serveru Nginx

Nginx lze nasadit jako účinný vyrovnávač zátěže HTTP k distribuci příchozího síťového provozu a pracovní zátěže mezi skupinu aplikačních serverů, přičemž v každém případě vrací odpověď z vybraného serveru vhodného klienta.

Metody vyrovnávání zátěže podporované Nginx jsou:

  • round-robin – která distribuuje požadavky na aplikační servery způsobem round-robin. Ve výchozím nastavení se používá, když není zadána žádná metoda,
  • nejméně připojený – přiřadí další požadavek méně vytíženému serveru (serveru s nejmenším počtem aktivních připojení),
  • ip-hash – kde se hashovací funkce používá k určení, jaký server by měl být vybrán pro další požadavek na základě IP adresy klienta. Tato metoda umožňuje perzistenci relace (připojení klienta ke konkrétnímu aplikačnímu serveru).

Kromě toho můžete použít váhy serveru k ovlivnění algoritmů vyvažování zátěže Nginx na pokročilejší úrovni. Nginx také podporuje kontroly stavu k označení serveru jako neúspěšného (po nastavitelnou dobu je výchozí nastavení 10 sekund), pokud jeho odpověď selže s chybou, takže se vyhnete tomu, že bude vybrán server pro následné příchozí požadavky po určitou dobu.

Tato praktická příručka ukazuje, jak používat Nginx jako nástroj pro vyrovnávání zatížení HTTP k distribuci příchozích požadavků klientů mezi dva servery, z nichž každý má instanci stejné aplikace.

Pro účely testování je každá instance aplikace označena (v uživatelském rozhraní), která označuje server, na kterém běží.

Nastavení testovacího prostředí

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

Na každém aplikačním serveru je každá instance aplikace nakonfigurována pro přístup pomocí domény tecmintapp.lan. Za předpokladu, že se jedná o plně registrovanou doménu, přidáme do nastavení DNS následující.

A Record   		@   		192.168.58.7

Tento záznam sděluje požadavky klientů, kam má doména směrovat, v tomto případě na nástroj pro vyrovnávání zatížení (192.168.58.7). Záznamy DNS A přijímají pouze hodnoty IPv4. Alternativně lze pro testovací účely použít soubor /etc/hosts na klientských počítačích s následujícím záznamem.

192.168.58.7  	tecmintapp.lan

Nastavení Nginx Load Balancing v Linuxu

Před nastavením Nginx load balancing musíte nainstalovat Nginx na váš server pomocí výchozího správce balíčků pro vaši distribuci, jak je znázorněno.

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Dále vytvořte soubor bloku serveru s názvem /etc/nginx/conf.d/loadbalancer.conf (uveďte název podle svého výběru).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

Poté do něj zkopírujte a vložte následující konfiguraci. Tato konfigurace je standardně nastavena na kruhovou, protože není definována žádná metoda vyrovnávání zátěže.

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

Ve výše uvedené konfiguraci je direktiva proxy_pass (která by měla být specifikována uvnitř umístění, v tomto případě /) použita k předání požadavku HTTP proxy serverům odkazovaným pomocí word backend, v směrnici upstream (používá se k definování skupiny serverů). Požadavky budou také distribuovány mezi servery pomocí vyváženého mechanismu váženého kruhového vyvažování.

Chcete-li použít mechanismus nejmenšího připojení, použijte následující konfiguraci

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

A chcete-li povolit mechanismus zachování relace ip_hash, použijte:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Rozhodnutí o rozložení zátěže můžete ovlivnit také pomocí váh serveru. Při použití následující konfigurace, pokud existuje šest požadavků od klientů, budou aplikačnímu serveru 192.168.58.5 přiřazeny 4 požadavky a 2 budou přiděleny 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

Uložte soubor a ukončete jej. Poté se po přidání posledních změn ujistěte, že struktura konfigurace Nginx je správná, spuštěním následujícího příkazu.

sudo nginx -t

Pokud je konfigurace v pořádku, restartujte a povolte službu Nginx, aby se změny projevily.

sudo systemctl restart nginx
sudo systemctl enable nginx

Testování Nginx Load Balancing v Linuxu

Chcete-li otestovat vyrovnávání zátěže Nginx, otevřete webový prohlížeč a použijte k navigaci následující adresu.

http://tecmintapp.lan

Jakmile se načte webové rozhraní, poznamenejte si načtenou instanci aplikace. Poté stránku průběžně obnovujte. V určitém okamžiku by měla být aplikace načtena z druhého serveru indikujícího vyrovnávání zátěže.

Právě jste se naučili, jak nastavit Nginx jako nástroj pro vyrovnávání zatížení HTTP v Linuxu. Rádi bychom znali váš názor na tuto příručku, a zejména na využití Nginx jako nástroje pro vyrovnávání zátěže, prostřednictvím formuláře pro zpětnou vazbu níže. Další informace najdete v dokumentaci Nginx o používání Nginx jako nástroje pro vyrovnávání zatížení HTTP.