GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

So richten Sie HAProxy in Ubuntu 16.04 ein

HAProxy ist ein hochverfügbares Open-Source-Load-Balancing- und Proxy-Service-Tool für TCP- und HTTP-basierte Netzwerkanwendungen. Es ist einfach zu bedienen, eignet sich für hochvolumige Websites und lässt sich nahtlos in bestehende Architekturen integrieren. Es bietet neben seiner primären Funktion als Proxy-Dienst transparente Verbindungen, Server-Offloading, Durchsetzung von Richtlinien und Begrenzung von Verbindungen. In diesem Artikel erklären wir, wie man Haproxy in Ubuntu 16.04 einrichtet.

1. Netzwerk einrichten

Wir werden drei Webserver hinzufügen, die mit Apache2 laufen, und einen HAPROXY-Server, der alle Anfragen/Antworten der drei Webdienste in unserem Netzwerk weiterleitet.

Im Folgenden werden Webserverdetails in unserem Netzwerk aufgelistet.

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

HAProxy-Server:

load-balancer.local      10.0.1.118

Wir werden auch eine öffentliche IP an load-balancer.local anhängen, um von der öffentlichen Domäne aus darauf zuzugreifen (optional). Wenn Sie nicht von der Public Domain darauf zugreifen möchten, können Sie das Anhängen der öffentlichen IP überspringen, vorausgesetzt, Sie greifen auf den Proxy-Server innerhalb Ihres Netzwerks zu.

2. Hostnamen konfigurieren

Da wir über ihren Namen auf den Load Balancer und den Webserver zugreifen werden (nicht über IPADDRESS), werden wir daher den Hostnamen von drei Webservern und einem Proxyserver einrichten. Wir werden den Hostnamen von drei Webservern und Proxyservern als site1.local, site2.local, site3.local bzw. load-balancer.local einrichten.

Wir werden den Hostnamen 10.0.1.116 als site1.local in /etc/hosts und /etc/hostname

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

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

Netzwerk neu starten

root@site1:~#  service networking restart

Apache installieren und aktivieren.

root@site1:~# apt-get install apache2

root@site1:~# service apache2 enable

root@site1:~# service apache2 start

Erstellen Sie eine Indexdatei für 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>

Firewallregel für http hinzufügen

# ufw allow 80/tcp
# ufw reload

Prüfen Sie nun, ob Sie auf Seite1 zugreifen können

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

ODER

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>

Wiederholen Sie Schritt 2 für Site2 ( 10.0.1.117 ) und Site3 ( 10.0.1.119 ).

Fügen Sie im Proxy-Server alle drei Webserver-Einträge ( IPADDRESS HOSTNAME ) außer seinem eigenen Hostnamen als load-balancer.local

hinzu
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

Richten Sie den Hostnamen des Proxy-Servers ein

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

3. Installieren Sie HAProxy

Aktualisieren Sie Ubuntu vor der Installation. Führen Sie den folgenden Befehl als root aus oder verwenden Sie sudo, um Ubuntu zu aktualisieren.

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

Jetzt Pakete auf dem System aktualisieren.

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

Installieren Sie es, indem Sie den folgenden Befehl im Terminal ausführen.

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

Um den Dienst als Daemon zu aktivieren, bearbeiten Sie /etc/defaults/haproxy und fügen Sie die folgende Zeile hinzu.
ENABLED=1

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

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

Starten Sie den Dienst

root@load-balancer:~# service haproxy start

4. HAProxy konfigurieren

Die Konfigurationsdatei befindet sich in /etc/haproxy/haproxy.cfg und besteht aus zwei Teilen global und proxies. Der Abschnitt Global legt prozessweite Parameter fest und der Abschnitt Proxy besteht aus den Abschnitten defaults, listen, front-end und back-end.

Bearbeiten Sie die Konfigurationsdatei mit dem Texteditor vi

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

Die Standardkonfigurationsdatei sieht etwa wie folgt aus. Behalten Sie den globalen und den Standardabschnitt unverändert bei.

Globaler Abschnitt

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

Standardabschnitt

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

Zuhörer hinzufügen:

Ein "Front-End"-Abschnitt beschreibt einen Satz von Listening-Sockets, die Client-Verbindungen akzeptieren. Das Front-End definiert, wie Anfragen behandelt und an den Back-End-Server gesendet werden sollen:

frontend Local_Server
bind 10.0.1.118:80
mode http
default_backend My_Web_Servers

Hinzufügen von Back-End-Webservern:

Ein "Back-End"-Abschnitt beschreibt eine Reihe von Servern, mit denen sich der Proxy verbindet, um eingehende Verbindungen weiterzuleiten. Gemäß der obigen Konfiguration lauscht der Load Balancer jetzt auf Port 80. Definieren Sie nun die Back-End-Webserver, an die er die Anfrage senden wird.

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

Sie können am Ende der obigen drei Zeilen den Parameter „check“ hinzufügen, um den Zustandsparameter Ihrer Webserver zu überprüfen.

Sie können je nach Ihren Anforderungen andere Ausgleichsalgorithmen verwenden.

Leastconn
Wählt den Server mit der geringsten Anzahl von Verbindungen aus – dies wird für längere Sitzungen empfohlen. Server im selben Backend werden ebenfalls im Round-Robin-Modus rotiert.

Quelle
Dies wählt aus, welcher Server basierend auf einem Hash der Quell-IP, d. h. der IP-Adresse Ihres Benutzers, verwendet werden soll. Dies ist eine Methode, um sicherzustellen, dass sich ein Benutzer mit demselben Server verbindet.

Statistiken aktivieren (optional)

Wenn Sie möchten, können Sie jetzt Statistiken aktivieren, indem Sie Folgendes in die Konfigurationsdatei einfügen.

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

5. Starten Sie HAProxy neu

Da Sie alle erforderlichen Konfigurationen für den Proxy-Server vorgenommen haben, überprüfen Sie die Konfigurationsdatei, bevor Sie den Dienst mit dem folgenden Befehl neu starten.

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

Wenn der obige Befehl die Ausgabe als „Konfigurationsdatei ist gültig“ zurückgegeben hat, starten Sie den HAProxy-Dienst neu

root@load-balancer:~# service haproxy restart

Überprüfen Sie nun den Status des HAProxy-Servers.

root@load-balancer:~#  service haproxy status

6. Testen Sie HAProxy

Stellen Sie vor dem Testen sicher, dass Sie den Webserver (site1.local, site2.local, site3.local) von load-balancer.local aus anpingen können

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

HAPROXY mit CURL testen

Um das folgende Skript vom Terminal aus zu testen, werden Sie feststellen, dass der Load Balancer Anfragen an drei Webserver in einer Round-Robin-Methode sendet.

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>

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

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

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

Im Browser testen:

Richten Sie Ihren Browser auf http://load-balancer.local oder http://Server-Public-IP, Sie erhalten eine Antwort von drei Webservern in Round-Robin-Weise, die bestätigen, dass er mit unserer Erwartung funktioniert. Bei jeder Aktualisierung sendet der Proxy-Server eine Anfrage nach der anderen an den Back-End-Webserver.

Sie können auch die Statistik-URL aufrufen, die im letzten Abschnitt der Konfigurationsdatei konfiguriert ist, um zu bestätigen, dass die Ports für den Datenverkehr geöffnet sind. Navigieren Sie einfach zu Public IP oder http://load-balancer.local auf Port 9000.

Navigieren Sie beispielsweise zu http://load-balancer.local:9000/stats

Sie können den Status des Servers auch vom Terminal aus mit HATOP überwachen. HATOP ist ein Drittanbieter-Tool, das die Statistiken aus einer vom Load Balancer erstellten Socket-Datei extrahiert. Installieren Sie HATOP, indem Sie den folgenden Befehl vom Terminal ausführen.

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

Normalerweise müssen Sie beim Ausführen von HATOP den Parameter -s mit dem Befehl sudo hatop -s /var/run/haproxy.sock verwenden. Um die Eingabe des Parameters -s beim Aufruf von HATOP zu vermeiden, können Sie die folgende Zeile in Ihre ~/.bashrc-Datei einfügen:

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

7. Protokollierung von HAProxy

Bearbeiten Sie /etc/rsyslog.d/haproxy.conf und fügen Sie die folgenden Zeilen hinzu.

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

Starten Sie rsyslog neu

root@load-balancer:~# service rsyslog restart

Überprüfen Sie nun die Protokolle mit dem folgenden Befehl

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

Fügen Sie außerdem die Zeile „debug“ in den globalen Abschnitt der Konfigurationsdatei für die ausführliche Protokollierung ein.

Schlussfolgerung

Mit HAProxy steigern Sie die Performance und Verfügbarkeit Ihrer Webanwendung. Dieses Tutorial ist nur eine Einführung in das Load Balancing, obwohl es viel mehr kann als das, was in diesem Tutorial beschrieben wird. Sie können die Hochverfügbarkeit verbessern, indem Sie Floating IP zwischen mehreren Load Balancern einrichten, um einen Schutz vor Fehlern in einem einzelnen Load Balancer zu bieten.


Ubuntu
  1. So richten Sie den Rsyslog-Server unter Ubuntu 18.04 LTS ein

  2. So richten Sie den MariaDB Galera-Cluster unter Ubuntu 20.04 ein

  3. So richten Sie die UFW-Firewall unter Ubuntu 18.04 ein

  4. So richten Sie Elasticsearch unter Ubuntu 18.04 und 16.04 LTS ein

  5. Rsyslog-Server auf Ubuntu 20.04 einrichten - Wie geht das?

So richten Sie den Git-Server unter Ubuntu 20.04 ein

So richten Sie den Rsyslog-Server unter Ubuntu ein

So richten Sie einen DHCP-Server unter Ubuntu ein

So richten Sie die Netzwerkbindung in Ubuntu 20.04 ein

So richten Sie HAProxy unter CentOS 8 ein

So richten Sie die UFW-Firewall unter Ubuntu 20.04 ein