ADMIN

2023

09

2023-08-30T12:00:00

Hochverfügbarkeit und Monitoring

SCHWERPUNKT

088

Hochverfügbarkeit

Loadbalancing

Windows Server

Network Loadbalancing mit Windows Server

Lastenträger

von Thomas Joos

Veröffentlicht in Ausgabe 09/2023 - SCHWERPUNKT

Network-Loadbalancing-Cluster gibt es schon eine Weile in Windows Server und sind im Zusammenhang mit RDP oder Webdiensten sinnvoll einsetzbar. Bei der Konfiguration mehrerer Server zu einem gemeinsamen Cluster verbinden sich Anwender zunächst mit diesem und werden dann zum jeweiligen Server weitergeleitet, der die Benutzeranfragen bearbeitet. Dabei kann es sich um virtuelle oder physische Maschinen handeln. Wir zeigen den Nutzen von Network Loadbalancing und dessen Einrichtung.

Das Network Load Balancing (NLB) ist eine integrierte Funktion in Windows Server 2019 sowie 2022. Das Feature ermöglicht es, den Netzwerkverkehr über mehrere Server zu verteilen, ohne hierfür zusätzliche Hardware anschaffen zu müssen. Das Ergebnis ist eine verbesserte Performance, Skalierbarkeit und Verfügbarkeit von Anwendungen. Die Verwaltung erweist sich als nicht sonderlich kompliziert und NLB-Cluster sind sehr flexibel bei der Einrichtung und Verwaltung.
Der erste und vielleicht offensichtlichste Vorteil von Network Loadbalancing liegt in der Verbesserung der Leistung sowie der Fähigkeit, hohe Lastspitzen zu bewältigen und diese so auf verschiedene Server zu verteilen, sodass kein einzelner mehr überlastet wird. Das ist besonders wichtig für stark frequentierte Websites und Anwendungen, bei denen Spitzen im Netzwerkverkehr zu spürbaren Leistungseinbußen oder sogar zu Ausfallzeiten führen können.
Ein weiterer Vorteil von NLB liegt in der Verbesserung der Skalierbarkeit. So können Unternehmen ihre Serverinfrastruktur nach Bedarf erweitern, indem sie einfach zusätzliche Server zum Cluster hinzufügen. Das ist besonders praktisch für wachsende Unternehmen, die ihre IT-Infrastruktur laufend anpassen müssen. Darüber hinaus erhöht NLB die Verfügbarkeit von Anwendungen und Diensten. Beim Ausfall eines Servers bleibt der Dienst an sich weiterhin verfügbar. Das ist von entscheidender Bedeutung für kritische Anwendungen und Dienste.
Das Network Load Balancing (NLB) ist eine integrierte Funktion in Windows Server 2019 sowie 2022. Das Feature ermöglicht es, den Netzwerkverkehr über mehrere Server zu verteilen, ohne hierfür zusätzliche Hardware anschaffen zu müssen. Das Ergebnis ist eine verbesserte Performance, Skalierbarkeit und Verfügbarkeit von Anwendungen. Die Verwaltung erweist sich als nicht sonderlich kompliziert und NLB-Cluster sind sehr flexibel bei der Einrichtung und Verwaltung.
Der erste und vielleicht offensichtlichste Vorteil von Network Loadbalancing liegt in der Verbesserung der Leistung sowie der Fähigkeit, hohe Lastspitzen zu bewältigen und diese so auf verschiedene Server zu verteilen, sodass kein einzelner mehr überlastet wird. Das ist besonders wichtig für stark frequentierte Websites und Anwendungen, bei denen Spitzen im Netzwerkverkehr zu spürbaren Leistungseinbußen oder sogar zu Ausfallzeiten führen können.
Ein weiterer Vorteil von NLB liegt in der Verbesserung der Skalierbarkeit. So können Unternehmen ihre Serverinfrastruktur nach Bedarf erweitern, indem sie einfach zusätzliche Server zum Cluster hinzufügen. Das ist besonders praktisch für wachsende Unternehmen, die ihre IT-Infrastruktur laufend anpassen müssen. Darüber hinaus erhöht NLB die Verfügbarkeit von Anwendungen und Diensten. Beim Ausfall eines Servers bleibt der Dienst an sich weiterhin verfügbar. Das ist von entscheidender Bedeutung für kritische Anwendungen und Dienste.
Loadbalancing in Windows Server vorbereiten
Insgesamt können Sie bis zu 32 Server an einem NLB-Cluster anbinden. Dadurch lassen sich verschiedenen Dienste skalieren, die auf TCP setzen. NLB-Cluster können dabei auch mehrere Anfragen des gleichen Clients auf unterschiedliche oder gleiche Knoten verteilen. Zur Skalierung ist es möglich, jederzeit weitere Hosts dem Cluster hinzuzufügen oder nicht mehr benötigte Server daraus zu entfernen. Ein Vorteil eines NLB-Clusters mit Windows Server liegt im einfachen Erstellen und Verwalten desselben über die grafische Oberfläche oder die PowerShell.
Um einen Host in einen NLB-Cluster zu integrieren, kann es sinnvoll sein, das IP-Forwarding für den Host zu aktivieren. Das geht zum Beispiel in der Befehlszeile mit:
netsh interface ipv4 set interface "<Name der LAN-Verbindung>" forwarding=enabled
Diese Option stellt sicher, dass Server in der Lage sind, IP-Pakete weiterzuleiten, wenn sie diese nicht selbst verarbeiten. IP-Forwarding oder IP-Routing ist ein grundlegender Netzwerkprozess, der dafür sorgt, dass Pakete von einem Netzwerk zu einem anderen weitergeleitet werden. In Bezug auf Network Load Balancing hat IP-Forwarding Auswirkungen auf die Funktionsweise des Clusters, insbesondere wenn es sich um einen Multicast-NLBCluster handelt. Hierbei erstellt Windows für den Cluster eine Multicast-MACAdresse, die an die Cluster-IP-Adresse gebunden ist. Diese spezielle Multicast-MAC-Adresse ermöglicht es, dass alle im Cluster befindlichen Knoten Netzwerkverkehr empfangen, der an die Cluster-IP-Adresse gerichtet ist.
Für ein korrektes Routing von eingehendem und ausgehendem Verkehr muss auf jedem NLB-Knoten das IP-Forwarding aktiviert sein. Ist dies nicht der Fall, kann es zu Verbindungsproblemen kommen, da Antworten auf Anfragen möglicherweise nicht korrekt an den ursprünglichen Absender zurückgehen. In Windows Server 2019 und 2022 können Sie IP-Forwarding neben der Kommandozeile über die PowerShell aktivieren:
Set-NetIPInterface -InterfaceAlias "<Interface-Name>" -Forwarding Enabled
Damit ein Server an einem NLB-Cluster teilnehmen kann, müssen Sie außerdem das Feature "Netzwerklastenausgleich" über den Server-Manager, die Power-Shell oder das Windows Admin Center installieren. Die Funktion muss auf jedem Host aktiviert sein, der Mitglied im Cluster sein soll. Im Rahmen der Installation des Features erfolgt aber keine Konfiguration, diese führen Sie erst danach durch.
Parallel sollten Sie im DNS-System einen Host-A-Eintrag mit dem Namen und der IP-Adresse des NLB-Clusters erstellen. Anwender verbinden sich über diesen Namen mit dem Cluster und die Knoten verteilen die Anfragen entsprechend der Konfiguration.
Bild 1: NLB-Cluster lassen sich in Windows in der grafischen Oberfläche und der PowerShell verwalten.
NLB-Cluster aufsetzen
Das Einrichten eines NLB-Clusters ist in Windows Server 2022 ein unkomplizierter Prozess, vergleichbar zu den Vorgängerversionen. Die Konfiguration ist über die grafische Oberfläche des NLB-Clusters sowie über die PowerShell per Skript möglich. Das ermöglicht eine Automatisierung, dank der Sie neue Knoten jederzeit hinzufügen oder entfernen können. Zunächst müssen Sie die NLB-Funktion auf jedem Server, der dem Cluster beitreten soll, installieren:
Install-WindowsFeature NLB -IncludeManagementTools
Dann legen Sie einen neuen NLB-Cluster zum Beispiel über das Cmdlet "New-NlbCluster" an:
New-NlbCluster -InterfaceName "Vlan-3" -ClusterPrimaryIP 10.0.0.1 -ClusterName "Cluster001"
Dieser Befehl erstellt einen NLB-Cluster mit dem Namen "Cluster001" und einer primären IP-Adresse 10.0.0.1. Die Option "-InterfaceName" spezifiziert die Netzwerkschnittstelle, die für den Cluster zum Einsatz kommt. Das Cmdlet "New-NlbCluster" bietet in diesem Bereich zahlreiche Parameter und Möglichkeiten für die Einrichtung:
New-NlbCluster -HostName <Hostname> -InterfaceName <Interfacename> -ClusterPrimaryIP <IP-Adresse> -SubnetMask <Subnetzmaske>
Ersetzen Sie dabei <Hostname> mit dem Namen des Clutserknotens, <Interfacename> mit dem Namen des Netzwerkadapters, der auf dem Knoten für den Cluster zum Einsatz kommen soll, und <IPAdresse> und <Subnetzmaske> mit den entsprechenden Netzwerkinformationen.
Operationsmodus im NLB-Cluster
Für einen NLB-Cluster spielt auch die Verwendung von Unicast und Multicast eine wichtige Rolle. Diese Optionen steuern Sie entweder bereits während der Erstellung des Clusters oder nachträglich. Beim Anlegen des Clusters konfigurieren Sie den Operationsmodus mit den folgenden Zeilen:
New-NlbCluster -InterfaceName "Ethernet" -OperationMode <Mode> -ClusterPrimaryIP 192.168.1.1 -ClusterName <NLBCluster>
Um die Einstellung nachträglich in der PowerShell zu ändern, könnten Sie folgenden Befehl verwenden:
Set-NlbCluster -OperationMode <Mode>
Ersetzen Sie dabei "Mode" durch "Unicast", "Multicast" oder "IGMP-Multicast". Im Unicast-Modus nutzt jeder Knoten im Cluster dieselbe MAC-Adresse. Das kann zu Problemen führen, da es den Layer-2-Switch dazu veranlasst, den ausgehenden Verkehr an alle Ports zu senden. Die Einstellung kann sich jedoch für kleinere Umgebungen eignen, in denen der zusätzliche Netzwerkverkehr kein Problem darstellt.
Der Multicast-Modus nutzt eine Multicast-MAC-Adresse für den Cluster. Dies ermöglicht es den Switches, den ausgehenden Verkehr an spezifische Ports zu senden und das Netzwerk nicht mit unnötigem Verkehr zu überlasten. Allerdings kann das erfordern, dass Sie zusätzliche Konfigurationen an Ihren Switches vornehmen, um dieses Feature zu unterstützen.
Beim "Internet Group Management Protocol" (IGMP) handelt es sich um eine Erweiterung des Multicast-Modus. Es ermöglicht die Kommunikation zwischen den NLB-Knoten und den Netzwerkswitches,um sicherzustellen, dass der Netzwerkverkehr nur an die Ports gesendet wird, an denen die NLB-Knoten angeschlossen sind. Das ist in größeren Umgebungen nützlich, da es den Netzwerkverkehr noch weiter reduziert. In den meisten Fällen reicht jedoch Unicast aus. Sollte es zu Verbindungsproblemen der Clients kommen, ist es nachträglich möglich, die Einstellungen zu "Multicast" oder "IGMP-Multicast" zu ändern.
Knoten einem Cluster hinzufügen
Das Erstellen des Clusters ist freilich nur der erste Schritt. Für eine effektive Lastverteilung fügen Sie weitere Knoten hinzu mittels
Add-NlbClusterNode -NewNodeName <Hostname> -NewNodeInterface <Interfacename> -InterfaceName <Interfacename> -HostName <Hostname>
Möchten Sie einen Knoten aus dem Cluster entfernen, erledigen Sie das mit dem folgenden Befehl:
Remove-NlbClusterNode -HostName <Hostname> -InterfaceName <Interfacename> -Force
NLB in der PowerShell optimieren
Nun zur Optimierung. Der "Affinity"-Parameter steuert die Client-Server-Beziehung. Mit "Single" wird eine Client-Server-Beziehung beibehalten. Mit "Network" können alle Cluster-Knoten eine Verbindung mit dem Client aufbauen. Mit "None" wird keine Affinität beibehalten. Überprüfen Sie die Einstellungen und probieren Sie, welches die beste Einstellung für Ihre Anforderungen ist.
Port-Regeln bestimmen ferner, welche Ports für den Cluster geöffnet sind und welche Verkehrsregeln gelten. Diese können Sie auf der Grundlage Ihrer spezifischen Anforderungen optimieren. Um eine Port-Regel zu erstellen, die den TCPVerkehr auf Port 80 an alle Knoten im Cluster weiterleitet, bietet sich der folgende Befehl an:
Add-NlbClusterPortRule -Protocol Tcp -Mode Multiple -StartPort 80 -EndPort 80 -Affinity None
Angenommen, eine Anwendung verwendet den UDP-Port 5000 und Sie möchten, dass dieser Verkehr an einen bestimmten Knoten geleitet wird: In diesem Fall können Sie eine Port-Regel, wie nachfolgend gezeigt, erstellen. Beachten Sie, dass wir den Affinity-Parameter in dem Fall auf "Single" setzen, was bedeutet, dass alle Verbindungen von einem bestimmten Client an denselben Server geroutet werden:
Add-NlbClusterPortRule -Protocol Udp -Mode Single -StartPort 5000 -EndPort 5000 -Affinity Single
Über den Parameter "LoadWeight" steuern Sie bei Bedarf das Gewicht jedes Knotens in der Verteilung des Lastenausgleichs. Sie können den Parameter verwenden, um Lastenausgleich an Ihre speziellen Anforderungen anzupassen. Angenommen, es befinden sich drei Server im Cluster und der dritte Server ist leistungsfähiger als die anderen beiden. Sie könnten diesem mehr Verkehr zuteilen, indem Sie seine LoadWeight erhöhen mittels
Set-NlbClusterNode -HostName Server3 -LoadWeight 60
In diesem Beispiel erhält der Server3 60 Prozent des gesamten Netzwerkverkehrs, während sich die anderen beiden Server den Rest teilen. Beachten Sie, dass die Gesamtheit aller Gewichtungen 100 ergeben sollte. In diesem Beispiel könnten Sie Server1 und Server2 jeweils eine Load-Weight von 20 zuweisen, damit dies am Ende zum Gesamtwert von 100 führt.
Bild 2: Für die Verwaltung von NLB-Clustern in der PowerShell stehen zahlreiche Cmdlets bereit.
NLB-Cluster via PowerShell anpassen
Neben den Parametern zur Optimierung eines Clusters gibt es weitere Einstellungen, die Sie mit "Set-NlbClusterNode" anpassen können. Soll beispielsweise ein primärer Knoten mit der höchsten Priorität und damit der niedrigsten Zahl standardmäßig alle eingehenden Anfragen beantworten, verwenden Sie den folgenden Befehl:
Set-NlbClusterNode -HostName Server1 -Priority 1
Es ist auch möglich, den Zustand eines Knotens zu ändern. Sie können einen Knoten zum Beispiel auf "Suspend" setzen und damit vorübergehend vom Loadbalancing ausnehmen, ohne dass der Netzwerkverkehr gestört wird:
Set-NlbClusterNode -HostName <Server1> -NodeState Suspend
Wenn Sie mit den Admin-Tätigkeiten auf dem Server fertig sind, versetzen Sie den Knoten einfach mit dem Argument "-NodeState Started" wieder in den Betriebszustand. Während der Suspendierung bleibt der Server jedoch Mitglied des Clusters, auch wenn er keine Anfragen mehr entgegennimmt.
Sie können den Modus eines Knotens ferner auf "Dedicated" oder "NonDedicated" setzen. Ein dedizierter Knoten bearbeitet nur den NLB-Verkehr, während ein nichtdedizierter Knoten sowohl NLB-Verkehr als auch den üblichen Netzwerkverkehr bearbeitet:
Set-NlbClusterNode -HostName Server1 -OperationMode NonDedicated
Bild 3: NLB-Cluster lassen sich auch in der grafischen Oberfläche erstellen.
Verwalten des Clusters
Nach dem Erstellen und der Konfiguration des NLB-Clusters können Sie diesen mit verschiedenen PowerShell-Befehlen verwalten, Daten abrufen und weitergehend konfigurieren, zum Beispiel mit "Get-NlbCluster". Parallel dazu stehen verschiedene Cmdlets zur Verfügung, um den Cluster direkt zu steuern:
- Stoppen des Clusters: Stop-NlbCluster
- Starten des Clusters: Start-NlbCluster
- Entfernen eines Knotens aus dem Cluster: Remove-NlbClusterNode
Mit dem Befehl Get-Command -Module NetworkLoadBalancingClusters zeigt die PowerShell alle Cmdlets an, die der Verwaltung eines NLB-Clusters dienen.
Sie müssen natürlich nicht unbedingt die PowerShell bemühen, die Verwaltung eines NLB-Clusters ist auch über den "Netzwerklastausgleich-Manager" möglich. Den Anfang macht der Punkt "Neuer Cluster". Mittels "Verbinden" erfolgt danach die Anbindung des ersten Knotens. Auf gleichem Weg fügen Sie nun weitere Knoten hinzu. Nach der erfolgreichen Verbindung mit dem ersten Knoten erfolgt die Konfiguration des Clusters. Hier legen Sie die IP-Adresse fest, den Namen des Clusters und ob der Ausführungsmodus "Unicast", "Multicast" oder "IGMP-Multicast" sein soll.
Im darauffolgenden Schritt lassen sich Regeln für den Clientzugriff definieren. Wir sind auf die Regeln bereits im Rahmen der Erstellung eines Clusters in der PowerShell eingegangen. Sobald die Einstellungen abgeschlossen sind, lassen sich weitere Hosts dem Server hinzufügen. Das erfolgt über "Host dem Cluster hinzufügen". Auf diesem Weg können Sie jederzeit nachträglich Knoten dem NLB-Cluster hinzufügen oder daraus entfernen.
DNS-Roundrobin versus NLB-Cluster
Parallel zu einem NLB-Cluster kann auch DNS-Roundrobin für Lastenausgleich im Netzwerk sorgen. Dabei kommt kein Cluster zum Einsatz, sondern spezielle DNS-Einträge, die Anwender nach der Anfrage am DNS-Server zu unterschiedlichen Clients weiterleiten und die sich zyklisch ändern.
Dabei erhalten alle Server einen gemeinsamen DNS-Eintrag mit gleichem Namen und der jeweiligen IP-Adresse des Hosts. Fragen Clients einen DNS-Server nach der IP-Adresse des Namens, antwortet der Server immer mit der nächsten IPAdresse auf der Liste. Dabei findet die Auslastung des Hosts aber keine Berücksichtigung, sondern Clients verbinden sich nach und nach mit anderen Hosts, da die DNS-Server die IP-Adresse des Hosts jeweils ändern, wenn sie auf Clientanfragen antworten.
Einfach ausgedrückt: Fragen Clients zum Beispiel nach dem Eintrag "Nlb.joos.int" nach der IP-Adresse des Verbundes. Als Antwort erhält der Client eine Liste aller IP-Adressen mit dem Eintrag, aber mit jeweils einer geänderten Reihenfolge, sodass sich die Clients immer mit einem anderen Host verbinden. Das DNS achtet dabei möglichst auf gleiche Subnetze bei der Weiterleitung, sodass der Client idealerweise mit einem Host kommuniziert, der sich im gleichen Subnetz oder einem Subnetz in der Nähe befindet.
Bei diesem Verfahren besitzt jeder Host auch weiterhin seinen eigenen Host-A-Eintrag. Parallel dazu erstellen Sie, genauso wie bei NLB, einen zusätzlichen Eintrag, und zwar für jeden Host mit dem gleichen Namen, aber mit seiner eigenen IP-Adresse. Wenn die Konfiguration abgeschlossen ist, gibt es in DNS daher einen Eintrag für jeden Server zu seiner eigenen IP-Adresse und parallel einen Eintrag, der bei allen Hosts vom Namen identisch ist, aber die IP-Adresse des Hosts verwendet.
Damit ein DNS-Server Roundrobin unterstützt, müssen Sie in den Eigenschaften des DNS-Servers in der DNS-Verwaltung bei "Erweitert" die Option "Roundrobin aktivieren" setzen. Möchten Sie die Funktion für bestimmte Typen deaktivieren, kann dies über die Registry erfolgen. Dazu erstellen Sie unter "HKEY_LOCAL_MACHINE / SYSTEM / CurrentControlSet / Services / DNS / Parameters" einen REG_SZ-Wert mit dem Namen "DoNotRound-RobinTypes" und tragen hier als Werte die Record-Typen ein, die nicht zum Einsatz kommen sollen.
NLB mit Azure-Loadbalancer
In hybriden Netzwerken, bei denen parallel Azure-Dienste zum Einsatz kommen, ist der Azure-Loadbalancer ein wichtiges Werkzeug, das bei der Kontaktaufnahme von Clients zu den Clouddiensten die Last verteilen kann. Der Azure-Loadbalancer arbeitet ebenfalls auf Layer 4 und stellt für Clients der angebundenen Anwendungen einen Einstiegspunkt dar. Dabei ist es möglich, einen internen beziehungsweise privaten sowie einen öffentlichen Lastenausgleich durchzuführen – je nachdem, ob Traffic aus dem Internet oder interner Verkehr innerhalb eines virtuellen Netzwerk ausbalanciert werden soll. Die Einrichtung dazu finden Sie unter "Azure Load Balancer-Komponenten".
Bild 4: Der Lastenausgleich ist in Azure in zwei Varianten möglich.
Parallel dazu stellt Microsoft in Azure noch das Application Gateway für den Layer 7 zur Verfügung sowie regionale Lastenausgleichsfunktionen. Azure Front Door bietet ein globales Loadbalancing und der Traffic Manager kann Lastenausgleich per DNS durchführen. Bei der Suche nach "Lastenausgleich" erscheint im Azure-Portal eine Auswahlhilfe, die dabei unterstützt den richtigen Loadbalancer zu konfigurieren, um lokalen oder globalen Lastenausgleich für die jeweiligen Dienste zu erreichen.
Der klassische Lastenausgleich lässt sich über einen Assistenten einrichten. Hier legen Sie zunächst das Abrechnungsmodell fest und danach die Lastenausgleichsregeln. Wenn Sie einen Azure-Loadbalancer einrichten, definieren Sie Ihre Frontend-IPKonfigurationen. Hierbei handelt es sich um die IP-Adressen, auf die Clients zugreifen. Sie können sowohl öffentliche als auch private IP-Adressen für verschiedene Nutzungsszenarien festlegen.
Als Nächstes legen Sie Ihre Back-End-Pools fest. Das sind die IP-Adressen der virtuellen Maschinen oder anderer Ressourcen, die den eingehenden Verkehr bearbeiten. Ordnen Sie jeder Ihrer virtuellen Maschinen eine IP-Adresse zu und fügen Sie diese dem Back-End-Pool hinzu. Eingangsregeln bestimmen, wie der Loadbalancer den Verkehr verteilt. Jede Regel definiert, welche Frontend-IP-Adresse und welchen Port der Loadbalancer für eingehenden Verkehr verwendet und wie dieser Verkehr auf die Back-End-Pools verteilt wird. Bei der Konfiguration der Regeln legen Sie den Protokolltyp fest (TCP oder UDP), den Frontend-Port, den Backend-Port und den Lastverteilungsalgorithmus.
Die Ausgangsregeln steuern, wie Azure-Loadbalancer den ausgehenden Datenverkehr vom Back-End-Pool handhabt. Ausgangsregeln sind für öffentliche Standard-Loadbalancer relevant und steuern, wie bei der Lastverteilung Antworten auf Anfragen geroutet werden.
Fazit
Das Netzwerk-Loadbalancing spielt in lokalen Umgebungen eine wichtige Rolle und kann auch für Cloudressourcen in Azure sinnvoll sein. Die Einrichtung von NLB ist mit Windows Server unkompliziert möglich, und auch in Azure lassen sich Lastenausgleichsdienste schnell und einfach aufsetzen. Danach können die angebundenen Server eingehenden Datenverkehr deutlich effektiver abwickeln und die betriebenen Workloads zuverlässiger, stabiler und auch leistungsstärker im Netzwerk bereitstellen.
(dr)