Load-Balancer
Load Balancer vs
NLB
Oft stellt man mir die Frage, warum man nicht einfach das
kostenfreie
NLB nutzt.
Tatsächlich kann auch mit NLB eine Lastverteilung zwischen Server
erreicht werden. Allerdings gibt es oft seitens der
Netzwerkadministratoren Vorbehalte. Zudem kann NLB nicht auf einem
Microsoft Cluster gleichzeitig genutzt werden, was dann gegen den
CAS auf dem Cluster spricht. Der größte Nachteil ist aber wohl, dass
NLB nicht aktiv die Dienste hinter einer IP-Adresse auf die Funktion
prüfen kann. Ein "hängender IIS", der noch Verbindungen annimmt aber
keine Daten mehr liefert, kann NLB nicht erkennen. Ein guter Load
Balancer mit passender Konfiguration aber sehr wohl.
Loadbalancer stehen in der Regel vor Exchange, Lync aber auch anderen Diensten wie DNS, LDAP und leiten die Anfragen an die Dienste dann wirklich an die Server weiter, die tatsächlich auch verfügbar sind und sinnvolle Daten liefern. Zudem können Sie auch Ausfälle erkennen und sie sparen sich die Probleme mit NLB Unicast (Fluten des Subnetzes) oder NLB Multicast (Konfiguration auf Router/Switch) und in Verbindung mit Virtualisierungslösungen behalten Sie die Flexibilität.
Outlook scheint bei der Verwendung des SCP für Autodiscover immer den "ältesten" CAS-Server in der AD-Site zu nutzen. Dies ist wohl noch ein Fehler in Outlook, welches bei der LDAP-Anfrage zwar ein Array bekommt, aber immer den ersten (ältesten) Eintrag nutzt. Wohl dem. der die SCP-URLs auf einen generischen Namen gelegt, hat, welcher per Loadbalancer einen verfügbaren CAS erreicht.
Windows selbst kennt seit NT4-Zeiten die Funktion, mehreren Servern die gleiche IP-Adresse zu geben, um Dienste, die auf allen Servern identisch vorgehalten werden, besser4 verfügbar und skalierbar zu machen. Früher unter dem Codenamen "Convoy und dann WLBS ist NLB seit Windows 2003 nun in jeder Windows Version vorhanden und kann einfach integriert werden. Mit NLB werden Anfragen von allen Server im Team empfangen und einer der Server übernimmt die Aufgabe diese Verbindung zu bedienen. Allerdings erkennt NLB nur, ob der Server und Port erreichbar ist aber nicht, ob der dahinter lauschende Dienst sinnvolle Daten ausliefert. Dies ist ein Grund, warum NLB nicht in allen Fällen die optimale Lösung ist. NLB ist z.B.: nicht kompatible mit Microsoft Cluster. Wer also z.B. einen Exchange 2010 Cluster als Database Availability Group betreibt, kann die darauf mit installieren CAS-Server nicht per NLB verfügbar gestalten. (Siehe auch 2-Server-DAG). Externe Load-Balancer können hier helfen, zwei zusätzliche Exchange Server einzusparen. NLB kann auch nur zwischen Windows Systemen genutzt werden. Firmen würden aber auch gerne andere Systeme bereit stellen und irgendwann kommen Sie dann doch dazu, externe Load-Balancer einzusetzen.
Funktionalität
Doch die Ansichten, was und wie ein Load Balancer funktioniert, sind nicht ganz einheitlich. Klar muss es ein System sein, welches die Anfragen der Clients zuerst erreicht und dann auf einen geeigneten "Backend-Server" weiter gibt. Aber da gibt es gleich mehrere Faktoren:
- Reverse-NAT, Reverse Proxy, Routing
Ein Teil der Load Balancer funktioniert so, dass die Clients per DNS auf die IP-Adresse des Load-Balancer statt der eigentlichen Server geleitet werden. Dieses System nimmt dann die Anfragen an und gibt sie weiter. Das ist ein ganz üblicher Prozess bei der z.B. Veröffentlichung von Webseiten. Auch hier muss man sich natürlich Gedanken machen, wie der Zugriff auf den Load-Balancer selbst "hochverfügbar" gestaltet werden kann.
Andere Systeme sind für den Client gar nicht real sichtbar, sondern sind eher wie ein "Router" zwischen Client und Backend angesiedelt und nutzen daher Routingprotokolle, um Clientzugriffe bei Ausfällen um zu routen. Vorteil ist hierbei auch, dass z.B. DNS-Einträge durch die eigentlichen Server nicht umgebaut werden müssen. Allerdings wird ihr Netzwerk komplexer da Clients und Server eben getrennt sein müssen. - Test der Backends
Ein Load Balancer sollte immer wissen, welcher der Systeme, die er veröffentlicht, gerade "funktionieren". Verteilen kann er die last nur, wenn es mehrere Systeme im Hintergrund gibt. Diese werden aber auch immer mal mit Patches versehen oder zur anderen Wartungsarbeiten außer Betrieb genommen. Manchmal wird auch ein System auf eine neue Version aktualisiert und erst mal getestet, ehe es produktiv geht. Ein einfacher "Ping" ist als Test sicher nicht ausreichend. Das System sollte schon auf dem Level der Applikation selbst prüfen können, ob der Server korrekt arbeitet. Für MAPI kann das z.B. der Port sein, auf den Sie MAPI auf dem Server fixiert haben.

Kemp prüft dann z.B. alle 10 Sekunden die Erreichbarkeit des Ports. Andere Prüfungen (z.B. POP3, SMTP, HTTP etc. sind für die anderen CAS-Dienste natürlich sinnvoll. - Affinität und Persistence
Je nach Anwendung müssen "Sitzungen" gepflegt werden. Wenn sich z.B. ein Client an einem Webserver anmeldet und die Anmeldedaten dann z.B. an der Session oder Cookies festgemacht sind, dann sollte der Load Balancer jede Folgeanfrage des Clients natürlich an den gleichen Server senden. Ansonsten könnte es sein, dass der Anwender sich immer wieder anmelden muss und zudem kostet es einfach viel mehr Ressourcen, wenn mehrere Backends die gleichen Sitzungen erstellen müssen. Anders ist es bei anonymen statischen Daten wie z.B. Bildern, Stylesheets, Downloads. Hier kann der Load Balancer wieder den Server mit der geringsten Last wählen. Das kann er natürlich nur, wenn er so weit ins Protokoll rein schauen kann, um diese Unterschiede zu erkennen. Für andere Protokolle (z. B. RDP, SMTP , POP etc.) gelten natürlich wieder andere Regeln. Hier eine Auswahl der möglichen Kriterien beim Einsatz eines HTTP-Protokolls und der Verteil-Optionen (Kemp LM2200 Version 5.1.45.

Gerade wer auch andere Protokolle (z.B. MAPI) verteilt, muss damit rechnen, dass neben einen Port noch andere dazu kommen. Bei MAPI ist das nämlich 135 (RPC Portmapper) und dann noch ein Port für den Store und einer für den Adressbuchdienst. Entsprechend muss der Loadbalancer diese Pakete vom Client an den gleichen CAS senden, wie die erste Verbindung:
Bei Kemp wird auf dem virtuellen Server der Port 135 definiert und dann die Zusatzports als "Extra Ports"

- Idle Timeout
Das Verwalten von Sessions kostet natürlich Ressourcen. Daher haben viele Loadbalancer einen Müllmann, der Sessions nach einiger Zeit Inaktivität killt. Bei Kemp ist dies je virtuellem Server einstellbar

Der Wert 0 deaktiviert diese Aufräumaktion. Wer hier denkt, dass eine TCP-Session ja in der Regel nicht länger als 2 Minuten inaktiv ist und daher 2,1 Minuten einstellt, wird sehen, dass Outlook alle 2 Minuten einen Reconnect macht. Wer den Timeout nicht deaktivieren will, sollte ihn ausreichend hoch setzen und dabei auch die ActiveSync-Geräte nicht vergessen, die sehr lange "Idle" sein können. - Firewall und Filter, Offloading und Kompression
Wenn der Load Balancer schon die Verbindungen annimmt, dann kann er auch eine Validierung der übertragenen Daten durchführen. Einige Load Balancer gehen sogar so weit, dass Sie als Application Firewall agieren und URLs filtern und teilweise sogar eine Vorauthentifizierung übernehmen, um die aktiven Server vor Angriffen zu schützen. Sie können sogar SSL-Offloading betreiben und HTTP-Komprimierungen durchführen, und damit die Backend Server weiter entlasten. - Geografische Optimierung (DNS, Rerouting)
Interessant wird es, wenn sie mehrere Server an verschiedenen Orten betreiben und die Anfragen durch einen Load Balancer so umgeleitet werden, dass der Client zum netztechnisch nächsten Server geroutet werden. Diverse intelligente Systeme optimieren dazu die DNS-Antworten abhängig von der anfragenden IP-Adresse (was meist passt, auch wenn der DNS des Providers nur bedingt über den Client etwas aussagt). Andere Systeme nehmen die Anfrage an um den Client dann aber einen Redirect (geht z.B. bei HTTP sehr elegant) auf einen andere Server zu lenken. So kann man auch Last zwischen Server "verteilen" und sogar geografisch optimieren. - Load Balancer und HA
Verteilen ist nur eine Aufgabenstellung. Natürlich sollte auch die Lastverteilung "Hochverfügbar" erfolgen. Und hier stehen die Hersteller vor dem gleichen Dilemma wie ein Windows Admin mit NLB. Entweder mehrere Load Balancer arbeiten aktiv nebeneinander, womit sich auch hier die Frage von "Multicast IP" etc. stellt oder jedem System ist ein "Standby"-System zugeordnet, welches beim Ausfall die Arbeit (und die IP-Adresse) übernimmt. Dies kann abgewandelt auch mit mehreren IPs erfolgen, bei denen die IP-Adresse eines ausgefallenen Systems einem anderen Server zugeordnet wird. (Siehe auch MiniSFT). Nur die ganz teuren Systeme schaffen es auch die Sitzungstabelle zwischen zwei Systemen zu spiegeln und damit beim Ausfall wirklich ohne Unterbrechung weiter zu arbeiten.
Das sind jedem Menge Punkte, die bei der Produktevaluierung und Auswahl zu beachten sind.
Details zur Funktion
Was auf den ersten Punkt so einfach aussieht, kann sich im Details als sehr knifflige Aufgabe herausstellen. Hier ein paar Beispiele, die es zu bedenken gibt:
- 1-Arm oder 2-Arm
Bei der Implementierung müssen sie sich überlegen, ob der Loadbalancer mit einem Anschluss mit dem Netzwerk verbunden ist und der Datenverkehr von Client über den LB zum Server über das gleiche Subnetz läuft. dann muss der LB die MAC/IP-Adressen NATten. Wird der LB aber wie ein "Router" in das Netzwerk eingebunden, bei dem die Clients auf einer Seite und die Server auf der anderen Seite laufen, dann bedeutet das eine Änderung ihres Netzwerkroutings und Einschränkungen beim Zugriff aus dem Server-LAN, quasi von "innen" - Grenzen von NAT bei 1-Arm
Wenn nun ein Client eine Anfrage an einen Loadbalancer stellt, und die Anfrage von dort an einen Server weiter gegeben wird, dann muss der Loadbalancer als Source-Adresse natürlich seine eigene Adresse verwenden, damit die Antwort wieder über ihn an den Client ausgeliefert wird. Eine IP-Adresse kann aber maximal 65535 Ports "offen" haben, so dass ein Loadbalancer also maximal diese Anzahl an gleichzeitigen Verbindungen aufbauen kann. - Affinity mit NAT beim Client
Wenn Sie dem Loadbalancer sagen, das er abhängig von der Quell-IP des Clients die Affinität zu einem Server im Backend aufbauen soll, dann wird das Problematik, wenn viele Clients sicher hinter einer IP-Adresse oder einem Firmenproxy verbergen. Für den Loadbalancer ist das dann "ein" Client, der auf dem einen Server landet. So ist es auch nicht unüblich, dass z.B. mobile Anwender per UMTS/GSM über einen Proxy bzw. NAT arbeiten und im UMTS-Netzwerk eine "Private" Adresse verwendet wird, die dann zum Internet umgesetzt wird. So eine "Lastverteilung" ist nicht mehr ausgeglichen. - Cookie-Trouble und Affinity
Viele Anwendungen erfordern, dass eine Sitzung eines Clients auch immer auf den gleichen Webserver landet. Damit spart man sich mehrere Sessions auf verschiedenen Server, die zum einen eine extra Anmeldung bedeuten kann aber vor allem unnötig Ressourcen frisst. Dazu eignen sich z.B. Cookies. Voraussetzung ist aber, dass der Loadbalancer den SSL-Traffic aufbricht um die Inhalte zu sehen und dass Sie natürlich den Namen des Cookie benennen können. - Failover
Ein LB kann natürlich die Anfragen an ein oder mehrere Server im Backend weiter geben, aber wer sichert den LB ab?. Sicher sind zwei Systeme schnell installiert, aber was passiert im Fehlerfall? Hat das übernehmende System auch den Status der aktuellen Verbindungen oder fliegen alle Clients erst einmal raus ?. Und wie "übernimmt" er die Dienste des anderen Systems ?. Übernimmt er einfach nur die IP-Adresse oder zieht er auch eine virtuelle MAC-Adresse an sich. - Failover des Backends
Es kann ja nicht nur der Loadbalancer ausfallen, sondern eine Funktion ist ja auch, dass er Ausfälle beim Backend erkennt und die neuen Anfragen an einen "verfügbaren" Server weitergibt. Über regelmäßige Tests kann der LB erkennen, ob der Dienst im Backend verfügbar ist. Hier muss der LB natürlich alle "verbundenen Ports" betrachten. Es reicht für MAPI z.B. nicht aus, nur den Port 135 zu überwachen. Wenn man die Ports für den Store und den Adressbuchdienst fixiert ha, sollte der LB auch diese überwachen und beim Fehler eines Ports auch alle Sessions der Portgruppe zurück setzen.
Sie sollten daher schon etwas Erfahrung mit Routern, Switches, ARP, Routing, NAT und Werkzeugen wie NETMON haben, um bei Fehlern die Ursache einzukreisen.
Produkte und Hersteller
Schon daher kann die MSXFAQ hier keine Empfehlung geben oder Produktvergleiche anstellen. Ich werde aber, soweit ich davon Kenntnis habe, funktionierende Konfigurationen dokumentieren.
Wer einen "Load Balancer" mit Exchange, OCS o.ä. betreibt, kann mir gerne einen Hinweis zur Installation zukommen lassen. Interessant ist das eingesetzte Produkt mit Versionsnummer, die bereitgestellten Dienste und etwas die Größe. Für Rückfragen kann ich ihre Kontaktdaten gerne aufführen.
Ich kann hier nur von meinen eigenen Erfahrungen berichten und Links zu Loadbalancern aufnehmen, die ihre Funktion mit Exchange bzw. Lync bewiesen haben. Microsoft selbst stellt eine entsprechende Liste von getesteten Lösungen bereit:
- Exchange Server 2010 Load Balancer Deployment
http://technet.microsoft.com/en-us/exchange/gg176682.aspx
Ich bin auf ihr Feedback angewiesen, damit diese Liste vollständig wird.
Wer einmal erster Schritte mit der Thematik "Load Balancing" machen möchte, kann auch eine Freeware einsetzen, die einfach nur einen TCP-Port an ein oder mehrere andere nachgelagerte Systeme verteilt:
-
HAProxy
http://haproxy.1wt.eu/
http://www.stevieg.org/e2010haproxy/ - Sonstiger Proxy
-
http://www.dscoduc.com/Downloads.aspx
http://www.dscoduc.com/Download.axd?file=HardwareLoadBalancer.zip
Das ist natürlich nur eine sehr einfach Lösung für erste Gehversuche. Ich würde daher eher dazu raten, einen der oben beschriebenen Systeme als virtuelle Maschine sich anzuschauen. Einige davon sind für mehrere Tage/Wochen kostenfrei zu verwenden.
- Kemp Technologies Inc
http://www.kemptechnologies.com/en/server-load-balancing-appliances/product-matrix.html
http://www.kemptechnologies.com/emea/loadbalancingresource/ms-exchange-2010.html
Load Balancing Exchange 2010 – Netzwerk-Topologie Beispiele
http://www.loadbalancerblog.de/loadbalancing-anwendungen/load-balancing-exchange-2010-netzwerk-topologie-beispiele/ - F5 BIG IP
http://www.f5.com/products/big-ip/ - Cisco CSS 11500 Series Content Services Switch
http://www.cisco.com/en/US/products/hw/contnetw/ps792/ - Cisco ACE
http://www.cisco.com/en/US/products/ps6906/ - Zeus Load Balancer
http://www.zeus.com/products/load-balancer/index.html - Loadbalancer.org
http://de.loadbalancer.org/matrix.php - Radware AppDirector/AppXcel
http://www.radware.com/Products/ApplicationDelivery/AppDirector/default.aspx - Juniper WX und WXC
http://www.juniper.net/us/en/products-services/application-acceleration/wxc-series/ - crescendonetworks Maestro ALP oder AFE CN5510
http://www.crescendonetworks.com/ - CAI Networks WebMux
http://www.cainetworks.com/products/spec.htm - Nortel Alteon AD4 oder Alteon 2424 SSL
- Brocade ServerIron (Ehemals Foundry)
http://www.brocade.com/products-solutions/products/application-delivery/serveriron-adx-series/index.page - Citrix NetScaler
http://www.citrix.com/English/ps2/products/product.asp?contentID=21679
Concurrent Connections und Affinity
Der Einsatz von Loadbalancern kann ihnen viele Sorgen und Probleme ersparen, aber in einigen Situationen sollten Sie genau die Funktionsweise verstehen, speziell wenn es um andere Protokolle als HTTP/HTTPS geht. Für HTTP/HTTPS haben viele Hersteller über den Reverse Proxy eine Erkennung der individuellen Sessions aber für Protokolle wie SMTP, POP, IMAP, welche für die meisten Loadbalancer einfache TCP-Verbindungen sind, setzen die meisten Systeme einfach die IP-Adressen um.
Die internen Server können dann aber nicht mehr die IP-Adresse des Clients erkennen, sondern sehen als Client nur die IP-Adresse des LoadBalancers. Damit treffen natürlich diese Einschränkungen z.B. auch auf Receive Connectoren zu.
[PS] C:\>(Get-ReceiveConnector)[1] |fl
Fqdn : W2K8R2E2010.E2010.local
MaxInboundConnection : 5000
MaxInboundConnectionPerSource : 20
MaxInboundConnectionPercentagePerSource : 2
PermissionGroups : ExchangeUsers
RemoteIPRanges : {::-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff, 0.0.0.0-255.255.255.255}
Sie sehen hier schon den kritischen Faktor "MaxInboundConnectionPerSource". Dies ist zwar "nur" der Client Connector, aber wenn viele Personen parallel über einen Loadbalancer auf Exchange zugreifen, kann diese Zahl ganz schnell erreicht werden. Hier muss also der Grenzwert dann deutlich höher angesetzt werden oder der LoadBalancer in einer anderen Betriebsart konfiguriert werden, z.B. selbst als hochverfügbarer SMTP-Proxy oder als Default Router, so dass die Source-IP unverändert bis zum Backend Server weiter gegeben wird.
Aber auch in anderer Richtung kann die Wirkung eines Loadbalancers eingeschränkt werden. Wenn der Loadbalancer die Datenverbindungen anhand der Client-IP verteilt, dann ist er natürlich auch davon abhängig, dass die Clients wirklich mit unterschiedlichen Client-IPs bei ihm ankommen. Das ist leider z.B. nicht der Fall, wenn eine Niederlassung über einen gemeinsamen HTTP-Proxy auf Outlook Anywhere zugreifen oder viele Clients hinter einem NAT-Router sich verbergen (z.B. bei UMTS- oder VPN-Zugängen etc.). Auch dann sieht ein Loadbalancer nur wenige Source-IP-Adressen und belastet die BackendServer ungleichmäßig.
Diese "Affinität" ist aber für bestimmte Funktionen wichtig. Stellen Sie sich vor ein Client nutzt mehrere parallele TCP-Connections, was beim Einsatz von RPC ja schon "normal" ist. Der Client verbindet sich mit Port 135 und wird vom Loadbalancer zu einem Backend-Server weitergeleitet. Der dortige RPC-Portmapper auf 135 sendet als Antwort, dass der angefragte Dienst auf einem bestimmten Port läuft. Der Client verbindet sich nun mit diesem Port und wenn der Load Balancer nun die Pakete nicht zum gleichen Backend senden würde, dann würde der andere Server die Verbindung eventuell gar nicht annehmen oder eine Firewall aufgrund der fehlenden Port135-Voranbfrage die Verbindung blockieren. Zudem macht es natürlich keinen Sinn, wenn z.B. ein Webbrowser sich über einen TCP-Verbindung am Webserver anmeldet und dann mehrere parallele Verbindungen öffnet, um JavaScript, Stylesheets und Images herunter zu laden. Da sollte er natürlich ebenfalls auf dem gleichen Webserver bleiben. Ein anderer Backend-Server würde ansonsten sicher wieder Anmelddaten abfragen, da er die Session-Cookies nicht kennt und zusätzlich Speicher benötigen.
Diese Besonderheit von Loadbalancern sind pro Applikation zu prüfen. Für Exchange galt 2011 folgende Tabelle
| Erforderlich | Empfohlen | nicht erforderlich |
|---|---|---|
| OWA | OA | OAB |
| ECP | EAS | Autodiscover |
| EWS | Adressbuch (RPC) | POP3 |
| RPC | Powershell | IMAP4 |
Load Balancer und Exchange 2010 CAS mit RPC
Siehe auch CASArray
Wenn Sie nur einen Webserver veröffentlichen, dann ist eine Regel noch recht einfach. Wenn Sie aber z.B.: den Exchange 2010 CAS als CAS-Array betreiben und nicht mit NLB veröffentlichen, dann sollte ihr Loadbalancer auch Ports "gruppieren" können. Die RPC Kommunikation verwendet nämlich neben dem Exchange RPC-Port, welchen Sie sowieso für einen solchen Einsatz "fest" einstellen müssen auch noch RPC (135/TCP). Wenn der Load Balancer nun feststellt, dass ein Knoten nicht erreichbar ist, dann muss er nicht nur die Anfragen auf den Exchange-RPC-Port auf die verbliebenen CAS-Server umleiten, sondern auch die Zugriffe auf den Port 135, selbst wenn dieser auf dem defekten CAS-Server natürlich weiterhin erreichbar ist.
Sofern der Loadbalancer dies also anbietet, sollten Sie nicht, oder nicht nur den Port 135/TCP als Lebend-Erkennung "proben", sondern auch die Ports die vom ExchangeRPC- und ExchangeAB-Dienst genutzt werden. Diese sind per Default leider "dynamische" aber können per Konfiguration auf dem CAS-Server fixiert werden.
Dies ist insbesondere dann auch wichtig, wenn Sie per LB nicht die ganze Portrange veröffentlichen wollen, sondern zum einen aus Schutzüberlegungen aber auch bezüglich Monitoring oder QoS-Einstellungen feste Ports bevorzugen. Allerdings sollten Sie zwischen den Zugriffen von Client auf Exchange und Exchange auf Exchange unterscheiden
| Protokoll | Client -> Exchange | Exchange -> Exchange Proxy |
|---|---|---|
| OWA | Ratsam | Nicht ratsam. OWA hat selbst Loadbalancing. d.h. Internal URL für OWA sollte nicht auf Loadbalancer verweisen. |
| ActiveSync | Ratsam | Ratsam aber ohne SSL-Offloading |
Eine ganze Sammlung von Links liefert hier weitergehende Informationen finden Sie auf:
- CASArray
- CAS und Kerberos
-
Exchange 2010 Client Access Array and Load Balancing
Resources
http://social.technet.microsoft.com/wiki/contents/articles/exchange-2010-client-access-array-and-load-balancing-resources.aspx - Recommendation: Enabling Kerberos Authentication for
MAPI Clients
http://blogs.technet.com/b/exchange/archive/2011/04/15/recommendation-enabling-kerberos-authentication-for-mapi-clients.aspx - How to configure SSL Offloading in Exchange 2010
http://social.technet.microsoft.com/wiki/contents/articles/how-to-configure-ssl-offloading-in-exchange-2010.aspx - Load Balancing Requirements of Exchange Protocols
http://technet.microsoft.com/en-us/library/ff625248.aspx - Microsoft Unified Communications Load Balancer
Deployment
http://technet.microsoft.com/en-us/office/ocs/cc843611.aspx - Exchange 2010 Client Access Array & Load Balancing
Resources
http://social.technet.microsoft.com/wiki/contents/articles/exchange-2010-client-access-array-amp-load-balancing-resources.aspx - Load Balancing Exchange 2010 Client Access Servers
using an Hardware Load Balancer Solution
Part 1: http://www.msexchange.org/articles_tutorials/exchange-server-2010/high-availability-recovery/load-balancing-exchange-2010-client-access-servers-using-hardware-load-balancer-solution-part1.html
Part 2: http://www.msexchange.org/articles_tutorials/exchange-server-2010/high-availability-recovery/load-balancing-exchange-2010-client-access-servers-using-hardware-load-balancer-solution-part2.html
Part 3: http://www.msexchange.org/articles_tutorials/exchange-server-2010/high-availability-recovery/load-balancing-exchange-2010-client-access-servers-using-hardware-load-balancer-solution-part3.html -
Exchange Server 2010 SP1 – SSLOffloading
http://idamd.blogspot.com/2010/10/exchange-server-2010-sp1-ssloffloading.html
Mit Powershell Script zum Setzen auf den CAS-Servern
Load Balancer und OCS
Auch für OCS ist der Einsatz von Load Balancern möglich und in einigen Umgebungen sogar erforderlich, z.B. wenn mehrere Edge oder Direktoren ohne Edge verwendet werden.
- Microsoft Unified Communications Load Balancer
Deployment
http://technet.microsoft.com/en-us/office/ocs/cc843611.aspx - Load Balancers for Office Communications Server 2007
R2
http://technet.microsoft.com/en-us/library/dd572362(office.13).aspx - how to configure F5 Big-IP for Office Communications
Server 2007 R2
http://www.f5.com/pdf/deployment-guides/f5-ocs-r2-dg.pdf
Load Balancer und Lync
Microsoft hat mit Lync 2010 die Funktion „DNS-RoundRobin“ für viele Funktionen eingeführt, so dass die früher mit einem Enterprise-Pool erforderlichen LB für SIP nicht mehr erforderlich sind, wenn alle Clients ebenfalls mit dem Lync 2010 Communicator arbeiten. Allerdings funktioniert DNS-Round Robin nicht für die Lync Webservices und auch in Verbindung mit mehreren Edge-Servern (Hochverfügbarkeit) oder alten OCS-Clients sind weiterhin LB erforderlich.
Auch wenn eine DNS-RoundRobin in Lync mit dem Lync Communicator funktioniert, so kann es dennoch wünschenswert sein, auch den Zugriff auf Port 5061 zu verteilen. Da dort aber natürlich "TLS" gesprochen wird und einige Loadbalancer dies nicht gut "überwachen" können, bietet Lync die Funktion auf dem Pool einen alternativen Port zu hinterlegen.

Auf dem Port lauscht der Lync Frontend dann und meldet nur folgendes zurück "488” Port is configured for health monitoring only”. Wer später mal vorhätte, auch SIP over TCP anzubieten, z.B. weil ein bestimmter Clients an den Zertifikaten scheitert, dann sollten Sie hier vielleicht einen anderen Port nutzen.
Lync reagiert nur dann auf dem Port, wenn der Registrar läuft. Sobald der Dienst RTCSrv nicht läuft oder die Verbindungen per "Draining" unterbunden sind, ist der Port nicht erreichbar. So kann ein Loadbalancer die "nicht Erreichbarkeit" einfach erkennen und die nachfolgenden Zugriffe auf einen anderen Frontend weiter leiten. Die Verfügbarkeit dieses Ports stelle aber nicht sicher, dass alle Dienste, die für Lync relevant sind, gestartet sind. Dies ist aber nicht zwingend erforderlich, weil z.B. für den Konferenzdienst und viele anderen Dienste alternativen "Failover-Funktionen" möglich sind.
Hinweis:
Wer den SIP-Traffic per LB verteilt, sollte die
Affinität auf TCP-Level mit einem Timeout
setzen, der Größer ist also das "SIP Keep-Alive
interval" (normalerweise 30 minuten).
Für den Zugriff aus dem Internet ist natürlich eine "Web Service URL" zu definieren, hinter der möglichst "Verfügbar" dein Frontend erreichbar ist. Die Verfügbarkeit ist hierbei natürlich abhängig von der Firewall-Lösung und ihres Reverse Proxy und wie dieser die Anfragen nach intern weiter gibt. Ein Microsoft TMG-Server kann ja auch eine "Webfarm" veröffentlichen und damit Lastverteilung und Verfügbarkeit von extern auf einen internen Pool sicherstellen. Bei der Konfiguration von Lync müssen Sie bei einem Pool diesen FQDN konfigurieren.

Die Erreichbarkeit des internen Webservice und Lync-Dienste können auf zwei Wege bereit gestellt werden:
- Load Balancer für WebServices
Da Lync per DNS Round Robin schon Clients verteilen kann, können die DNS Einträge für den Pool auf die IPs der Server verweisen. Die Webservice URL muss aber auf den Loadbalancer verweisen was einen zusätzlichen Hostnamen (samt Zertifikat) bedeutet, da der Poolname ja auf die Server direkt verweist. - Load Balancer für ALLES
Dieser Weg bedeutet natürlich mehr Last für den Loadbalancer aber erlaubt auch Clients einen hochverfügbaren Zugriff, die nicht mit DNS-Round Robin umgehen können. Die Pool-IP verweist dann auf den LB, welcher nun nicht nur 5061 (SIP/TLS) sondern eine ganze Menge von Ports bedienen muss, z.B. auch eventuell als Colocation installierte Mediation Server, Konferenz-Server, Response Groups.
Wer intern ganz ohne Loadbalancer arbeiten will, sollte einen vom Pool-Namen auch intern unterschiedlichen Namen für die Webservices definieren und z.B. auf einen FE lenken. Im Fehlerfall dieses FE muss dieser Name dann natürlich auf den anderen FE umgestellt werden (DNS-Eintrag) ändern. Diese Aussagen gelten zudem nur, wenn Sie auch Lync Clients und andere Lync kompatible Systeme einsetzen, die DNS-RoundRobin unterstützen.
Da der Einsatz von NLB auf Lync Frontend Servern nicht sinnvoll möglich ist und Microsoft für die Veröffentlichung der LyncWeb eines Enterprise Pools sowieso LoadBalancer vorschreibt, müssen Sie diese Dienste über gesonderte Hardware "veröffentlichen". Die Webdienste nutzen aber SSL und einige Loadbalancer bieten eine SSL-Acceleration oder SSL-Offloading an. Dies kann genutzt werden. Allerdings ist auf dem Lync Webdiensten eine Umleitung von Zugriffen auf Port 80 nach 443 eingerichtet. Das bedeutet aber auch, dass ein Loadbalancer nicht wirklich mit SSL-Offloading arbeiten kann. Er kann natürlich die SSL-Verbindung aufbrechen, um z.B. Anhand von Cookies die Sessions zu erkennen aber er muss auch zum Backend (also Lync Server) wieder mit SSL weiter arbeiten, da ein Umsetzen der Zugriffe von Extern Port 443 auf intern 80 einen "Redirect" auslösen würde.
- LyncWeb
- Microsoft Unified Communications Load Balancer
Deployment
http://technet.microsoft.com/en-us/office/ocs/cc843611.aspx - Lync 2010 Planning Ports and Protocols for Internal
Servers
http://technet.microsoft.com/en-us/library/gg398833.aspx - Load Balancing Requirements
http://technet.microsoft.com/en-us/library/gg615011.aspx - Introducing DNS Load Balancing in Lync Server 2010
http://technet.microsoft.com/en-us/library/ff755052.aspx - Issue when Moving Legacy Users to a Lync Server 2010 Pool using HLB
http://blogs.technet.com/b/dodeitte/archive/2010/12/19/issue-when-moving-legacy-users-to-a-lync-server-2010-pool-using-hlb.aspx - Deploy the Big-IP LTM-Switch with Lync 2010
http://www.f5.com/pdf/deployment-guides/f5-lync-dg.pdf
Sehr nette Ausarbeitung der Ports, der Überwachungseinstellungen und Affinitätsparameter
Load Balancer und COM/RPC/SMB
Wenn eine Loadbalancer eine Verbindung eines Clients zum Server durchgibt, dann ist das ja noch einfach, aber oft heißt der Server physikalisch anders als die Adresse, unter denen ein Client den Server anspricht. Seit Windows 2003 SP1 kann ihnen hier eine neue Schutzfunktion von Windows die Funktion blockieren.
- 926642 Error message when you try to access a server locally by using its FQDN or its CNAME alias after you install Windows Server 2003 Service Pack 1: "Access denied" or "No network provider accepted the given network path"
- Issue when Moving Legacy Users to a Lync Server 2010
Pool using HLB
http://blogs.technet.com/b/dodeitte/archive/2010/12/19/issue-when-moving-legacy-users-to-a-lync-server-2010-pool-using-hlb.aspx - 896861 You receive error 401.1 when you browse a Web site that uses Integrated Authentication and is hosted on IIS 5.1 or a later version
- 957097 MS08-068: Vulnerability in SMB could allow remote code execution
Sizing ermitteln
Nun ist es ja so, dass diverse Hersteller ganz unterschiedliche Produkte anbieten und wer sich z.B. die Produktmatrix von Kemp oder anderen Anbietern ansieht, der bekommt ein paar Zahlen angezeigt, mit denen ein normaler Administrator erst mal nichts anfangen kann.

Quelle:
http://www.kemptechnologies.com/emea/server-load-balancing-appliances/product-matrix.html
Stand Jan 2010
Auf der einen Seite hat das kleinste System schon 1 Mio "concurrent Layer4 Connections" und kann 25.000 HTTP-Requests/Sek bedienen aber mehr als 200 SSL-Transaktionen schafft es nicht. Bei all den Daten fragt sich der normale Administrator natürlich, was für seine Umgebung die "passenden" Zahlen sind. Daher müssen zumindest die drei Kennzahlen erläutert werden:
- SSL Transactions /Sek
Diese Zahl ist relevant, wenn der Load Balancer den Port 443 nicht einfach auf TCP (Layer 4-Ebene) an ein Farmmitglied weiter gibt, sondern selbst das SSL-Zertifikat enthält und die SSL-Verbindung bedient. Wer also den Loadbalancer noch zum "SSL-Offloading" verwenden um die Webserver im Hintergrund die Verschlüsselung abzunehmen, der muss auf diesen Wert schauen. Wobei Kemp hier den "Verbindungsaufbau" meint, d.h. den Austausch der Schlüssel. Die eigentliche Übertragung per SSL ist nicht mehr kritisch. Der "kleine" kann also maximal 200 SSL-Verbindungen pro Sekunden "Aufbauen". Halten und bedienen kann er mehr. - HTTP Requests/Sec
Dies ist dann der relevante Counter für die tatsächlich zu verarbeitenden HTTP/HTTPS Lasten. Diese Zahl können Sie idealerweise an einer bestehenden Umgebung aus den IISLogs ermitteln. Bei Kemp sind das die Anzahl der Anfragen, die über bestehende Verbindungen auf Layer 7 bedient werden können. - Layer 4 Concurrent Connections
Dieser Counter beschreibt, wie viele "Verbindungen" das System verwalten kann. Das ist durchaus relevant, da eine TCP-Connection normalerweise bis zu 2 Minuten nach dem letzten Paket "besteht", bei ActiveSync-Verbindungen sogar noch länger. Und wenn der Client "dumm" ist und eine TCP-Verbindung nicht erneut verwendet, könnte dieser z.B. 10 http-Requests pro Sekunde mit immer neuen TCP-Verbindungen senden und letztlich dann bis zu 120 Connections "belegen". Eine hohe Zahl hier macht auch DoS-Attacken schwerer. Anwendungen wie ActiveSync halten Verbindungen sehr lange.
Dieses Wert können Sie am besten über PERFMON erfragen, wobei es da natürlich auch auf die Maximalwerte ankommt. - Durchsatz.
Auch wenn die meisten Systeme schon mit Gigabit ausgestattet sind und die Internetanbindungen deutlich darunter liegen, so werden immer mehr Loadbalancer auch intern eingesetzt. Dann macht die maximale Bandbreite doch wieder Sinn.
All diese Daten können (und sollten) sie natürlich aus ihrem aktuellen System, welches ohne LoadBalancer läuft, vorab ermitteln.
Relevant sind hierbei immer die Spitzenwerte, nicht
ein Durchschnitt. Beachten Sie aber, dass es "Betriebsspitzen" sind und
keine Spitzen eines Angriffs oder Missbrauchs, für den Sie sich nur
bedingt vorsorgen können.
Die Angabe der "Anzahl Postfächer" ist allein kein hinreichender
Ausgangswert
Dazu helfen ihnen zwei Faktoren.
- Logfiles der Anwendung (IISLog, POP3Log, IMAP4Log,
SMTPLog o.ä.)
Dort protokolliert z.B. ein Webserver jeden einzelnen Request mit Zeitstempel, Größe und Quell-IP. Ideale Quelle um die Anfragen pro Sekunde zu ermitteln und auch die Datenmenge sowohl als Mittelwert als auch die Spitzenwerte zu erhalten. Gerade die Auswertung des IIS-Logs ist mit diversen Programmen (z.B. LogParser) sehr nett machbar. - Performancecounter/SNMP
Über diese Counter können Sie sowohl die Netzwerkauslastung (allerdings nur allgemein) und die offenen TCP-Ports ermitteln. Perfmon oder auch Tools wie PRTG und andere können hier weiter helfen.
Unterschätzen Sie nicht den Bedarf an "Connections".
Internet Explorer baut z.B. bis zu 4 Connections parallel auf, d.h. ein
OWA-User hat vier "Channels" offen.
Auch Outlook hat in der Regel 3 und mehr Kanäle offen und nutzt parallel
noch die Webservices (OOF, Free/Busy/UM), OAB und andere Dienste, die
weitere Ports bedeuten.
ActiveSync Clients hingegen nutzen meist nur eine Connection, die aber
permanent gehalten wird.
Und dann kommt natürlich noch die Bandbreite dazu, wobei 4x GB oder auch 950 Megabits schon mehr ist, als was ein Exchange Server oder ihre externe Internetanbindung wohl erreichen kann.
- Kemp Sizer für Exchange
http://www.kemptechnologies.com/fileadmin/templates/sizingDoc/lme_calc_2k/lme_calc_2k_emea.htm - How to Size a Citrix NetScaler Application Firewall
Cluster
http://support.citrix.com/article/CTX117469 - Hub Transport Logging
- CAS-Logging
Losgelöst von der nackten "Performance" unterscheiden sich Produkte durchaus auch noch bei dem Funktionsumfang. Das ist teilweise wie bei der Konfiguration eines Neuwagens. Es gibt Hersteller, die sehr günstig sind und wem die gebotene Funktion ausreicht, fährt damit sehr gut. In der Kompakt oder Mittelklasse ist es aber so, dass viele Hersteller eine allgemein gute Basis anbieten aber zu Zubehörlisten oder feinen Unterschiede erst nach längerer Beschäftigung mit der Materie klar werden.
Hersteller
Diese Seite kann sicher keine vollständige, aktuelle Übersicht aller Load Balancer im Markt bereit stellen. Sehen Sie diese Links eher als Startpunkt für eigene Recherchen. Zumal die Funktion der Lastverteilung nicht immer die einzige Funktion ist, sondern eine Teilkomponente einer kompletten Lösung. Schon daher ist das nicht alles "vergleichbar". Wie si im Abschnitt "Mehrwert" schon gelesen haben, dann kommen für eine Entscheidung durchaus noch andere Themen dazu.
Load Balancer und Application Routing mit IIS AAR
Auch Microsoft hat natürlich erkannt, dass eine Farm von Webservern mit NLB alleine nicht in jeder Hinsicht "Hochverfügbar" gemacht werden kann. NLB erkennt ja nicht, wenn ein Dienst nicht mehr sauber arbeitet. Zudem ist die Verteilung nur anhand der Client IPs aber z.B. nicht anhand von URLs möglich. Seit Feb 2009 gibt es nun ein AAR-Proxy für den IIS, welcher einen IIS vergleichbar zu Apache mit MODProxy nun zu einem URL-Proxy werden lässt. Damit kann ein Windows Server mit IIS7 selbst auch als Reverse Proxy Lasten Verteilen und mit verschiedenen Tests Systeme auf ihre Funktionsfähigkeit testen.
- Application Request Routing
http://www.iis.net/download/ApplicationRequestRouting - Forum zu AAR
http://forums.iis.net/1154.aspx
Das ist aus meiner Sicht aber eher etwas für größere Umgebungen, bei der eine Farm von "IIS7-Servern" zusammengeschaltet auf eine Farm von nachgeschalteten Applikations-Webservern zugreift. Die meisten Leser sind mit einem ISA/TMG als Reverse Proxy vermutlich besser bedient.
Sollten Sie dennoch mit IIS7 ARR Proxy einmal z.B. Outlook Anywhere (RPC over HTTP) veröffentlichen wollen, dann müssen Sie wissen, dass Outlook immer einen Request mit 1GB (1073741824 genaue Bytes) anfordert, selbst wenn die Menge an Daten dann kleiner ist. Der IIS7 hat aber per Default ein Limit auf 30 MB (HTTP Request Limit). Im IISLog kann man aber nicht erkennen, dass der Client einen so großen Request anfordert aber nicht wirklich verwendet. Entsprechend müssen Sie den Wert für "maximum allowed content length (Bytes)" im IIS7 anpassen.
Loadbalancer und Firewall
Einen häufigen Design-Fehler müssen Sie aber noch im Hinterkopf haben. Der Loadbalancer muss natürlich die Clients unterscheiden können, um die Verbindungen sauber zuordnen zu können. Wenn Sie aber nun eine Firewall auf dem Web vom Internet nach intern "vor" den Loadbalancer setzen und diese Firewall dann als "Reverse Proxy" agiert und die originäre Source-IP des Clients verschleiert, dann "sieht" der Loadbalancer nur die interne IP-Adresse des ReverseProxy. Eine "Verteilung" anhand der SourceIP ist dann natürlich der falsche Ansatz.
Es gibt mehrere Lösungswege, von denen ich drei einfach zu erklärende Optionen ich hier beschreibe
- Reverse Proxy gibt die
Client IP als Source weiter
Wenn der Proxy davor die Pakete nicht mit seiner IP-Adresse sondern weiter mit der originären Adresse des Clients an den LB weiter leitet, dann kann dieser weiterhin anhand der "Source-IP" die Daten verteilen. Erforderlich ist dann aber, dass der LB als "Default Gateway" die Pakete wieder an den Proxy leitet, damit er diese zum Client passend umsetzen kann. Das kann kniffliger werden, wenn der LB sowohl Zugriffe aus dem Internet als auch dem internen LAN bedienen soll - Reverse Proxy macht selbst
die Lastverteilung
Diverse Firewalls haben selbst Mechanismen zur Lastverteilung bestimmter Dienste. So kann ein TMG2010/ISA2006-Server z.B. HTTP auf eine "Webfarm" weitergeben und so selbst Verfügbarkeit und Lastverteilung hoch halten. Allerdings kann gerade der TMG2010/ISA2006 dies leider auch nur für HTTP/HTTPS aber nicht für SMTP, POP, IMAP und andere Protokolle. - Load Balancer nutzt anderes
Verteilverfahren, z.B. Cookies
Der LB muss sich nicht auf die SourceIP-Adresse als einziges Kriterium stützen. Wenn er z.B. ein SSL-Offloading unterstützt, dann kann er auch in den HTTPS-Datenstrom reinschauen und z.B.: Anhand Anmeldedaten, Sitzungscookies o.ä. die Zugriffe wiedererkennen und zuordnen. Dies ist ratsam, wenn man nicht nur den CAS-Server entlasten will, sondern der LB auch noch Schadcode abwehren kann oder viele Clients sich hinter wenigen IP-Adressen (NAT) verbergen.
Es gibt durchaus weitere Optionen, aber nicht jedes Verfahren ist für jede Anwendung gleich gut geeignet.
Loadbalancer und SCOM
Loadbalancer habe auch Auswirkungen auf die Überwachung von Diensten. Zum einen muss natürlich ein Loadbalancer die veröffentlichen Server selbst prüfen, um Ausfälle des physikalischen Dienstes zu erkennen und die Last abhängig von der Belastung der Server zu verteilen. Aber die Exchange Commandlets, die auch SCOM nutzt, sprechen z.B. die "InternalURL" und "ExternalURL" an. Wenn Sie diese passend zu ihrer Umgebung angepasst haben (Siehe CASArray und CASURLs), dann wird auch SCOM und die Exchange Test-Commandlets auf diese Namen gehen.
- Loopback
Nur was soll ein Loadbalancer denn mit einem Client anfangen, der vom Exchange CAS den Loadbalancer fragt und das Paket direkt wieder zum CAS zurück gibt. Wenn Sie hier den Loadbalancer nur "als Layer4-Router" betreiben, dann wird der CAS sich selbst antworten und keine Verbindung zustande kommen. Es gibt noch weitere Fälle. Wenn der Loadbalancer z.B. als ReverseProxy oder SNAT/DNAT arbeitet kann so ein Test funktionieren. - Real_Server-Test
Weiterhin hilft es für die Überwachung wenig, wenn eine Probe den Clusternamen nutzt, hinter dem sich dann 5 CAS-Server verbergen. Der Ausfall des ein oder anderen Servers kann der Loadbalancer einfach "verbergen" und die Überwachung hat noch nichts bemerkt. Ratsam ist hier also, dass der physikalische Servername geprüft wird oder der Status des Loadbalancers mit integriert wird.
Sie sehen also, dass ein Loadbalancer auch hier zusätzliche Anpassungen erforderlich macht.
Weitere Links
- NLB
-
How to Configure the RPC Proxy Server to Allow for SSL
Offloading on a Separate Server
http://technet.microsoft.com/en-us/library/bb124604(EXCHG.65).aspx -
Lync 2010 : Ports and Protocols for Internal Servers
Hardware Load Balancer Ports if Using Only Hardware Load Balancing http://technet.microsoft.com/en-us/library/gg398833.aspx -
Exchange Server 2010 Load Balancer Deployment
http://technet.microsoft.com/en-us/exchange/gg176682.aspx -
Microsoft Unified Communications Load Balancer
Deployment
http://technet.microsoft.com/en-us/office/ocs/cc843611.aspx - Configuring Static RPC Ports on an Exchange 2010
Client Access Server
http://social.technet.microsoft.com/wiki/contents/articles/configuring-static-rpc-ports-on-an-exchange-2010-client-access-server.aspx - Load Balancing Requirements of Exchange Protocols
http://technet.microsoft.com/en-us/library/ff625248.aspx - Microsoft Unified Communications Hardware Load
Balancer Deployment
http://technet.microsoft.com/de-ch/office/ocs/cc843611(en-us).aspx - Hardware Load Balancing with Office Communications
Server 2007 R2 (Load_Balancing_with_OCS_2007_R2.docx )
http://www.microsoft.com/downloads/details.aspx?FamilyID=91bdb328-8b9b-4759-a647-82133ed57908 - Wikipedia Load balancing (computing)
http://en.wikipedia.org/wiki/Load_balancing_(computing) - Oracle zertifiziert zwar keine Load Balancer aber es
gibt eine Liste von getesteten Geräten
http://www.oracle.com/technology/products/ias/hi_av/Tested_LBR_FW_SSLAccel.html - Whitepaper zu Exchange 2010 Hardware Load Balancing
http://www.loadbalancerblog.de/loadbalancing-anwendungen/load-balancing-exchange-2010-berndkruczek/ - Load Balancing Exchange 2010 – Netzwerk-Topologie
Beispiele
http://www.loadbalancerblog.de/loadbalancing-anwendungen/load-balancing-exchange-2010-netzwerk-topologie-beispiele/ - Hosted Exchange 2010 Setup Guide Part 3/4
enthalten Screencaptures zu Citrix NetScaler
Part 1 http://www.yusufozturk.info/exchange-server/hosted-exchange-2010-setup-guide-part-1.html
Part 2 http://www.yusufozturk.info/exchange-server/hosted-exchange-2010-setup-guide-part-2.html
Part 3 http://www.yusufozturk.info/exchange-server/hosted-exchange-2010-setup-guide-part-3.html
Part 4 http://www.yusufozturk.info/exchange-server/hosted-exchange-2010-setup-guide-part-4.html
Part 5 http://www.yusufozturk.info/exchange-server/hosted-exchange-2010-setup-guide-part-5.html - Exchange Server 2010 SP1 – SSLOffloading
http://idamd.blogspot.com/2010/10/exchange-server-2010-sp1-ssloffloading.html









