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

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In dieser Anleitung wird beschrieben, wie Sie Traffic mit dem externen HTTP(S)-Load-Balancer-Dienst von 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. Sie möchten dafür sorgen, dass eingehende Anfragen zur am nächsten gelegenen Region weitergeleitet werden. Außerdem soll bei Bedarf ein Failover von Anfragen auf eine intakte Instanz in der nächstgelegenen Region erfolgen.

Durch die Konfiguration in diesem Szenario erhalten Sie einen externen HTTP(S)-Load-Balancer, der Anfragen ü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 Lastenausgleichs (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 zu ermöglichen. Eine Beschreibung der Funktion der einzelnen Komponenten finden Sie in der Übersicht über das HTTP(S)-Load-Balancing.

  • Compute Engine-Instanzen virtueller Maschinen
  • Persistente Compute Engine-Festplatten
  • Windows Server 2012-Maschinen-Images

Die Kosten für die Ausführung der Anleitung variieren abhängig von der Laufzeit, der Anzahl der Instanzen, der Laufwerksgröße und dem Maschinentyp. Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen. Wenn Sie neu bei Google Cloud sind, steht Ihnen möglicherweise eine kostenlose Testversion zur Verfügung.

In dieser Anleitung wird Folgendes vorausgesetzt:

  • Sie verwenden ein Windows-Gerät.
  • Sie haben ein Google Cloud Console-Projekt erstellt.
  • Sie haben die gcloud CLI installiert. Dieses Tool dient zur Interaktion mit Google Cloud.
  • Sie haben zur Authentifizierung gegenüber der Google Cloud Platform gcloud auth login ausgeführt.
  • Sie haben einen RDP-Client (Remote Desktop Protocol) Ihrer Wahl installiert. Weitere Informationen finden Sie unter Microsoft Remote Desktop-Clients. Wenn Sie bereits einen RDP-Client installiert haben, können Sie diese Aufgabe überspringen.
  • Sie haben die Übersicht über das HTTP(S)-Load-Balancing gelesen und verstanden.

  • Sie haben Ihr Projekt als Standardprojekt festgelegt, mit dem das gcloud CLI interagiert. Falls nicht, führen Sie den folgenden Befehl aus:

    PS C:\> gcloud config set --project <project_name>
    

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 manuelle Konfiguration jedes Servers zu vermeiden, erstellen Sie von einer Serverinstanz ein Laufwerk-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 Firewallregeln mit diesen Tags 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 ermöglicht Zugriff unter Verwendung von RDP auf Ihre Quell-Image-Instanz und alle nachfolgenden Instanzen, 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 ermöglicht 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 Google Cloud Console auf und klicken Sie auf den Namen Ihrer Quell-Image-Instanz (src-img).
  2. Klicken Sie auf die Schaltfläche Windows-Passwort festlegen.
  3. Geben Sie im Dialogfeld Neues Windows-Passwort festlegen Ihren Nutzernamen ein.
  4. Klicken Sie auf Festlegen, um das Nutzerkonto in Ihrer Instanz zu erstellen.
  5. Kopieren Sie das angegebene Passwort und schließen Sie das Dialogfeld.
  6. Klicken Sie auf das Drop-down-Menü RDP und wählen Sie die Option RDP-Datei herunterladen aus, um die RDP-Datei für die Instanz herunterzuladen.

    Stellen Sie mithilfe dieser Datei die Verbindung zur Instanz mithilfe eines RDP-Clients her. Weitere Informationen finden Sie unter Microsoft Remote Desktop-Clients.

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 senden 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 verwenden, um neue Instanzen zu erstellen.

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 Pfad Ihres Zertifikats und <key_file_path> durch den Pfad 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 HTTP(S)-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, des IP-Protokolls und des Ports an einen der von Ihnen erstellten Ziel-Proxys 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 Google 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 geschehen ist, kopieren Sie IP:Port aus dem Front-End-Abschnitt und fügen Sie dies 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 ist.

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 die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

Google Cloud-Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google 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 Shut down (Beenden), um das Projekt zu löschen.

Instanzen löschen

So löschen Sie eine Compute Engine-Instanz:

  1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen auf.

    Zu Seite „VM-Instanzen“

  2. Klicken Sie auf das Kästchen für die Die Instanz, die Sie löschen möchten.
  3. Klicken Sie zum Löschen der Instanz auf Weitere Aktionen, dann auf Löschen, und folgen Sie dann der Anleitung.

Nichtflüchtige Speicher löschen

So löschen Sie ein Compute Engine-Laufwerk:

  1. Rufen Sie in der Google 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 zum Löschen des Laufwerks auf 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

Referenzarchitekturen, Diagramme, Anleitungen und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center