Vyrovnávání zatížení HAProxy mezi webovými servery Nginx

V tomto článku ukážeme nastavení plánovače. HAProxy pro dva servery s nainstalovaným webovým serverem Nginx (může být nahrazen Apache). Ve všech případech se jako OS používá CentOS.

HAProxy - serverový software pro poskytování vysoké dostupnosti a vyrovnávání zátěže pro aplikace TCP a HTTP distribucí příchozích požadavků na několik serverů. HAProxy se používá na mnoha populárních zdrojích, včetně Twitter, Instagram, Github, Avito, Amazon a další.

HAProxy je nainstalován na samostatném serveru, který přijímá požadavky klientů a přesměruje je na webové servery Nginx. Obecná architektura systému je uvedena níže..

Obsah:

  • Konfigurace Nginx na serverech typu backend
  • Konfigurace vyrovnávače zatížení HAProxy
  • Možnosti konfiguračního souboru Haproxy.cfg
  • Sběr statistik HAProxy

Konfigurace Nginx na serverech typu backend

Začněme instalací a konfigurací Nginxu na našich webových serverech, mezi nimiž bude zatížení vyváženo. Nainstalujte úložiště EPEL a samotné nginx pomocí yum:

#yum install epel-release -y
#yum install nginx -y

Instalaci jsem provedl na dvou serverech najednou, protože servery jsou konfigurovány jeden po druhém (pro paralelní provádění příkazů na několika serverech můžete použít pdsh).

Dále v konfiguračních souborech nginx.conf Upozorňujeme, že servery by měly zpracovávat pouze požadavky ze serveru HaProxy a backend serverů:

1. backend server:

server poslech aktuální_server_IP: 80 default_server; povolit IP_server_backend_server; povolit IP_haproxy; popírat všechny; jméno_serveru _; root / usr / share / nginx / html; # Načíst konfigurační soubory pro výchozí blok serveru. zahrnují /etc/nginx/default.d/*.conf; umístění /  

2. backend server:

server poslech aktuální_server_IP: 80 default_server; povolit IP_first_backend_server; povolit IP_haproxy; popírat všechny; jméno_serveru _; root / usr / share / nginx / html; # Načíst konfigurační soubory pro výchozí blok serveru. zahrnují /etc/nginx/default.d/*.conf; umístění /  

Konfigurace nginx je standardní, do které jsme právě přidali poslouchejte IP servery a uzavřený přístup ke všem kromě našich serverů pomocí směrnic dovolit a popírat.

Aby webový server fungoval, musíte otevřít bránu firewall pomocí brány firewall nebo iptables:

# firewall-cmd - permanentní -add-service = http
# firewall-cmd -reload

Proveďte testovací kontrolu na kterémkoli z koncových serverů:

[root @ server ~] # curl Second_Server_IP

 zde byste měli získat html dokument 

Server dal standardní soubor indexu nginx, což znamená, že servery spolu navzájem spolupracují.

Pro usnadnění ověření jsem změnil obsah indexového souboru na každém koncovém serveru, takže během testování jasně vidím v prohlížeči, který server zpracoval požadavek.

Indexový soubor nginx je umístěn v / usr / share / nginx / html /.

Konfigurace vyrovnávače zatížení HAProxy

Začněme instalací a konfigurací HAProxy na serveru, který bude použit jako vyrovnávač zatížení.

Nainstalujte HaProxy a proveďte základní nastavení balanceru.

#yum install epel-release -y

#yum install haproxy -y

Načtené pluginy: fastestmirror Načítání rychlosti zrcadla z mezipaměti epil hostitele souboru / x86_64 / metalink ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ transakce Instalace: haproxy-1.5.18-9.el7.x86_64 1/1 Ověření: haproxy-1.5.18-9.el7.x86_64 1/1 Nainstalováno: haproxy.x86_64 0: 1.5.18-9.el7 Complete! 

Chcete-li povolit HaProxy, musíte přidat Povoleno = 1 do souboru / etc / default / haproxy:

#nano / etc / default / haproxy

Nyní přejdeme k samotnému nastavení HaProxy. V naší nejjednodušší konfiguraci vyvažovací server zpracuje všechny požadavky http a odešle je postupně na servery typu backend.

#nano /etc/haproxy/haproxy.cfg

log / dev / log local0 chroot / var / lib / haproxy pidfile /var/run/haproxy.pid maxconn 4000 uživatel haproxy skupina haproxy výchozí nastavení démona http log globální volba http log možnost redispatch načítá 3 timeout http-požadavek 10s timeout fronta 1m timeout připojení 10s timeout klient 1m timeout server 1m timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend www vazba balancer IP: 80 default_backend nginx_pool backend nginx_pool zůstatek roundrobin režim http server web1 first_backend_server IP: 80 check server web2 80 second_backend_server: 

Po uložení konfigurace zkontrolujte syntaxi pomocí příkazu:

#haproxy -f /etc/haproxy/haproxy.cfg -c

Pokud je vše v pořádku, získáte podobný výsledek:

Konfigurační soubor je platný

Poté musíte restartovat HaProxy a přidat jeho spuštění CentOS. A také otevřete nezbytná pravidla pro firewall.

#systemctl restartujte haproxy

#systemctl povolit haproxy

# firewall-cmd -permanent -add-service = http

# firewall-cmd -reload

Tím je dokončeno nastavení balanceru, zkontrolujte výsledek otevřením IP serveru s HaProxy v prohlížeči:

Jak vidíte, oba servery doručovaly obsah postupně, balancer funguje.

Možnosti konfiguračního souboru Haproxy.cfg

Vezměme si hlavní příklady algoritmů operace HaProxy:

  • roundrobin - výchozí algoritmus zasílá požadavky serverům. V našem příkladu jsme použili právě takovou metodu;
  • nejmenší - vybere server s nejmenším počtem aktivních připojení. Doporučuje se aplikovat na projekty, na kterých se mohou relace účastnit po dlouhou dobu;
  • zdroj - vybere server založený na hašování postaveném na základě uživatelů IP. V tomto režimu provozu bude stejný klient vždy přistupovat ke stejnému serveru, pokud jeho IP zůstane nezměněna;

Podívejme se na některé parametry v konfiguračním souboru.

Blok globální:

  • log - udržujte přihlašovací / dev / log ukládání local0 do "objektu";
  • chroot - nastavení zabezpečení, která zamykají HAProxy v zadaném adresáři;
  • maxconn - maximální počet konkurenčních připojení na proces;
  • user - uživatel, jménem kterého bude program spuštěn;
  • skupina - uživatelská skupina, jejímž jménem bude program spuštěn;
  • daemon - spusťte proces jako démona.

Blok výchozí. Tato část popisuje výchozí nastavení pro všechny ostatní oddíly, které ji následují:

  • log - označuje, který protokol se má zaznamenat (globální v tomto případě znamená, že jsou použity parametry uvedené v globální sekci);
  • režim - nastaví protokol interakce, vezme jednu z hodnot: tcp, http nebo health;
  • opakování - počet pokusů o připojení k serveru v případě selhání;
  • možnost httplog - formát protokolu, v případě použití HAProxy pro proxy požadavky HTTP;
  • možnost opětovné odeslání - Umožňuje programu ukončit a znovu přiřadit relaci v případě selhání serveru;
  • contimeout - maximální doba čekání na úspěšné připojení k serveru.

S různým časovým limitem je také spojeno velké množství parametrů.

Sběr statistik HAProxy

Přidejte blok statistik do konfiguračního souboru:

statistiky poslechu vazba: 10001 statistik umožňuje statistiky uri / haproxy_stats statistiky auth admin: admin 

Popis:

  • vázat - port, na kterém bude fungovat prohlížení statistik;
  • statistiky povolit - zahrnovat zprávy se statistikami;
  • statistiky uri - nastavení adresy stránky se statistikou;
  • statistiky autor - přihlašovací jméno a heslo.
Můžete zadat libovolný port, který vám vyhovuje, pokud je uvedený v článku zaneprázdněn nebo není pro vás vhodný.

Aby naše haproxy_stats fungovaly, musíte také otevřít dříve určený port na firewallu:

firewall-cmd - stálý -add-port = 10001 / tcp

firewall-cmd-reload

Chcete-li zobrazit zprávy o práci HAProxy, musíte kliknout na odkaz:

http: // hostname_haproxy: 10001 / haproxy_stats

Otevřete v prohlížeči adresu balanceru a spusťte spam F5. Statistiky na zadaném odkazu se změní, nástroj funguje.

Tím je naše nastavení dokončeno. V článku jsme zkoumali základní konfiguraci HaProxy. V našem návrhu se server vyrovnávání zatížení HaProxy stává jediným bodem selhání. Chcete-li zvýšit odolnost konfigurace proti chybám, můžete přidat druhý server HaProxy a zkontrolovat dostupnost mezi servery pomocí funkce Keepalived. Získáte něco takového.

Existuje mnoho dalších možností použití modulu HAProxy a vždy v něm najdete aplikaci..