Vyrovnávač zátěže pro Linux Distribuuje příchozí provoz mezi více backendových serverů, aby se zvýšila dostupnost, výkon a odolnost proti chybám. Chcete-li vytvořit vyrovnávač zátěže na serveru Linux, nainstalujte a nakonfigurujte proxy, jako je HAProxy nebo Nginx, nastavit kontroly stavu, povolit SSL v případě potřeby ukončit a zajistit, monitorovat a testovat vysokou dostupnost.
Pokud vás zajímá, jak vytvořit vyrovnávač zátěže na Linuxovém serveru, tato příručka vás provede nastavením připraveným pro produkční prostředí pomocí Nginx a HAProxy s volitelnou vysokou dostupností přes Keepalived.
Probereme plánování, instalaci, konfiguraci, SSL ukončení, trvalé relace, zabezpečení, monitorování a ladění výkonu – krok za krokem a vhodné pro začátečníky.
Co je to Linux Load Balancer (a proč ho potřebujete)
Vyrovnávač zátěže (load balancer) je umístěn před vašimi aplikačními servery a směruje požadavky na zdravé instance. To vám pomáhá zvládat špičky v provozu, zkracovat prostoje a horizontálně škálovat. V Linuxu jsou nejoblíbenějšími open-source možnostmi Nginx a HAProxy pro vyvažování zátěže na vrstvě 7 (HTTP/HTTPS) a vrstvě 4 (TCP) a LVS/IPVS pro ultravysokou propustnost na vrstvě 4.

Předpoklady a plánování architektury
Než začnete, naplánujte si architekturu a shromážděte základní informace:
- 1 veřejný Linuxový server (Debian/Ubuntu/CentOS/RHEL/AlmaLinux/Rocky) pro vyrovnávač zátěže
- 2+ privátní/backendové servery, na kterých běží vaše aplikace (např. Node.js, PHP-FPM, Django nebo statický obsah)
- Doména a DNS záznam (A/AAAA) ukazující na balancer
- Přístup root nebo sudo, otevřené porty 80/443
- SSL certifikát (Pojďme šifrovat nebo si to na míru upravíme)
Rozhodněte o: -
- Vyvažování vrstvy 7 (HTTP/HTTPS) vs. vrstvy 4 (TCP)
- Algoritmus vyvažování zátěže (round robin, leastconn, hash zdroje/IP adresy)
- Potřeby pro perzistenci relace (stálé relace)
- Aktivní kontroly stavu vs. pasivní kontroly
- Jeden load balancer vs. vysoká dostupnost (aktivní/pasivní s VRRP)
Možnost 1: Vytvořte vyrovnávač zátěže HTTP/HTTPS pomocí Nginx
Nginx je lehký, rychlý reverzní proxy a HTTP load balancer. Ve výchozím nastavení podporuje round robin s volitelnou perzistencí relace založenou na IP adrese.
instalovat Nginx
# Debian/Ubuntu
sudo apt update && sudo apt install -y nginx
# RHEL/CentOS/Alma/Rocky
sudo dnf install -y nginx
sudo systemctl enable --now nginxKonfigurace upstreamů a vyvažování zátěže
Vytvořte upstream s vašimi backendovými servery a serverový blok, který proxyje požadavky. Tento příklad používá round robin s pasivními kontrolami stavu.
sudo nano /etc/nginx/conf.d/loadbalancer.conf
upstream app_backend {
# Use round-robin by default
server 10.0.0.11:8080 max_fails=3 fail_timeout=10s;
server 10.0.0.12:8080 max_fails=3 fail_timeout=10s;
# For simple persistence, uncomment IP hash:
# ip_hash;
}
server {
listen 80;
server_name example.com;
# Redirect HTTP to HTTPS (uncomment after SSL is ready)
# return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/ssl/certs/example.crt;
ssl_certificate_key /etc/ssl/private/example.key;
# Security and performance
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
client_max_body_size 25m;
proxy_read_timeout 60s;
location / {
proxy_pass http://app_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# Health endpoint passthrough
location /health {
proxy_pass http://app_backend/health;
}
}Ověřit a znovu načíst:
sudo nginx -t
sudo systemctl reload nginxumožnit SSL s Let's Encrypt (volitelné)
# Debian/Ubuntu
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
# RHEL family (EPEL may be required)
sudo dnf install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.comNginx open source podporuje pasivní kontroly stavu prostřednictvím max_fails/fail_timeoutPro pokročilé aktivní kontroly stavu nebo trvalost na základě souborů cookie zvažte HAProxy nebo NGINX Plus. Pro jednodušší perzistenci použijte ip_hash.
Možnost 2: Vytvořte TCP/HTTP Load Balancer pomocí HAProxy
HAProxy vyniká ve vyvažování zátěže HTTP vrstvy 7 a TCP vrstvy 4, nabízí robustní kontroly stavu, podrobnou sledovatelnost a vestavěné lepivé relace, což ho činí ideálním pro produkční úlohy.
Instalace HAProxy
# Debian/Ubuntu
sudo apt update && sudo apt install -y haproxy
# RHEL/CentOS/Alma/Rocky
sudo dnf install -y haproxy
sudo systemctl enable --now haproxyZákladní HTTP Load Balancer (cyklické zpracování + kontroly stavu)
sudo nano /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
maxconn 50000
tune.ssl.default-dh-param 2048
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5s
timeout client 60s
timeout server 60s
retries 3
frontend fe_http
bind *:80
redirect scheme https code 301 if !{ ssl_fc }
frontend fe_https
bind *:443 ssl crt /etc/ssl/private/example.pem
mode http
option httpclose
option forwardfor
default_backend be_app
backend be_app
mode http
balance roundrobin
option httpchk GET /health
http-check expect rstring OK
server app1 10.0.0.11:8080 check fall 3 rise 2
server app2 10.0.0.12:8080 check fall 3 rise 2
listen stats
bind *:8404
mode http
stats enable
stats uri /stats
stats refresh 5s
# Protect with basic auth
stats auth admin:StrongPassHereZřetězení certifikátu a klíče do PEM pro HAProxy:
sudo bash -c 'cat /etc/ssl/certs/example.crt /etc/ssl/private/example.key > /etc/ssl/private/example.pem'
sudo chmod 600 /etc/ssl/private/example.pem
sudo systemctl restart haproxyPevné relace (založené na souborech cookie)
backend be_app
mode http
balance roundrobin
cookie SRV insert indirect nocache
option httpchk GET /health
http-check expect rstring OK
server app1 10.0.0.11:8080 check cookie s1
server app2 10.0.0.12:8080 check cookie s2Základy omezení rychlosti a DDoS útoků
frontend fe_https
# ...previous lines...
stick-table type ip size 200k expire 10m store http_req_rate(10s)
tcp-request connection track-sc0 src
acl too_fast sc0_http_req_rate gt 50
http-request deny if too_fastToto omezuje počet požadavků zneužívajících klientů na 50 za 10 sekund. Upravte podle své pracovní zátěže.
Vysoká dostupnost s Keepalived (virtuální IP adresa VRRP)
Abyste se vyhnuli jedinému bodu selhání, spusťte dva nástroje pro vyrovnávání zátěže (LB1 a LB2) a pomocí služby Keepalived mezi nimi přesměrujte virtuální IP adresu (VIP). Klienti se připojují k VIP, která se automaticky přepne na fail-over.
Instalace a konfigurace Keepalivedu
# Debian/Ubuntu
sudo apt install -y keepalived
# RHEL family
sudo dnf install -y keepalived# On LB1 (MASTER)
sudo nano /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 200
advert_int 1
authentication {
auth_type PASS
auth_pass StrongVRRPPass
}
virtual_ipaddress {
203.0.113.10/24 dev eth0
}
track_process {
haproxy
}
}
# On LB2 (BACKUP)
sudo nano /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass StrongVRRPPass
}
virtual_ipaddress {
203.0.113.10/24 dev eth0
}
track_process {
haproxy
}
}
sudo systemctl enable --now keepalivedOtestujte failover zastavením HAProxy nebo Keepalived na LB1 a ověřením přesunů VIP na LB2:
ip addr show | grep 203.0.113.10
sudo systemctl stop haproxy # triggers VIP failoverFirewall, SELinux a zabezpečení
Otevřete požadované porty
# UFW (Ubuntu)
sudo ufw allow 80,443/tcp
sudo ufw allow 8404/tcp # HAProxy stats (optional)
sudo ufw enable
# firewalld (RHEL family)
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --add-port=8404/tcp --permanent
sudo firewall-cmd --reloadKontexty SELinuxu (HAProxy)
# Place certs where HAProxy can read them:
sudo mkdir -p /etc/pki/haproxy
sudo cp example.pem /etc/pki/haproxy/
sudo chown haproxy:haproxy /etc/pki/haproxy/example.pem
sudo chmod 600 /etc/pki/haproxy/example.pem
# If SELinux is enforcing, label context:
sudo semanage fcontext -a -t haproxy_etc_t "/etc/pki/haproxy(/.*)?"
sudo restorecon -Rv /etc/pki/haproxyLadění systému
sudo tee -a /etc/sysctl.d/99-lb-tuning.conf > /dev/null <<'EOF'
net.core.somaxconn=65535
net.ipv4.ip_local_port_range=10240 65000
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_fin_timeout=15
net.core.netdev_max_backlog=16384
EOF
sudo sysctl --system
# Increase file descriptors
echo '* soft nofile 200000' | sudo tee -a /etc/security/limits.conf
echo '* hard nofile 200000' | sudo tee -a /etc/security/limits.confMonitorování, protokoly a pozorovatelnost
- Povolte stránku se statistikami HAProxy na portu 8404 (jak je znázorněno) a chraňte ji pomocí auth.
- Odesílejte protokoly do centrálního systému (Elastic, Loki, CloudWatch) pomocí rsyslog nebo Vector.
- Sledujte klíčové metriky: míru požadavků, aktivní připojení, dobu odezvy, stav backendu, rychlosti 4xx/5xx.
- Pro dashboardy použijte node_exporter a HAProxy exporter s Prometheus + Grafana.
Benchmark a ladění
- Použijte
wrkorabpro zátěžový test proti LB VIP nebo doméně. - Upravit časové limity (
timeout connect/client/server) aby odpovídaly chování aplikace. - Vyberte správný algoritmus:
leastconnpro dlouhodobé požadavky;roundrobinpro rovnoměrné zatížení;sourcepro jednoduchou vytrvalost. - Horizontálně škálujte backendy; přidávejte/odebírejte servery bez výpadků.
Časté chyby a rychlé opravy
- 502 Špatná brána: Zkontrolujte port backendu, firewall, SELinux nebo cestu pro kontrolu stavu.
- SSL selhání handshake: Zajistěte plný řetězec PEM pro HAProxy a správná oprávnění k souborům.
- Znovu načtení selhalo: Ověřte syntaxi konfigurace (
nginx -t/haproxy -c -f /etc/haproxy/haproxy.cfg). - Zaseknuté relace nefungují: Potvrďte vložení cookies a aplikace je respektuje.
- VIP se nehýbe: Ověřte priority Keepalived, VRRP ID, názvy rozhraní a sledování procesů.
Kdy použít spravované vyvažování zátěže
Pokud nechcete manage SSL zvažte obnovení, failover, monitorování a opravy managevyvažování zátěže d. V YouStable, naši inženýři navrhují a provozují HAProxy/Nginx klastry s VRRP, SSL offload, WAF a nepřetržitá sledovatelnost – abyste se mohli soustředit na svou aplikaci. Zeptejte se nás na migraci nebo kontrolu výkonu.
FAQs
1. Co je lepší pro vyvažování zátěže v Linuxu: Nginx nebo HAProxy?
Nginx je vynikající pro jednoduché reverzní proxyování HTTP a statický obsah. HAProxy nabízí bohatší kontroly stavu, podrobné metriky, pokročilou stabilitu a podporu TCP. Pro většinu produkčních aplikací je HAProxy bezpečnější výchozí volbou. Mnoho týmů ji používá. Nginx na okraji sítě a HAProxy pro směrování aplikací.
2. Jak přidám SSL k mému vyrovnávači zátěže v Linuxu?
Používejte Let's Encrypt s NginxPlugin Certbot nebo bind SSL v HAProxy se souborem PEM, který zřetězí certifikát a privátní klíč. Ukončete TLS na straně vyrovnávače zátěže a proxyujte HTTP do backendů nebo v případě potřeby přešifrujte na HTTPS.
3. Potřebuji pro svou aplikaci fixed sessions (sticky sessions)?
Použijte trvalé relace, pokud vaše aplikace ukládá stav relace do paměti na jednom backendu (např. PHP soubory relací). Pro bezstavové aplikace nebo distribuovaná úložiště relací (Redis, databáze) nepotřebujete lepivost. HAProxy podporuje lepivost založenou na souborech cookie; Nginx open-source podporuje IP protokoly ip_hash.
4. Jak mohu zajistit vysokou dostupnost nástroje pro vyrovnávání zátěže?
Nasaďte dva uzly pro vyrovnávání zátěže a virtuální IP adresu pomocí služby Keepalived (VRRP). VIP se automaticky přepne při selhání, pokud primární uzel nebo proces přestane fungovat. Můžete také použít cloud-managed Návrhy založené na LB nebo BGP pro větší prostředí.
5. Jaký je rozdíl mezi vyvažováním zátěže na vrstvě 4 a vrstvě 7?
Vrstva 4 pracuje na transportní úrovni (TCP/UDP) a je extrémně rychlá, ale postrádá podporu HTTP. Vrstva 7 rozumí HTTP hlavičkám, cestám a souborům cookie, což umožňuje funkce jako směrování URL, přepisování hlaviček, kompresi a trvalé relace. Vyberte na základě potřeb funkcí a výkonnostních cílů.