English English

Load Balancing (Lastausgleich) eines Web-Servers - Apache2

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

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Ok