GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nastavit HAProxy v Ubuntu 16.04

HAProxy je open source nástroj pro vyrovnávání zátěže a proxy služby s vysokou dostupností pro síťové aplikace založené na TCP a HTTP. Snadno se používá, hodí se pro velké objemy webových stránek a je bezproblémová integrace do stávajících architektur. Nabízí transparentní připojení, vytížení serveru, vynucování politik, omezení připojení kromě své primární funkce proxy služby. V tomto článku vysvětlujeme, jak nastavit haproxy v Ubuntu 16.04.

1. Nastavení sítě

Přidáme tři webové servery běžící s Apache2 a jeden HAPROXY server, který bude proxy všechny požadavky/odpovědi tří webových služeb v naší síti.

Následující seznam podrobností o webovém serveru v naší síti.

Server 1:    site1.local     10.0.1.116
Server 2:    site2.local     10.0.1.117
Server 3:    site3.local     10.0.1.119

Server HAProxy:

load-balancer.local      10.0.1.118

K load-balancer.local také připojíme jednu veřejnou IP, abychom k ní měli přístup z veřejné domény (volitelné). Pokud k němu nechcete přistupovat z veřejné domény, můžete přeskočit připojení veřejné IP za předpokladu, že budete přistupovat k proxy serveru ve vaší síti.

2. Nakonfigurujte název hostitele

Vzhledem k tomu, že budeme přistupovat k load balanceru a webovému serveru jejich jménem (ne IPADDRESS), proto nastavíme hostitelské jméno tří webových serverů a jednoho proxy serveru. Nastavíme název hostitele tří webových serverů a proxy serveru jako site1.local, site2.local, site3.local a load-balancer.local.

Nastavíme název hostitele 10.0.1.116 jako site1.local v /etc/hosts a /etc/hostname

root@site1:~# vi /etc/hosts
127.0.0.1 localhost
10.0.1.116 site1.local

root@site1:~# vi /etc/hostname
site1.local

Restartujte síť

root@site1:~#  service networking restart

Nainstalujte apache a povolte jej.

root@site1:~# apt-get install apache2

root@site1:~# service apache2 enable

root@site1:~# service apache2 start

Vytvořte soubor indexu pro site1.local

root@site1:~# vi /var/www/html/index.html

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Přidat pravidlo brány firewall pro http

# ufw allow 80/tcp
# ufw reload

Nyní zkontrolujte, zda máte přístup k site1

root@site1:~# curl -I site1.local
HTTP/1.1 200 OK
Date: Sun, 14 Aug 2016 14:30:29 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Sun, 14 Aug 2016 03:50:35 GMT
ETag: "ec-53a0004a26c6d"
Accept-Ranges: bytes
Content-Length: 236
Vary: Accept-Encoding
Content-Type: text/html

NEBO

root@site1:~#  curl  site1.local
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

Opakujte krok 2 pro web2 (10.0.1.117) a web3 (10.0.1.119).

V proxy serveru přidejte všechny tři položky webového serveru ( IPADDRESS HOSTNAME ) kromě jeho vlastního názvu hostitele jako load-balancer.local

root@load-balancer:~# vi  /etc/hosts
127.0.0.1 localhost
10.0.1.118 load-balancer.local
10.0.1.116 site1.local
10.0.1.117 site2.local
10.0.1.119 site3.local

Nastavte název hostitele proxy serveru

root@load-balancer:~# vi /etc/hostname
load-balancer.local

3. Nainstalujte HAProxy

Před instalací aktualizujte Ubuntu. Spusťte následující příkaz jako root nebo pomocí sudo aktualizujte ubuntu.

root@load-balancer:~# apt-get update

Nyní aktualizujte balíčky v systému.

root@load-balancer:~# apt-get upgrade

Nainstalujte jej provedením následujícího příkazu v terminálu.

root@load-balancer:~# apt-get install haproxy

Chcete-li povolit službu jako démona, upravte /etc/defaults/haproxy a přidejte následující řádek.
POVOLENO=1

root@load-balancer:~# vi /etc/defaults/haproxy

ENABLED=1
# Add extra flags here
#EXTRAOPTS="-de -m 16"

Spusťte službu

root@load-balancer:~# service haproxy start

4. Nakonfigurujte HAProxy

Konfigurační soubor se nachází v /etc/haproxy/haproxy.cfg a má dvě části, globální a proxy, část Global nastavuje parametry celého procesu a část proxy se skládá z výchozích, naslouchacích, front-end a back-end částí.

Upravte konfigurační soubor pomocí textového editoru vi

root@load-balancer:~# vi /etc/haproxy/haproxy.cfg

Výchozí konfigurační soubor bude vypadat asi takto. Ponechte globální a výchozí sekci tak, jak jsou.

Globální sekce

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
#  https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH
+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3

Výchozí sekce

defaults
log     global
mode    http
option  httplog
option  dontlognull
timeout connect 5000
timeout client  50000
timeout server  50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

Přidání posluchače:

Část "frontend" popisuje sadu naslouchacích soketů přijímajících klientská připojení. Front-end definuje, jak by měly být požadavky zpracovány a odeslány na back-end server:

frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers

Přidání back-endových webových serverů:

Část „back-end“ popisuje sadu serverů, ke kterým se proxy připojí, aby předávala příchozí spojení. Jak je uvedeno výše, nástroj pro vyrovnávání zatížení nyní naslouchá na portu 80. Nyní definujte back-endové webové servery, kam pošle požadavek.

backend My_Web_Servers
mode http
balance roundrobin
option forwardfor
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
option httpchk HEAD / HTTP/1.1rnHost:localhost
server site1.local  10.0.1.116:80
server site2.local  10.0.1.117:80
server site3.local  10.0.1.119:80

Na konec výše uvedených tří řádků můžete přidat parametr „check“ pro kontrolu parametru zdraví vašich webových serverů.

V závislosti na vašem požadavku můžete použít jiný vyrovnávací algoritmus.

Leastconn
Vybere server s nejmenším počtem připojení – doporučuje se pro delší relace. Servery ve stejném backendu se také střídají v režimu round-robin.

Zdroj
Tím se vybere, který server se má použít, na základě hash zdrojové IP, tj. IP adresy vašeho uživatele. Toto je jeden způsob, jak zajistit, že se uživatel připojí ke stejnému serveru.

Povolit statistiky (volitelné)

Nyní, pokud chcete, můžete povolit statistiky přidáním následujícího do konfiguračního souboru.

listen stats
bind :9000
stats enable
stats hide-version
stats refresh 20s
stats show-node
stats uri /stats

5. Restartujte HAProxy

Protože jste provedli všechny potřebné konfigurace pro proxy server, ověřte konfigurační soubor před restartováním služby pomocí následujícího příkazu.

root@load-balancer:~# haproxy -c -f /etc/haproxy/haproxy.cfg

Pokud výše uvedený příkaz vrátí výstup jako „konfigurační soubor je platný“, restartujte službu HAProxy

root@load-balancer:~# service haproxy restart

Nyní zkontrolujte stav serveru HAProxy.

root@load-balancer:~#  service haproxy status

6. Otestujte HAProxy

Před testováním se ujistěte, že můžete pingnout webový server (site1.local, site2.local, site3.local) z load-balancer.local

root@load-balancer:~# ping site1.local
PING site1.local (10.0.1.116) 56(84) bytes of data.
64 bytes from site1.local (10.0.1.116): icmp_seq=1 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=2 ttl=64 time=0.906 ms
64 bytes from site1.local (10.0.1.116): icmp_seq=3 ttl=64 time=0.648 ms

root@load-balancer:~# ping site2.local
PING site2.local (10.0.1.117) 56(84) bytes of data.
64 bytes from site2.local (10.0.1.117): icmp_seq=1 ttl=64 time=3.02 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=2 ttl=64 time=0.687 ms
64 bytes from site2.local (10.0.1.117): icmp_seq=3 ttl=64 time=0.778 ms

root@load-balancer:~# ping site3.local
PING site3.local (10.0.1.119) 56(84) bytes of data.
64 bytes from site3.local (10.0.1.119): icmp_seq=1 ttl=64 time=0.830 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=2 ttl=64 time=0.631 ms
64 bytes from site3.local (10.0.1.119): icmp_seq=3 ttl=64 time=0.771 ms

Otestujte HAPROXY pomocí CURL

Chcete-li otestovat spuštění následujícího skriptu z terminálu, zjistíte, že nástroj pro vyrovnávání zatížení odesílá požadavek na tři webové servery v kruhové metodě.

root@load-balancer:~# while true; do curl http://10.0.1.118; sleep 1; done
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.119 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.116 </h1>
</body>
</html>

<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<h1> Hi, This is 10.0.1.117 </h1>
</body>
</html>

...............................

...............................

...............................

Test v prohlížeči:

Nasměrujte svůj prohlížeč na http://load-balancer.local nebo http://Server-Public-IP. Obdržíte odpověď od tří webových serverů v kruhovém pořadí potvrzující, že funguje podle našeho očekávání. Při každém obnovení odesílá proxy server požadavek na back-end webový server jeden po druhém.

Můžete také navštívit statickou adresu URL, která je nakonfigurována v poslední části konfiguračního souboru, abyste potvrdili, že jsou porty otevřeny pro provoz. Jednoduše přejděte na veřejnou IP nebo http://load-balancer.local na portu 9000.

Přejděte například na http://load-balancer.local:9000/stats

Stav serveru můžete také sledovat z terminálu pomocí HATOP. HATOP je nástroj třetí strany, který extrahuje statistiky ze souboru soketu vytvořeného nástrojem pro vyrovnávání zatížení. Nainstalujte HATOP provedením následujícího příkazu z terminálu.

root@load-balancer:~# apt-get install hatop

Normálně při spouštění HATOP musíte použít parametr -s s příkazem sudo hatop -s /var/run/haproxy.sock. Abyste nemuseli zadávat parametr -s při volání HATOP, můžete do souboru ~/.bashrc vložit následující řádek:

exportovat unix-socket=/var/run/haproxy.sock

7. Protokolování HAProxy

Upravte /etc/rsyslog.d/haproxy.conf a přidejte do něj následující řádky.

local0.* -/var/log/haproxy_0.log
local1.* -/var/log/haproxy_1.log

Restartujte rsyslog

root@load-balancer:~# service rsyslog restart

Nyní zkontrolujte protokoly pomocí následujícího příkazu

root@load-balancer:~# tail -f /var/log/haproxy*.log

Také přidejte řádek „debug“ do globální části konfiguračního souboru pro podrobné protokolování.

Závěr

S HAProxy můžete zvýšit výkon a dostupnost vaší webové aplikace. Tento tutoriál je pouze úvodem do vyvažování zátěže, i když dokáže mnohem více, než je popsáno v tomto návodu. Vysokou dostupnost můžete zlepšit nastavením pohyblivé IP mezi více nástroji pro vyrovnávání zatížení, abyste se chránili před selháním v jediném nástroji pro vyrovnávání zatížení.


Ubuntu
  1. Jak nastavit Rsyslog Server na Ubuntu 18.04 LTS

  2. Jak nastavit MariaDB Galera Cluster na Ubuntu 20.04

  3. Jak nastavit UFW Firewall na Ubuntu 18.04

  1. Jak nastavit server OpenVPN na Ubuntu 20.04

  2. Jak nastavit Elasticsearch na Ubuntu 18.04 a 16.04 LTS

  3. Nastavení serveru Rsyslog na Ubuntu 20.04 – Jak na to?

  1. Jak nakonfigurovat HAProxy na serveru Debian 9 / Ubuntu 16.04

  2. Jak nastavit Riak KV Database Cluster na Ubuntu 18.04

  3. Jak nastavit Odoo OpenERP na Ubuntu 18.04