Regionenübergreifendes Load-Balancing mit Microsoft IIS-Back-Ends

In dieser Anleitung wird beschrieben, wie Sie Traffic mit dem HTTP(S)-Load-Balancer von Google Compute Engine auf Microsoft IIS-Webserver (Internet Information Services) in verschiedenen Compute Engine-Regionen verteilen.

Szenario

Sie müssen den Traffic für die Website www.example.com mithilfe von Load-Balancing verteilen. Es soll sichergestellt werden, dass eingehende Requests zur am nächsten gelegenen Region weitergeleitet werden. Gleichzeitig ist jedoch wichtig, dass bei einem Ausfall oder wenn Instanzen in einer Region ihre Kapazitätsgrenze erreichen, ein Failover der Requests zu einer intakten Instanz in der am nächsten gelegenen Region erfolgt.

Durch die Konfiguration in diesem Szenario erhalten Sie ein HTTP(S)-Load-Balancer, der Requests über eine einzige globale IP-Adresse empfängt. Diese IP-Adresse kann jede eingehende Anfrage nach Verbindungstyp (d. h. HTTP oder HTTPS) weiterleiten. Bei HTTPS-Anfragen implementiert der Load-Balancer die SSL- bzw. TLS-Verschlüsselung zwischen dem Client, der die Anfrage sendet, und dem Load-Balancer.

Das folgende Diagramm zeigt die Architektur des Load-Balancers:

Abbildung eines regionenübergreifenden Load-Balancing (zum Vergrößern klicken)
Abbildung eines regionenübergreifenden Load-Balancings (zum Vergrößern klicken)

Der Load-Balancer umfasst mehrere Komponenten, um eine möglichst effektive Konfiguration sicherzustellen. Eine Beschreibung der Funktion der einzelnen Komponenten finden Sie in der Übersicht über das HTTP(S)-Load-Balancing.

In dieser Anleitung wird Folgendes vorausgesetzt:

Back-End-Instanzen einrichten

In diesem Abschnitt erstellen Sie zwei Back-End-Dienste in unterschiedlichen Regionen. Jeder der Back-End-Dienste beinhaltet zwei Back-End-Instanzen, die jeweils einen Microsoft IIS-Webserver auf Windows Server 2012 ausführen. Um eine aufwändige Konfiguration jedes Servers zu vermeiden, erstellen Sie von einer Serverinstanz ein Festplatten-Image. Dieses verwenden Sie anschließend für die Erstellung der anderen Serverinstanzen.

Instanz für Quell-Image erstellen

So erstellen Sie die Instanz für das Quell-Image:

  1. Öffnen Sie auf Ihrem lokalen Windows-Gerät die PowerShell.
  2. Erstellen Sie eine neue Windows Server 2012-Instanz in der Region us-central1 und fügen Sie der Instanz die Tags rdp-tag und www-tag hinzu. Sie gewähren später externen Zugriff auf die Instanz, indem Sie für diese Tags Firewallregeln erstellen.

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

Nachdem Sie eine Instanz für das Quell-Image erstellt haben, richten Sie Firewallregeln ein, um den externen Zugriff auf die Instanz zu erlauben:

  1. Erstellen Sie eine Firewallregel, um externen Zugriff auf Port 3389 für alle mit rdp-tag gekennzeichneten Instanzen zuzulassen. Diese Regel erlaubt es, unter Verwendung von RDP auf Ihre Quell-Image-Instanz und alle nachfolgenden Instanzen zuzugreifen, die mit dem Tag rdp-tag gekennzeichnet sind:

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. Erstellen Sie eine weitere Firewallregel, um externen Zugriff auf Port 80 für alle Instanzen mit dem Tag www-tag zuzulassen. Diese Regel erlaubt es der Quell-Image-Instanz und allen nachfolgenden Instanzen, die mit dem Tag www-tag gekennzeichnet sind, HTTP-Traffic zu senden und zu empfangen:

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

Instanz für Quell-Image konfigurieren

Erstellen Sie anschließend in der Instanz für das Quell-Image einen neuen Windows-Nutzer und stellen Sie eine RDP-Verbindung her:

  1. Rufen Sie in Ihrem Webbrowser die Seite "VM-Instanzen" in der Cloud Console auf und klicken Sie auf den Namen Ihrer Quell-Image-Instanz (src-img).
  2. Klicken Sie auf Windows-Passwort erstellen oder zurücksetzen.
  3. Geben Sie im Dialogfeld Neues Windows-Passwort festlegen Ihren Nutzernamen ein und klicken Sie auf Festlegen, um das Nutzerkonto in Ihrer Instanz zu erstellen.
  4. Kopieren Sie das angegebene Passwort und schließen Sie das Dialogfeld.
  5. Klicken Sie auf der Konsolenseite der Instanz auf RDP.

    • Wenn Sie die Chrome RDP-Erweiterung installiert haben, wird das Fenster der Erweiterung geöffnet. Bestätigen Sie, dass Sie eine Verbindung zur Instanz herstellen möchten, geben Sie Ihren Nutzernamen und Ihr Passwort ein und klicken Sie auf OK, um eine Verbindung zu Ihrer Instanz herzustellen.
    • Wenn Sie die Chrome RDP-Erweiterung nicht installiert haben, erhalten Sie die Möglichkeit, die RDP-Datei für die Instanz herunterzuladen. Stellen Sie mithilfe dieser Datei die Verbindung zur Instanz her. Sie können dafür die Windows-Remotedesktopverbindung oder einen beliebigen Drittanbieter-Client verwenden.

Nachdem Sie eine RDP-Verbindung zur Instanz für das Quell-Image hergestellt haben, installieren Sie IIS und geben eine Standardstartseite an:

  1. Öffnen Sie die PowerShell als Administrator in der Instanz für das Quell-Image.
  2. Fügen Sie in der PowerShell Folgendes ein, um die IIS-Dienste und -Abhängigkeiten zu installieren:

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. Erstellen Sie nach der Installation Ihrer Dienste eine neue Startseite in C:\inetpub\wwwroot, dem Standard-Webverzeichnis von IIS:

    PS C:\> Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html

Prüfen, ob die Instanz für das Quell-Image Inhalte übermitteln kann

Rufen Sie in Ihrem Webbrowser die Seite der VM-Instanzen auf. Klicken Sie auf die externe IP-Adresse der Instanz, um zu prüfen, ob Sie Inhalte an die von Ihnen erstellte Startseite übermittelt.

Ein wiederverwendbares Windows Server 2012-Image der Instanz für das Quell-Image erstellen

Nachdem Sie sichergestellt haben, dass die Instanz für das Quell-Image ordnungsgemäß konfiguriert ist und Inhalte übermitteln kann, erstellen Sie so von der persistenten Root-Festplatte der Instanz ein wiederverwendbares Festplatten-Image:

  1. Öffnen Sie die PowerShell als Administrator in der Instanz für das Quell-Image.
  2. Führen Sie den folgenden Befehl aus, um das System für den Klonvorgang vorzubereiten:

     PS C:> GCESysprep

    Nach Abschluss des GCESysprep-Vorgangs wird die Verbindung zu Ihrer RDP-Sitzung automatisch getrennt.

  3. Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus, um die Quelleninstanz zu löschen und gleichzeitig das persistente Root-Laufwerk beizubehalten.

     PS C:> gcloud compute instances delete src-img --keep-disks boot

  4. Nachdem Sie die Instanz gelöscht haben, erstellen Sie von dem beibehaltenen nichtflüchtigen Root-Laufwerk ein neues Image.

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

Instanzvorlage mithilfe des Quell-Images erstellen

Nachdem Sie nun ein Laufwerks-Image des konfigurierten Windows-Servers erstellt haben, können Sie dieses als Quell-Image für eine Instanzvorlage verwenden. Sie konfigurieren später zwei verwaltete Instanzgruppen, die diese Vorlage zum Erstellen neuer Instanzen verwenden.

Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus, um eine Instanzvorlage zu erstellen. Dabei stehen win-be-img für Ihr Quell-Image und rdp-tag und www-tag für Ihre Instanztags:

PS C:\> gcloud compute instance-templates create win-be-tmpl ^
    --tags rdp-tag,www-tag ^
    --image win-be-img

Verwaltete Instanzgruppe für jede Region erstellen

Erstellen Sie anschließend für jede Region verwaltete Instanzgruppen. Den erstellten Instanzgruppen werden anschließend zwei identische Instanzen hinzugefügt, die auf der zuvor definierten Instanzvorlage basieren. Später konfigurieren Sie den Load-Balancer so, dass diese Instanzgruppen als Back-End-Ziele verwendet werden.

So erstellen Sie verwaltete Instanzgruppen:

  1. Führen Sie auf dem lokalen Computer den folgenden Befehl aus, um eine neue verwaltete Instanzgruppe in der Zone us-central1-f zu erstellen und zwei identischen Instanzen darin bereitzustellen:

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. Führen Sie diesen Schritt auch in der Zone europe-west1-d aus:

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

Ausführung der Back-End-Instanzen sicherstellen

Rufen Sie in Ihrem Webbrowser die Seite der VM-Instanzen auf. Klicken Sie auf die externe IP-Adresse jedes Back-Ends, um sicherzustellen, dass das Back-End Inhalte an die zuvor erstellte Startseite übermittelt.

Load-Balancing-Dienst erstellen und konfigurieren

Der Load-Balancing-Dienst für Compute Engine beinhaltet mehrere Komponenten. In diesem Abschnitt erstellen Sie die Komponenten und verbinden sie.

  1. Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus, um eine neue Systemdiagnose zu erstellen. Der Load-Balancer prüft mithilfe dieser Systemdiagnose den Status der Back-End-Instanzen.

    PS C:\> gcloud compute http-health-checks create basic-check
  2. Erstellen Sie einen Back-End-Dienst:

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check --global-health-checks
  3. Fügen Sie die Instanzgruppen dem Back-End-Dienst als Back-End-Ziele hinzu:

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. Erstellen Sie eine Standard-URL-Zuordnung, die alle eingehenden Anfragen an alle Ihre Instanzen weiterleitet:

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. Erstellen Sie eine SSL-Zertifikatsressource. Der Load-Balancer verwendet diese Ressource zum Ver- und Entschlüsseln von Traffic.

    Wenn Sie bereits einen privaten Schlüssel und ein SSL-Zertifikat von einer Zertifizierungsstelle haben, können Sie diese verwenden, um mit dem folgenden Befehl eine neue SSLCertificate-Ressource zu erstellen. Falls nicht, können Sie ein selbst signiertes Zertifikat zum Testen erstellen und verwenden. Weitere Informationen finden Sie unter Privaten Schlüssel und Zertifikat erstellen.

    Führen Sie zum Erstellen der SSL-Zertifikatsressource den folgenden Befehl aus. Ersetzen Sie <crt_file_path> durch den lokalen Dateipfad Ihres Zertifikats und <key_file_path> durch den Dateipfad Ihres privaten Schlüssels.

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  6. Erstellen Sie Ziel-HTTP- und -HTTPS-Proxys, um Anfragen an Ihre URL-Zuordnung weiterzuleiten. Der Proxy ist der Teil des Load-Balancers, der das SSL-Zertifikat für das HTTPS-Load-Balancing enthält. Daher verknüpfen Sie Ihr Zertifikat in diesem Schritt mit dem Proxy:

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  7. Damit der Load-Balancer Traffic zuverlässig empfängt, weisen Sie der globalen Weiterleitungsregel des Load-Balancers eine globale statische IP-Adresse zu. Führen Sie zum Erstellen einer globalen statischen IP-Adresse den folgenden Befehl aus:

     PS C:> gcloud compute addresses create lb-ip --global

    Notieren Sie sich die IP-Adresse.

  8. Erstellen Sie für die Verarbeitung eingehender HTTP- und HTTPS-Anfragen zwei globale Weiterleitungsregeln. Mit jeder Weiterleitungsregel wird Traffic entsprechend der angegebenen IP-Adresse sowie des angegebenen IP-Protokolls und Ports an einen der von Ihnen erstellten Zielproxys gesendet.

    Ersetzen Sie <lb_ip_addr> in den folgenden Befehlen durch die statische IP-Adresse, die Sie im vorherigen Schritt erstellt haben:

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address <lb_ip_addr> --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address <lb_ip_addr> --global ^
          --target-https-proxy https-lb-proxy --port-range 443

Nachdem Sie die globalen Weiterleitungsregeln erstellt haben, kann es mehrere Minuten dauern, bis die Konfiguration verfügbar ist. Um den Fortschritt der Weitergabe zu überprüfen, können Sie entweder Ihre Konfiguration in der Google Cloud Console überwachen oder den folgenden Befehl auf Ihrem lokalen Computer ausführen:

PS C:\> gcloud compute backend-services get-health be-srv

Traffic an Back-Ends senden

Nachdem Sie Ihren Load-Balancer konfiguriert haben, können Sie beginnen, Traffic an die Weiterleitungsregel zu senden und beobachten, wie der Traffic auf verschiedene Instanzen verteilt wird.

So senden Sie Traffic an Ihre Back-Ends:

  1. Öffnen Sie die Seite "Load-Balancing" in der Cloud Console.
  2. Klicken Sie auf den Namen des Load-Balancers.
  3. Bestätigen Sie im Abschnitt Back-End, dass die Instanzen fehlerfrei sind. Klicken Sie dazu auf das Kästchen in der Spalte Fehlerfrei. Es kann etwas dauern, bis angezeigt wird, dass die Instanzen fehlerfrei sind.
  4. Sobald dies der Fall ist, kopieren Sie den IP:Port aus dem Abschnitt Front-End und fügen Sie ihn in Ihren Browser ein.
  5. In Ihrem Browser sollte nun Ihre Standardinhaltsseite angezeigt werden.

Zugriff auf Back-Ends einschränken

Nachdem Sie sichergestellt haben, dass alles ordnungsgemäß funktioniert, ändern Sie die Firewallregeln, sodass nur HTTP(S)-Traffic von Ihrem Load-Balancing-Dienst zulässig ist.

  1. Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus, um Ihre www-rule-Firewallregel zu aktualisieren. Dadurch wird der Traffic von allen IP-Bereichen außer denen des HTTP(S)-Load-Balancing-Proxys und der Systemdiagnose (130.211.0.0/22 und 35.191.0.0/16) eingeschränkt:

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22,35.191.0.0/16 ^
           --target-tags www-tag
  2. Rufen Sie in Ihrem Webbrowser die Seite der VM-Instanzen auf.

  3. Klicken Sie auf jede Instanz, um sicherzustellen, dass diese jetzt nicht zugänglich ist.

Ausfall simulieren

Sie können für eine oder mehrere Instanzen in einer Region einen Ausfall simulieren, um zu prüfen, wie die Last auf die restlichen intakten Instanzen verteilt wird.

So deaktivieren Sie den Erhalt weiterer Anfragen in einer Instanz:

  1. Stellen Sie eine RDP-Verbindung zu der Instanz her.
  2. Öffnen Sie in der Instanz die PowerShell als Administrator.
  3. Führen Sie den folgenden Befehl aus, um eine neue Firewallregel für die Instanz zu erstellen. Dieser Befehl blockiert den Systemdiagnose-Traffic und unterbindet sämtliche neuen HTTP-Verbindungen vom Load-Balancer zur Instanz:

    PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22,35.191.0.0/16
  4. Führen Sie auf Ihrem lokalen Computer den folgenden Befehl aus, um sicherzustellen, dass die Instanz jetzt den Status UNHEALTHY meldet:

    PS C:\> gcloud compute backend-services get-health be-srv
  5. Wenn die Instanz den Status UNHEALTHY meldet, senden Sie eine Anfrage an den Load-Balancer. Es sollten nur die intakten Instanzen antworten.

  6. Nach Abschluss des simulierten Ausfalls können Sie die Verbindung zu der Instanz wiederherstellen, indem Sie die Firewallregel löschen. Öffnen Sie in der fehlerhaften Instanz die PowerShell als Administrator und führen Sie den folgenden Befehl aus, um die Regel zu löschen:

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

Bereinigen

Nachdem Sie diese Anleitung für Microsoft IIS abgeschlossen haben, können Sie die in Google Cloud erstellten Ressourcen bereinigen, damit sie keine kostenpflichtigen Kontingente verbrauchen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

Google Cloud Platform-Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Instanzen löschen

So löschen Sie eine Compute Engine-Instanz:

  1. Öffnen Sie in der Cloud Console die Seite VM-Instanzen.

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf das Kästchen für die Instanz, die Sie löschen möchten.
  3. Klicken Sie auf Löschen , um die Instanz zu löschen.

Nichtflüchtige Speicher löschen

So löschen Sie ein Compute Engine-Laufwerk:

  1. Rufen Sie in der Cloud Console die Seite Laufwerke auf.

    Zur Seite „Laufwerke“

  2. Klicken Sie auf das Kästchen für das Laufwerk, das Sie löschen möchten.
  3. Klicken Sie auf Löschen , um das Laufwerk zu löschen.

Weitere Informationen

Informationen zur Verwendung von Windows in Compute Engine

Lesen Sie die Dokumentation zu Windows-Instanzen in Compute Engine.

Weitere Anleitungen ausprobieren

Weitere Google Cloud Platform-Funktionen mit unseren Anleitungen testen