Vyvažování zátěže mezi více aplikacemi, backendy a servery je součástí procesu optimalizace zdrojů, zlepšování výkonu a odolnosti služby vůči chybám.
Nginx jako nástroj pro vyrovnávání zatížení
Tento webový server je považován za jedno z nejoblíbenějších a nejproduktivnějších řešení, protože má nejširší funkčnost a flexibilitu při konfiguraci. Nginx se tedy často používá pro vyrovnávání zátěže.
Existuje několik přístupů a implementací, ale nejprve zkontrolujte dostupnost modulu ngx_http_upstream_module:
# nginx -v
Pokud chybí, budete muset znovu sestavit Nginx přidáním tohoto modulu. Poté můžete začít konfigurovat webový server. Chcete-li povolit vyvažování, přidejte direktivu pro upstream (část http) do konfiguračního souboru Nginx:
upstream backend { server backend1.somesite.com; server backend2.somesite.com; server backend3.somesite.com; }
Nyní je třeba zadat přesměrování potřebné skupiny:
server { location / { proxy_pass http://backend; } }
Nginx navíc podporuje další parametry a metody vyrovnávání zátěže.
Výběr metody vyvažování
Nginx nabízí několik metod vyrovnávání zátěže.
Round-robin
Ve výchozím nastavení webový server rozděluje požadavky rovnoměrně mezi backendy (ale s ohledem na váhy). Toto je standardní metoda v Nginx, takže neexistuje žádná směrnice o začlenění.
least_conn
Požadavky jsou nejprve odeslány do backendu s nejmenším počtem aktivních připojení (avšak s ohledem na váhy):
upstream backend { least_conn; server backend1.somesite.com; server backend2.somesite.com; }
Hash a IP hash
Pomocí této metody můžete vytvořit určitý druh trvalého spojení mezi klienty a backendy. Pro každý požadavek Nginx vypočítá hash, který se skládá z textu, proměnných webového serveru nebo jejich kombinace, a poté jej namapuje na backendy:
upstream backend { hash $scheme$request_uri; server backend1.somesite.com; server backend2.somesite.com; server backend3.somesite.com; }
IP hash funguje pouze s HTTP, toto je předdefinovaná možnost, ve které se hash vypočítává podle IP adresy klienta:
upstream backend { ip_hash; server backend1.somesite.com; server backend2.somesite.com; server backend3.somesite.com; }
Hmotnost zadní části
Pokud jsou některé backendy na stacku výkonnější než jiné, pak se váhy hodí:
upstream backend { server backend1.somesite.com weight=10; server backend2.somesite.com weight=5; server backend3.somesite.com; server 192.0.0.1 backup; }
V tomto příkladu z každých 16 požadavků zpracuje první backend 10, druhý 5 a třetí 1. V tomto případě bude záložní server přijímat požadavky pouze v případě, že tři hlavní backendy nejsou dostupné.
Monitorování
Pokud se Nginx domnívá, že backendový server je nedostupný, dočasně na něj zastaví odesílání požadavků. Jsou za to zodpovědné dvě směrnice:
- max_fails — nastavuje počet neúspěšných pokusů o připojení, po kterých je backend po určitou dobu považován za nedostupný;
- fail_timeout — doba, po kterou je server považován za nedostupný.
Parametry vypadají takto:
upstream backend { server backend1.somesite.com; server backend2.somesite.com max_fails=3 fail_timeout=30s; server backend3.somesite.com max_fails=2; }
Závěr
Výběr vhodného způsobu vyvažování umožní rovnoměrnější rozložení zátěže. Nezapomeňte na backendové váhy, monitorování a odolnost proti chybám serveru.