Mit Hilfe von Apache2 können Sie einen Load Balancer für Ihre Webserver einrichten.
Ein Webserver muss als Load Balancer fungieren, der dann die Anfragen der Webbenutzer auf andere Server in einem "Cluster" verteilt. Diese Server in dem Cluster spiegeln (mirroring) ihren Web-Servers.
Der "Cluster" enthält alle Webserver, die auf verteilte Anfragen vom Load Balancer warten.
Sie müssen die folgenden Module auf dem Server, der als Load Balancer gewählt wurde, aktivieren.
a2enmod mod_proxy mod_proxy_balancer mod_proxy_http mod_cache mod_disk_cache mod_deflate mod_rewrite mod_headers lbmethod_byrequests
Diese Module richten das Proxy-Modul ein, das für den Load Balancer benötigt wird. Aber auch andere Module, die für die Verarbeitung der HTTP-Header und Daten benötigt werden.
Dies ist ein Beispiel dafür, wie Sie einen Load Balancer in Apache2 einrichten können, der Anfragen auf drei Server verteilt. Diese drei Server sind Teil unseres Clusters "mycluster".
Fügen Sie dies zu einer vhost-Datei hinzu. So würde die Konfiguration eines Load Balancer in einem SSL-Vhost aussehen:
<IfModule mod_ssl.c>
<VirtualHost *:443>
#Servername / Domain-Name Ihres Load Balancers - dies sollte der Domain-Name Ihrer Website sein
ServerName my-load-balancer-server-name
DocumentRoot /var/www/
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
#Einstellungen des Load Balancer-Verhaltens
ProxyRequests Off
ProxyPreserveHost Off
SSLProxyEngine On
#Deactive check if the SSL certificate is valid. If you did activate these two commands and you use Let's Encrypt certificate, then this could cause SSL handshake errors.
SSLProxyCheckPeerCN off
SSLProxyCheckPeerExpire off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
#Einstellungen des Load Balancers
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ stickysession=BALANCEID nofailover=On
#Die verschiedenen Domänennamen unserer Server im Cluster werden über dieselbe URL aufgerufen.
ProxyPassReverse / https://1.domain.tld/
ProxyPassReverse / https://2.domain.tld/
ProxyPassReverse / https://3.domain.tld/
#Die Server, die sich in unserem Cluster "mycluster" befinden - Einstellungen für die Verteilung der Anfragen unter den Servern
<Proxy balancer://mycluster>
BalancerMember https://1.domain.tld route=httpOne status=-SE timeout=30 retry=60
BalancerMember https://2.domain.tld route=httpTwo status=-SE timeout=30 retry=60
BalancerMember https://3.domain.tld route=httpThree status=-SE timeout=30 retry=60
#ProxySet lbmethod=bybusyness failontimeout=on
ProxySet lbmethod=byrequests failontimeout=on
</Proxy>
#Beschränkter Zugriff auf die GUI des Load Balancers - Benutzerkonten werden in /etc/apache2/.htpasswd definiert
<Location /balancer-manager>
SetHandler balancer-manager
AuthType Basic
AuthName "Please enter your username and password"
AuthUserFile /etc/apache2/.htpasswd
require valid-user
</Location>
</VirtualHost>
</IfModule>
Dies ist nur ein Ausschnitt des vhosts und zeigt nur die Einstellungen des Load Balancers. In diesem Beispiel verteilt der Load Balancer die Anfragen nach der Anzahl der Anfragen (lbmethod=byrequests). Der Load Balancer prüft 30 Sekunden lang, ob der Server erreichbar ist. Wenn ein Server nicht erreichbar ist (Ursache: Fehler usw.), dann verteilt der Load Balancer die Anfrage auf einen anderen Server. Nach 60 Sekunden prüft der Load Balancer, ob der Server wieder erreichbar ist.
Soll der Load Balancer so verteilen, wie der Server mit Anfragen ausgelastet ist, dann müssen Sie die Methode "lbmethod=bybusyness" verwenden. Diese Methode benötigt das Modul "lbmethod_bybusyness".
Andere Verteilungsmethoden:
https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html