Diese Anleitung ist der dritte Teil einer Reihe, die Sie bei der Bereitstellung einer hochverfügbaren Windows-Architektur mit Microsoft Active Directory, SQL Server und Internet Information Services (IIS) unterstützt. In dieser Anleitung richten Sie zwei IIS-Webserver ein, die in verschiedenen Zonen innerhalb derselben Region ausgeführt werden. Anschließend verbinden Sie die Webserver mit Ihrer SQL Server-Verfügbarkeitsgruppe und den Domaincontrollern. Durch das Einrichten der Webserver hinter einem Load-Balancer reduzieren Sie die Last für die einzelnen Server. Sie können die Anwendung auch dann weiter ausführen, wenn einer der Server offline ist.
Die Reihe besteht aus folgenden Anleitungen:
- Fehlertolerante Microsoft Active Directory-Umgebung bereitstellen
- SQL-Server für mehrere Subnetze bereitstellen
- IIS-Webserver mit Load-Balancing bereitstellen (dieses Dokument)
Sie richten einen Domaincontroller und eine SQL Server-Instanz in einem Google Cloud-Projekt ein. Jede Komponente in dieser Bereitstellung ist außerdem so konzipiert, dass sie sicher in die von den Domaincontrollern bereitgestellte Windows-Authentifizierung integriert werden kann.
Die in dieser Anleitung beschriebene Architektur wurde für die Ausführung in Google Cloud entwickelt. Einige Komponenten wie Active Directory und SQL Server können jedoch lokal ausgeführt werden. In dieser Anleitung wird nur das Szenario behandelt, bei dem alle Komponenten in Google Cloud ausgeführt werden.
Ziele
- Zwei Netzwerk-Subnetze erstellen, die sich über zwei Zonen erstrecken.
- In jeder Zone eine virtuelle Maschine (VM) für Microsoft SQL Server bereitstellen.
- Jede SQL Server-Instanz so konfigurieren, dass sie Ihrer Active Directory-Domain hinzugefügt wird.
- Einen Windows Server-Failover-Cluster erstellen.
- Eine Bookshelf-Beispieldatenbank für SQL Server erstellen und konfigurieren.
- Die immer aktive SQL Server-Verfügbarkeitsgruppe einrichten.
Kosten
In dieser Anleitung verwenden Sie weiterhin Google Cloud-Ressourcen, die Sie in vorherigen Anleitungen konfiguriert haben. Sie verwenden die folgenden kostenpflichtigen Komponenten:
Gemäß dem Preisrechner liegen die geschätzten Kosten für diese Umgebung bei ca. 4 $ pro Tag.
Hinweise
Die in dieser Anleitung verwendete Konfiguration erfordert Zugriff auf einen Windows Domain Controller und eine funktionierende Active Directory-Domain. Wenn Sie diese Umgebung noch nicht haben, führen Sie die Schritte in den folgenden Anleitungen aus:
- Fehlertolerante Microsoft Active Directory-Umgebung bereitstellen
- SQL-Server für mehrere Subnetze bereitstellen
Für Teile dieser Anleitung führen Sie Aufgaben auf einer Windows-Workstation aus. Dies kann Ihr lokaler Computer sein. Er muss sich nicht innerhalb des VPC-Netzwerks befinden, das Sie für die IIS-Webserver verwenden. Prüfen Sie, ob auf der Workstation Folgendes installiert ist:
- Visual Studio ab Version 2013
- Git
- Tools for Visual Studio. Sie können diese Tools von der verlinkten Seite herunterladen.
Gemeinsame Variablen initialisieren
Im ersten Teil dieser Reihe haben Sie Variablen definiert, die festlegen, wo Elemente der Infrastruktur in Google Cloud bereitgestellt werden. Prüfen Sie, ob die Variablen noch korrekt festgelegt sind und mit den zuvor festgelegten Werten übereinstimmen.
Cloud Shell öffnen
Erstellen Sie in Cloud Shell die folgenden Umgebungsvariablen, um die Werte festzulegen, die später in der Anleitung benötigt werden.
Durch die Befehle wird als Region
us-east1
festgelegt. Wenn Sie in den vorherigen Anleitungen eine andere Region verwendet haben, ändern Sie die Region in diesem Skript entsprechend in die zuvor verwendete.region=us-east1 zone_1=${region}-b zone_2=${region}-c vpc_name=webappnet project_id=your-project-id
Ersetzen Sie your-project-id durch die ID des von Ihnen verwendeten Google Cloud-Projekts.
Netzwerkinfrastruktur erstellen
In diesem Abschnitt fügen Sie dem vorhandenen VPC-Netzwerk (Virtual Private Cloud) Subnetzwerke hinzu. (Sie haben das VPC-Netzwerk in einer vorherigen Anleitung erstellt.) Diese Subnetze bieten eindeutige IP-Adressbereiche, die den Webserverinstanzen zugewiesen sind und später optionale Firewallrichtlinien anhand der Subnetze bieten können.
Fügen Sie in Cloud Shell dem vorhandenen VPC-Netzwerk ein Subnetz hinzu:
gcloud compute networks subnets create public-webapp-zone \ --network $vpc_name \ --region $region \ --range 10.5.0.0/24 \ --project $project_id
Erstellen Sie eine interne Firewallregel, die Traffic zwischen internen IP-Adressen zulässt:
gcloud compute firewall-rules create allow-internal-ports-public-webapp \ --network $vpc_name \ --allow tcp:1-65535,udp:1-65535,icmp \ --source-ranges 10.5.0.0/24 \ --project $project_id
Webserver starten
Sie verwenden ein Image aus dem Google Cloud Marketplace, um Ihre Webserver bereitzustellen. Nachdem Sie die Webserver bereitgestellt haben, können Sie sie als Ziele für die Bereitstellung von Webanwendungen verwenden.
Ersten Server erstellen
Rufen Sie den Google Cloud Marketplace auf.
Wählen Sie in der Google Cloud Console das Google Cloud-Projekt aus, in dem der Webserver ausgeführt werden soll. Da diese Anleitung auf dem vorherigen Satz aufbaut, verwenden Sie für diese Anleitung dasselbe Projekt, das Sie in den vorherigen Anleitungen verwendet haben.
Legen Sie die folgenden Werte auf der Seite fest:
- Bereitstellungsname:
webserver1
- Zone: zone_1
- Windows Server-Betriebssystemversion: 2016
- Starttyp: nichtflüchtiger SSD-Speicher
- Laufwerkgröße: 200 GB
- Netzwerkname: vpc_name
- Subnetzwerkname:
public-webapp-zone
- Firewall: WebDeploy-Traffic zulassen, HTTP-Traffic zulassen
Ersetzen Sie zone_1 und vpc_name durch die Werte, die Sie zuvor beim Initialisieren von Variablen verwendet haben.
- Bereitstellungsname:
Klicken Sie auf Bereitstellen und warten Sie, bis die Google Cloud Console anzeigt, dass die Bereitstellung abgeschlossen ist.
Verbindung zur Serverinstanz herstellen
Erstellen Sie in Cloud Shell ein Passwort für die Instanz
webserver1
:gcloud compute reset-windows-password webserver1 \ --zone $zone_1 \ --project $project_id \ --quiet
Stellen Sie über Remote Desktop Protocol (RDP) eine Verbindung zur neuen Windows-Instanz her. Verwenden Sie die Anmeldedaten, die Sie im vorherigen Schritt erstellt haben.
Serverinstanz konfigurieren
Öffnen Sie auf der
webserver1
-Instanz das PowerShell-Terminal als Administrator.Legen Sie Variablen für die DNS-IP-Adressen und den Domainnamen fest:
$DNS1 = "10.1.0.100" $DNS2 = "10.2.0.100" $DomainName = "example-gcp.com"
Erstellen Sie ein lokales Dienstkonto mit dem Namen
webapp.service
, das Sie später zum Veröffentlichen der Webanwendung verwenden:net user webapp.service * /add
Geben Sie ein Passwort ein, wenn Sie dazu aufgefordert werden. Verwenden Sie ein starkes Passwort und speichern Sie es zur späteren Verwendung an einem sicheren Ort.
Aktivieren Sie das Konto und fügen Sie es der lokalen Gruppe "Administratoren" hinzu:
net user webapp.service /active:yes net localgroup administrators webapp.service /add
Konfigurieren Sie die DNS-Server:
netsh interface ip set dns Ethernet static $DNS1 netsh interface ip add dns Ethernet $DNS2 index=2
Fügen Sie dem Webserver die Domain
example-gcp.com
hinzu:Add-Computer -DomainName $DomainName -Credential (Get-Credential "example\Administrator")
Geben Sie ein Passwort für das Administratorkonto ein, wenn Sie dazu aufgefordert werden. Dies ist das Domainkonto, das Sie beim Erstellen einer Active Directory-Gesamtstruktur in der ersten Anleitung dieser Reihe verwendet haben. Verwenden Sie ein starkes Passwort und speichern Sie es zur späteren Verwendung an einem sicheren Ort.
Sie können die folgende Fehlermeldung ignorieren:
WARNING: The changes will take effect after you restart the computer webserver1.
Starten Sie die VM neu:
Restart-Computer
Dadurch wird die geöffnete RDP-Sitzung geschlossen.
Zweite Serverinstanz erstellen und konfigurieren
Sie wiederholen jetzt die vorherigen Schritte, um eine zweite Serverinstanz zu erstellen.
Wiederholen Sie das Verfahren zum Erstellen des Servers mit den folgenden Werten:
- Bereitstellungsname:
webserver2
- Zone: zone_2
- Maschinentyp: 2 vCPUs
- Windows Server-Betriebssystemversion: 2016
- Starttyp: nichtflüchtiger SSD-Speicher
- Laufwerkgröße: 200 GB
- Netzwerkname: vpc_name
- Subnetzwerkname:
public-webapp-zone
- Firewall: WebDeploy-Traffic zulassen, HTTP-Traffic zulassen
Ersetzen Sie zone_2 und vpc_name durch die Werte, die Sie zuvor beim Initialisieren von Variablen verwendet haben.
- Bereitstellungsname:
Erstellen Sie ein Passwort für die Windows-Instanz
webserver2
:gcloud compute reset-windows-password webserver2 \ --zone $zone_2\ --project $project_id \ --quiet
In diesem Schritt wird das Passwort für Ihr Nutzerkonto für die Verbindung mit RDP festgelegt. Der Nutzername ist der Name Ihres Google-Kontos, also der Nutzername, der vom Befehl
gcloud config get-value core/account
zurückgegeben wird. Notieren Sie sich den Nutzernamen und das Passwort zur späteren Verwendung in dieser Anleitung.Stellen Sie über RDP eine Verbindung zur Instanz her. Verwenden Sie die Anmeldedaten, die Sie im vorherigen Schritt erstellt haben.
Stellen Sie eine Verbindung zur Instanz
webserver2
her. Führen Sie die Schritte aus, die Sie für die erste Instanz verwendet haben. Verwenden Sie jedoch das Passwort, das Sie für die zweite Serverinstanz erstellt haben.Konfigurieren Sie die Instanz
webserver2
. Führen Sie die Schritte aus, die Sie zum Konfigurieren der ersten Instanz verwendet haben. Erstellen Sie dasselbe Dienstkonto mit demselben Passwort.
Webanwendung klonen
Die nächste Aufgabe besteht darin, jeden IIS-Server zu konfigurieren und eine ASP.NET-Beispielanwendung bereitzustellen. Die Webanwendung verfügt über Anmeldedaten, um automatisch eine Verbindung zur SQL Server-Instanz herzustellen, die Sie in der vorherigen Anleitung konfiguriert haben.
Achten Sie darauf, dass Sie auf der Windows-Workstation angemeldet sind, auf der Visual Studio und Git installiert sind.
Klonen Sie in einem Befehlsfenster auf der Windows-Workstation das Quellcode-Beispiel-Repository auf die Workstation:
cd c:\ git clone https://github.com/GoogleCloudPlatform/getting-started-dotnet.git cd getting-started-dotnet git checkout ad49d787eec88fb30a4b45b4146f5cb63c0519e
Gehen Sie zum folgenden Ordner:
C:\getting-started-dotnet\aspnet\2-structured-data
Doppelklicken Sie auf die Datei
2-structured-data.sln
, um die Beispielanwendungslösung in Visual Studio zu öffnen.Doppelklicken Sie im Projektmappen-Explorer auf die Datei
Web.config
, um sie zu öffnen.Legen Sie für den Schlüssel
GoogleCloudSamples:ProjectId
die Projekt-ID fest.Für die Projekt-ID
webapp-sql-ad
sieht die Zeile in etwa so aus:<add key="GoogleCloudSamples:ProjectId" value="webapp-sql-ad" />
Legen Sie den Wert
GoogleCloudSamples:BookStore
aufsqlserver
fest:<add key="GoogleCloudSamples:BookStore" value="sqlserver" />
Suchen Sie am Ende der Datei unter
<connectionStrings>
das XML-UnterelementconnectionStrings
mit dem Attributname="LocalSqlServer"
. Führen Sie anschließend folgende Schritte aus:- Aktualisieren Sie den Wert
connectionString
mit dem Namen des SQL Server-Verfügbarkeitsgruppenlisteners, alsosql-listener
. (Sie richten diesen Listener in dieser Anleitungsreihe unter SQL-Server für mehrere Subnetze bereitstellen ein.) - Ändern Sie
Initial Catalog
zubookshelf
. - Setzen Sie
Integrated Security
aufTrue
. - Verwenden Sie beim Einrichten der Datenbank den Nutzernamen und das Anmeldepasswort, die Sie für das Datenbankdienstkonto erstellt haben.
- Aktualisieren Sie den Wert
Speichern und schließen Sie die
Web.config
-Datei.Klicken Sie zum Erstellen der Lösung im Visual Studio-Menü auf Erstellen > Projektmappe erstellen.
ASP.NET-Anwendung bereitstellen
In diesem Abschnitt stellen Sie die Webanwendung auf beiden Webservern bereit.
Wenn Sie die Datei
2-structured-data.sln
auf der Workstation geschlossen haben, öffnen Sie sie wieder. Suchen Sie die Datei im folgenden Ordner und doppelklicken Sie darauf:C:\getting-started-dotnet\aspnet\2-structured-data
Klicken Sie in Visual Studio auf Tools > Google Cloud Tools > Google Cloud Explorer.
Wählen Sie das Projekt aus, an dem Sie arbeiten, und erweitern Sie dann Google Compute Engine.
Klicken Sie mit der rechten Maustaste auf die Instanz
webserver1
.Wählen Sie Manage Windows credentials (Windows-Anmeldedaten verwalten).
Klicken Sie auf Add Credentials (Anmeldedaten hinzufügen)
Geben Sie den Nutzernamen
webapp.service
ein.Wählen Sie I have password for this user (Ich habe das Passwort für diesen Nutzer) aus und geben Sie dann das Passwort ein, das Sie beim Starten der Webserver erstellt haben.
Stellen Sie sicher, dass Create a password for me (Passwort für mich erstellen) nicht ausgewählt ist, und klicken Sie dann auf Speichern.
Klicken Sie auf Close (Schließen), um das Fenster mit den Windows-Anmeldedaten zu schließen.
Schließen Sie Google Cloud Explorer.
Klicken Sie in Visual Studio auf Tools > Google Cloud Tools > Publish 2-structured-data to Google Cloud (2-strukturierte Daten in Google Cloud veröffentlichen).
Klicken Sie im Dialogfeld Publish (Veröffentlichen) auf Compute Engine.
Wählen Sie die VM
webserver1
aus und setzen Sie Anmeldeinformationen aufwebapp.service
.Klicken Sie auf Publish (Veröffentlichen), um die Beispiel-App zu erstellen und bereitzustellen.
Nachdem die Beispielanwendung veröffentlicht wurde, öffnet Visual Studio die Anwendung in Ihrem Standardwebbrowser.
Wiederholen Sie diesen Vorgang für
webserver2
.
Load-Balancing einrichten
Sie können jetzt Netzwerk-Load-Balancing für die Webserver einrichten. Im Rahmen dieses Vorgangs fügen Sie dem Load-Balancer eine Systemdiagnose hinzu. Der globale Load-Balancer verteilt Anfragen automatisch auf die IIS-Server. Wenn außerdem einer der IIS-Server bei den Systemdiagnosen ausfällt und offline ist, leitet der Load-Balancer den Traffic automatisch an den anderen Server weiter.
Erstellen Sie in Cloud Shell eine statische externe IP-Adresse für den Load-Balancer:
gcloud compute addresses create webapp-lb-ip \ --region $region \ --project $project_id
Die VM-Instanzen empfangen Pakete, die für diese IP-Adresse bestimmt sind.
Fügen Sie ein HTTP-Systemdiagnoseobjekt hinzu:
gcloud compute http-health-checks create bookshelf-check \ --project $project_id \ --request-path /Books
In diesem Beispiel werden die Standardeinstellungen für den Systemdiagnosemechanismus verwendet. Sie können diese Einstellungen anpassen. Sie geben den
/Books
-Anfragepfad an, da dieser Pfad von der Beispielwebanwendung verwendet wird.Fügen Sie einen Zielpool hinzu, der sich in derselben Region wie Ihre VM-Instanzen befindet. Für Zielpools ist ein Systemdiagnosedienst erforderlich. Verwenden Sie das Systemdiagnoseobjekt, das Sie in Schritt 2 für diesen Zielpool erstellt haben.
gcloud compute target-pools create books-lb \ --region $region \ --http-health-check bookshelf-check \ --project $project_id
Fügen Sie die IIS-Serverinstanzen zum Zielpool hinzu:
gcloud compute target-pools add-instances books-lb \ --instances webserver1 \ --instances-zone $zone_1 \ --project $project_id gcloud compute target-pools add-instances books-lb \ --instances webserver2 \ --instances-zone $zone_2 \ --project $project_id
Instanzen innerhalb eines Zielpools müssen sich in derselben Region befinden. Die Instanzen können jedoch in verschiedenen Zonen derselben Region sein.
Fügen Sie eine Weiterleitungsregel für eine externe IP-Adresse und einen Portbereich hinzu, der auf Ihren Zielpool verweist:
gcloud compute forwarding-rules create www-rule \ --region $region \ --ports 80 \ --address webapp-lb-ip \ --target-pool books-lb \ --project $project_id
Traffic an Instanzen senden
Nachdem der Load-Balancing-Dienst konfiguriert wurde, können Sie Traffic an den Load-Balancer senden.
- Warten Sie nach dem Einrichten des Load-Balancings mindestens eine Minute, damit die Konfiguration vollständig geladen werden kann.
Prüfen Sie in Cloud Shell den Zustand der Instanzen im Load-Balancer:
gcloud compute target-pools get-health books-lb \ --region $region \ --project $project_id
Die Ausgabe sieht etwa so aus:
--- healthStatus: - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/sales-enablement-support/zones/us-east1-c/instances/webserver1 ipAddress: 35.190.170.76 kind: compute#targetPoolInstanceHealth --- healthStatus: - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/sales-enablement-support/zones/us-east1-b/instances/webserver2 ipAddress: 35.190.170.76
Kopieren Sie den Wert
ipAddress
. Dies ist die IP-Adresse des Load-Balancers.Geben Sie in einem Browserfenster die IP-Adresse des Load-Balancers ein.
Wenn alles funktioniert, wird die Standardseite für die bereitgestellte ASP.NET-Webanwendung angezeigt:
Load-Balancing und Redundanz testen
Sie können jetzt prüfen, wie sich der Cluster verhält, wenn Komponenten offline geschaltet werden. Sie können das Load-Balancing und die Redundanz auf mehreren Ebenen testen, indem Sie eine Instanz von Active Directory, SQL Server und den IIS-Servern gezielt herunterfahren.
Rufen Sie in der Google Cloud Console die Seite "VM-Instanzen" auf.
Wählen Sie eine Instanz für Active Directory, SQL Server oder IIS aus. Sie können jede dieser Instanzen auswählen, um zu simulieren, dass eine Komponente offline geht.
Klicken Sie auf Beenden.
Geben Sie in einem Browserfenster die IP-Adresse des Load-Balancers noch einmal ein.
Sie sehen die Standardseite der Bookshelf-Anwendung. Dies bedeutet, dass die Anwendung noch ausgeführt wird, obwohl die Komponenten der Infrastruktur nicht mehr verfügbar sind.
Wiederholen Sie optional die Schritte 2 und 3 für andere Komponenten. Wenn Sie vorher z. B. die SQL Server-Instanz heruntergefahren haben, fahren Sie jetzt eine IIS-Instanz herunter.
Solange eine Instanz jeder Komponente ausgeführt wird, funktioniert die Anwendung weiter.
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie die von Ihnen erstellten Google Cloud-Ressourcen bereinigen, damit Ihnen diese nicht weiter in Rechnung gestellt werden. Sie können das gesamte Projekt oder die Ressourcen löschen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen.
Projekt löschen
Ressourcen innerhalb des Projekts löschen
Zu Beginn der Anleitung haben Sie Variablen definiert, die steuern, wo Elemente der Infrastruktur bereitgestellt werden. Sie verwenden diese Variablen in diesem Abschnitt zur Bereinigung. Achten Sie darauf, dass die folgenden Variablen festgelegt sind:
region=us-east1 zone_1=${region}-b zone_2=${region}-c vpc_name=webappnet project_id=your-project-id
Ersetzen Sie your-project-id durch die ID des von Ihnen verwendeten Google Cloud-Projekts.
Löschen Sie die VMs, die Sie in dieser Anleitung erstellt haben:
gcloud compute instances delete ad-dc1 \ --zone $zone_1 \ --project $project_id \ --quiet gcloud compute instances delete ad-dc2 \ --zone $zone_2 \ --project $project_id \ --quiet gcloud compute instances delete cluster-sql1 \ --zone $zone_1 \ --project $project_id \ --quiet gcloud compute instances delete cluster-sql2 \ --zone $zone_2 \ --project $project_id \ --quiet gcloud compute instances delete webserver1 \ --zone $zone_1 \ --project $project_id \ --quiet gcloud compute instances delete webserver2 \ --zone $zone_2 \ --project $project_id \ --quiet
Löschen Sie die Firewallregeln und Routen, die Sie in dieser Anleitung erstellt haben:
gcloud compute firewall-rules delete \ allow-internal-ports-private-ad \ allow-internal-ports-private-sql \ allow-internal-ports-public-webapp \ allow-rdp \ --project $project_id \ --quiet gcloud compute firewall-rules delete \ webserver1-tcp-80 \ webserver1-tcp-8172 \ webserver2-tcp-80 \ webserver2-tcp-8172 \ --project $project_id \ --quiet gcloud compute routes delete \ cluster-sql1-route \ cluster-sql1-route-listener \ cluster-sql2-route \ cluster-sql2-route-listener \ --project $project_id \ --quiet
Löschen Sie die Subnetze im VPC-Netzwerk:
gcloud compute networks subnets delete \ --region $region \ private-ad-zone-a \ private-ad-zone-b \ private-sql-zone-a \ private-sql-zone-b \ public-webapp-zone \ --project $project_id \ --quiet
Löschen Sie das VPC-Netzwerk:
gcloud compute networks delete $vpc_name \ --project $project_id \ --quiet
Löschen Sie die statische IP-Adresse des Load-Balancers, die Sie erstellt haben:
gcloud compute addresses delete webapp-lb-ip \ --region $region \ --project $project_id \ --quiet
Löschen Sie die Load-Balancer-Infrastruktur:
gcloud compute forwarding-rules delete www-rule \ --region $region \ --project $project_id \ --quiet gcloud compute target-pools delete books-lb \ --region $region \ --project $project_id \ --quiet gcloud compute http-health-checks delete bookshelf-check \ --project $project_id \ --quiet
Nächste Schritte
- Best Practices für das Entwerfen skalierbarer und hochverfügbarer Arbeitslasten
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center