Webprojekte mit großer Auslastung und vielen Besuchern profitieren vom Server Load Balancing (SLB), welches neben einer verbesserten Datensicherheit (Redundanz der Front-End Servers) die Auslastung auf verschiedene Server verteilt und so eine mögliche Überlastung verhindert. Webseiten wie wordpress.com und wikipedia.com sind aufgrund der hohen Besucherdichte auf eine gute Lastverteilung angewiesen, welche nginx mit nur wenigen Handgriffen erledigen kann.
Verfahren:
Zur Lastverteilung gibt es verschiedene Loadbalancing-Mechanismen. Je nach Situation kann ein individueller Plan erstellt werden, um die Last auf die vorhandenen Server optimal auszulagern. Als Beispiel wäre die Überwachung der CPU und RAM zu erwähnen, welche bei bestimmter Auslastung einen weiteren Server ansteuern und die Last der Anfragen umverteilen. Auch eine Auswahl über den Round-Robin-Algorithmus ist möglich. Allerdings ist auch eine statische Verteilung der Anfragen denkbar, welche dauerhaft die Aufgaben verhältnismäßig auf die vorhandenen Server im Cluster aufteilt.
NAT based SLB:
Beim sogenannten Local Server Loadbalancing verwendet man im Normalfall das NAT-Verfahren. Hierbei zeigt die Zieladresse auf eine virtuelle Adresse des Load Balancers. Die Zieladresse variiert also je nach Einstellung – die Antwort der Anfrage geht jedoch wieder über die virtuelle Adresse des Load Balancers, welcher auch vom Client angesprochen wurde.
DNS based SLB:
Stehen die Server nicht am gleichen Standort, wird das DNS-Verfahren verwendet. Hierbei bekommt der Client bereits bei der DNS-Anfrage eine andere IP-Adresse zurück geliefert, je nachdem welcher Server momentan die Last übernehmen soll bzw. welcher Standort momentan verfügbar ist.
Load Balancing mit nginx:
Beim nginx Webserver handelt es um einen softwarebasierenden Load Balancer, welcher auf Layer 7 des OSI-Referenzmodells arbeitet. Dadurch bietet eine Verwendung von nginx als Load Balancer u.a. eine bessere Filterung als Alternativen wie IPVS, welche direkt auf Level 4 arbeiten – auch wenn IPVS ein wenig “leichtgewichtiger” ist als ein kompletter HTTP-Server. Auch Pound stellt eine bekannte Alternative dar, konnte sich jedoch im Vergleich nicht ganz stark gegen nginx halten.
Konfiguration:
Das Beste am Load Balancing mit nginx ist die leichte Konfiguration, welche auch für Laien meistens innerhalb von wenigen Minuten durchführbar ist. In der jeweiligen Config des Load Balancers wird im http-Teil einfach der nachfolgende Teil eingefügt bzw. konfiguriert. Das weight bestimmt dabei die Verteilung. Der default-Wert ist 1, Server mit einer höheren Einstellung erhalten auch mehr Traffic zugeordnet.
http { # [...] upstream server { server s1.server.com:8080 weight=2; server s2.server.com:8080 weight=1; server s3.server.com:8080 weight=4; server s4.server.com:8080 weight=2; } # [...] server { listen 80; server_name domain.com www.domain.com; location / { proxy_pass http://server; } } # [...] }
Fazit:
Es ist natürlich wichtig sicherzustellen, dass die Server sich gegenseitig vollständig spiegeln. Sollte man auf einem der Server im Cluster eine veraltete Version laufen haben, während alle anderen Server die neueste Version verwenden, so kann es schnell zu Problemen kommen. Weiterhin ist natürlich zu beachten, dass nginx nur verhältnismäßig die Anfragen umleitet und die verschiedenen Gewichtungen die einzige Möglichkeit darstellt, dies zu beeinflussen. Ansonsten bietet nginx eine einfache Lastverteilung ohne großartige Konfiguration und mit erstaunlich guten Ergebnissen.
© 2008 ¥akuza112 Inc.