Wenn Sie mehrere SQL Server Enterprise-Instanzen auf der Compute Engine ausführen, können Sie diese Instanzen so konfigurieren, dass Windows Server Failover Clustering und SQL Server AlwaysOn Availability Groups verwendet werden, um eine hohe Verfügbarkeit und eine Notfallwiederherstellung zu ermöglichen.
Diese Anleitung zeigt Ihnen, wie Sie ein Cluster von Instanzen mit SQL Server Enterprise mit den notwendigen Netzwerkeinstellungen erstellen und diese Instanzen so konfigurieren können, dass Windows Server Failover Clustering und SQL Server AlwaysOn Availability Groups verwendet werden. Sie können SQL Server Enterprise-Instanzen verwenden, die entweder mit öffentlichen SQL Server-Images oder mit Microsoft License Mobility erstellt wurden.
Voraussetzungen
In dieser Anleitung wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:
- Sie sind mit den VPC-Netzwerken und Firewallregeln von Compute Engine vertraut.
- Sie sind mit dem Erstellen von Windows-Instanzen in Compute Engine vertraut.
- Sie sind mit dem Konfigurieren von Active Directory in Compute Engine vertraut.
VPC-Netzwerk einrichten
Erstellen Sie ein benutzerdefiniertes VPC-Netzwerk mit drei Subnetzen. Legen Sie dann die Firewallregeln fest, um den Datenverkehr zwischen internen virtuellen Maschinen (VMs) zu ermöglichen. Sie können bei Bedarf ein vorhandenes Netzwerk für diese Aufgabe verwenden. Wir empfehlen jedoch, Systeme in verschiedene Netzwerke und Subnetze zu isolieren. In dieser Anleitung wird davon ausgegangen, dass Sie die folgende VPC-Netzwerk- und Subnetzkonfiguration erstellen.
Erstellen Sie ein VPC-Netzwerk im benutzerdefinierten Modus.
gcloud compute networks create wsfcnet --subnet-mode custom
Fügen Sie dem VPC-Netzwerk drei Subnetze hinzu:
gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \ --region us-central1 --range 10.0.0.0/24
gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \ --region us-central1 --range 10.1.0.0/24
gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \ --region us-central1 --range 10.2.0.0/24
Erstellen Sie eine Firewallregel, die Traffic zwischen den Instanzen über interne IP-Adressen im neuen VPC-Netzwerk zulässt:
gcloud compute firewall-rules create allow-internal-ports \ --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \ --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
Erstellen Sie eine Firewallregel, die RDP-Verbindungen auf Port
3389
im VPC-Netzwerk zulässt:gcloud compute firewall-rules create allow-rdp --network wsfcnet \ --allow tcp:3389 --source-ranges 0.0.0.0/0
Windows-Domänencontroller erstellen
Erstellen Sie einen Windows-Domänencontroller (Domaincontroller). In dieser Anleitung ist die Domain dbeng.com
und der Name des Domaincontrollers dc-windows
unter der IP-Adresse 10.2.0.100
. Der Domaincontroller verwendet das Subnetz wsfcsubnet3
.
Erstellen Sie eine Instanz, die als Domaincontroller verwendet soll. Geben Sie für diese Anleitung einen kleinen
n1-standard-2
-Maschinentyp und das neueste Image aus der Imagefamiliewindows-2016
an.gcloud compute instances create dc-windows --machine-type n1-standard-2 \ --boot-disk-type pd-ssd --image-project windows-cloud \ --image-family windows-2016 --boot-disk-size 200GB \ --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
Erstellen Sie ein Passwort, damit Sie über ein lokales Konto eine Verbindung zur Domaincontroller-VM herstellen können. Notieren Sie Nutzernamen und Passwort.
Stellen Sie über RDP mit dem Nutzernamen und dem Passwort Ihres lokalen Kontos eine Verbindung zur Domaincontroller-VM her.
Führen Sie auf der Instanz PowerShell als Administrator aus, um das PowerShell-Terminal zu öffnen.
Richten Sie einen Nutzer mit Administratorrechten ein.
Führen Sie den folgenden Befehl aus und geben Sie ein Passwort für das Administratorkonto ein.
PS C:\> $Password = Read-Host -AsSecureString
Notieren Sie sich das eingegebene Passwort.
Legen Sie das Passwort für das Administratorkonto fest.
PS C:\> Set-LocalUser -Name Administrator -Password $Password
Aktivieren Sie das Administratorkonto.
PS C:\> Enable-LocalUser -Name Administrator
Legen Sie die folgenden Variablen fest:
PS C:\> $DomainName = "dbeng.com";
PS C:\> $DomainMode = "Win2012R2";
PS C:\> $ForestMode = "Win2012R2";
PS C:\> $DatabasePath = "C:\Windows\NTDS";
PS C:\> $LogPath = "C:\Windows\NTDS";
PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
Installieren Sie die folgenden Active Directory-Tools:
PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
Wenn die Instanz nach dem Erstellen der Domain nicht automatisch neu startet, starten Sie die Instanz manuell.
Stellen Sie nach dem Neustart der Instanz wieder eine Verbindung her. Verwenden Sie dazu das
Administrator
-Konto mit dem neu erstellten Domainnamen (dbeng.com
in dieser Anleitung).Erstellen Sie ein Domainkonto mit dem Namen
sql_service
, auf dem SQL Server ausgeführt werden soll:Geben Sie ein sicheres Passwort für die Verwendung mit dem SQL Server-Dienstkonto ein.
PS C:> $Password = Read-Host -AsSecureString
Notieren Sie sich das eingegebene Passwort. Verwenden Sie dieses Passwort für das SQL Server-Dienstkonto.
Erstellen Sie das SQL Server-Dienstkonto und legen Sie dessen Passwort fest.
PS C:\> New-LocalUser -Name "sql_service" -Description "SQL Agent and SQL Admin account." -Password $Password
Der Domaincontroller ist konfiguriert und Sie können die Verbindung zur Instanz dc-windows
trennen. Als Nächstes erstellen Sie die Instanzen für die Verfügbarkeitsgruppe.
Instanzen für Ihre Verfügbarkeitsgruppe einrichten
Erstellen Sie SQL Server-Instanzen für eine Verfügbarkeitsgruppe. Für den Namen der Verfügbarkeitsgruppe gelten Längenbeschränkungen.
Diese Instanzen verwenden die folgenden IP-Adresskonfigurationen mit Alias-IPs:
- Instanzname:
cluster-sql1
- Interne IP-Adresse:
10.0.0.4
- Name des Windows-Failover-Clusters:
cluster-ag
- IP-Adresse des Failover-Clusters:
10.0.0.5
(Alias-IP-Adresse) - Name der Verfügbarkeitsgruppe:
cl-listener
- Listener-Adresse der Verfügbarkeitsgruppe:
10.0.0.6
(Alias-IP-Adresse)
- Interne IP-Adresse:
- Instanzname:
cluster-sql2
- Interne IP-Adresse:
10.1.0.4
- Name des Windows-Failover-Clusters:
cluster-ag
- IP-Adresse des Failover-Clusters:
10.1.0.5
(Alias-IP-Adresse) - Name der Verfügbarkeitsgruppe:
cl-listener
- Listener-Adresse der Verfügbarkeitsgruppe:
10.1.0.6
(Alias-IP-Adresse)
- Interne IP-Adresse:
Erstellen Sie die SQL Server-Instanzen mithilfe einer der folgenden Methoden:
- Erstellen Sie eine SQL Server-Instanz mithilfe eines öffentlichen Images
- Mithilfe der Lizenzmobilität können Sie durch Software Assurance vorhandene Lizenzen in Compute Engine nutzen und diese Lizenzen zusätzlich zu öffentlichen Windows Server-Images anwenden.
Öffentliche SQL Server-Images
Erstellen Sie zwei Instanzen von öffentlichen SQL Server-Images. In diesem Beispiel nennen wir die Instanzen cluster-sql1
und cluster-sql2
. Legen Sie 200GB
für die Größe des Bootlaufwerks und n1-highmem-4
für den Maschinentyp fest. SQL Server-Instanzen erfordern in der Regel mehr Rechenressourcen als die Domaincontroller-Instanz. Wenn Sie später zusätzliche Rechenressourcen benötigen, können Sie den Maschinentyp dieser Instanzen ändern. Wenn zusätzlicher Speicherplatz erforderlich ist, fügen Sie ein Laufwerk hinzu oder ändern die Größe des nichtflüchtigen Bootlaufwerks. In größeren Verfügbarkeitsgruppen können Sie mehrere Instanzen erstellen.
Fügen Sie außerdem das Flag --metadata sysprep-specialize-script-ps1
ein, um während des Erstellens einer Instanz einen PowerShell-Befehl auszuführen, mit dem das Failover-Clustering
-Feature installiert wird.
Erstellen Sie für dieses Beispiel zwei Instanzen mithilfe der folgenden Befehle:
gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \ --zone us-central1-a \ --network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \ --can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \ --zone us-central1-f \ --network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \ --can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
Für größere Verfügbarkeitsgruppen können Sie zusätzliche Instanzen mit den entsprechenden IP-Adressen erstellen.
Bestehende Lizenzen
Wenn Sie eigene Lizenzen für SQL Server Enterprise basierend auf Microsoft License Mobility durch Software Assurance verwenden möchten, erstellen Sie ein Windows-Image, bei dem --guestOSFeatures
aktiviert ist. Installieren Sie SQL Server Enterprise dann später manuell.
Hinweis: Für diese Clusterkonfigurationsmethode ist die Option --guestOSFeatures
erforderlich, eine Betafunktion im Befehl gcloud
beta compute images create
.
- Erstellen Sie eine Windows Server-Instanz.
- Aktualisieren Sie auf dieser Instanz alle Komponenten auf die neuesten Versionen.
- Setzen Sie den Status für das automatische Löschen für das Bootlaufwerk dieser Instanz auf
false
. - Löschen Sie die Instanz.
- Erstellen Sie ein temporäres Laufwerk mit einem Windows Server-Standardimage.
- Erstellen Sie vom neuen Laufwerk ein benutzerdefiniertes Windows Server-Image und aktivieren Sie dabei
MULTI_IP_SUBNET
im ParameterguestOSFeatures
. - Nachdem das Image erstellt wurde, löschen Sie das temporäre Laufwerk:
- Verwenden Sie das benutzerdefinierte Image, um die neuen SQL Server-Instanzen für Ihre Verfügbarkeitsgruppe zu erstellen. SQL Server-Instanzen benötigen in der Regel mehr Rechenressourcen als die Domaincontroller-Instanz. Legen Sie deshalb mindestens einen
n1-highmem-4
-Maschinentyp fest. Wenn Sie später zusätzliche Rechenressourcen benötigen, können Sie den Maschinentyp dieser Instanzen ändern. Wenn zusätzlicher Speicherplatz erforderlich ist, fügen Sie ein Laufwerk hinzu oder ändern die Größe des nichtflüchtigen Bootlaufwerks. In größeren Verfügbarkeitsgruppen können Sie mehrere Instanzen erstellen. Für dieses Beispiel legen Sie zwei Instanzen an: - Installieren Sie auf jeder Instanz manuell SQL Server Enterprise.
gcloud compute disks create windows-2012-disk-new --size 200 \ --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \ --image-project windows-cloud
gcloud beta compute images create windows-server-2012-r2-dc-new \ --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \ --guest-os-features MULTI_IP_SUBNET
gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image windows-server-2012-r2-dc-new --zone us-central1-a \ --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \ --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \ --boot-disk-type pd-ssd --boot-disk-size 200GB \ --image windows-server-2012-r2-dc-new --zone us-central1-f \ --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \ --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
Nachdem Sie die Instanzen erstellt haben, konfigurieren Sie sie so, dass sie als eine Verfügbarkeitsgruppe fungieren können.
- Verbinden Sie beide Instanzen mithilfe von RDP-Verbindungen.
Legen Sie für beide Instanzen die Verwendung statischer IP-Adressen fest und geben Sie für die Netzmaske den Wert
255.255.0.0
an. Öffnen Sie ein PowerShell-Terminal als Administrator und setzen Sie die statischen IP-Adressen auf "Statisch". Durch diese Befehle kann möglicherweise Ihre Remote-Desktop-Verbindung beendet werden. Sie müssen dann die Verbindung wieder herstellen:Instanz 1:
PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
Instanz 2:
PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
Fügen Sie beide Instanzen der Windows-Domain hinzu. Öffnen Sie PowerShell als Administrator und führen Sie den folgenden
Add-Computer
-Befehl auf beiden Instanzen aus:PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
Der Befehl fordert Sie auf, Ihre Anmeldedaten einzugeben. Wenn der Befehl ausgeführt wurde, startet die Instanz erneut.
Stellen Sie die Verbindung zu den Instanzen mithilfe von RDP wieder her, um die SQL Server-Dienstkonten einzurichten:
- Öffnen Sie den SQL Server-Konfigurations-Manager.
- Wählen Sie den Tab SQL Server services aus, klicken Sie mit der rechten Maustaste auf SQL Server und dann auf Eigenschaften.
- Richten Sie das Konto
sql_service
ein und legen ein Passwort fest.
Die Instanzen werden nun für die Verfügbarkeitsgruppe erstellt. Als Nächstes konfigurieren Sie den Failovercluster-Manager.
Failovercluster-Manager konfigurieren
Aktivieren Sie das Failover-Clustering auf den Instanzen in der Verfügbarkeitsgruppe und konfigurieren Sie eine Instanz so, dass sie als Failovercluster-Manager fungiert. Aktivieren Sie "Hohe Verfügbarkeit mit AlwaysOn" für alle Instanzen der Gruppe.
Verbinden Sie Ihre Instanzen noch einmal über RDP. Verwenden Sie dazu aber die Anmeldedaten des Domainadministrators. In diesem Beispiel lautet die Domain
dbeng
und das AdministratorkontoAdministrator
. Wenn Sie Chrome RDP für Google Cloud verwenden, löschen Sie im Menü Optionen unter der Liste Zertifikate die vorhandenen RDP-Zertifikate für diese Adressen.Wählen Sie eine Instanz aus und konfigurieren Sie sie für eine Ausführung als Failovercluster-Manager.
Öffnen Sie PowerShell als Administrator und legen Sie Variablen gemäß Ihrer Clusterumgebung fest. Geben Sie für dieses Beispiel die folgenden Variablen an:
PS C:\> $node1 = "cluster-sql1"
PS C:\> $node2 = "cluster-sql2"
PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
Erstellen Sie den Failover-Cluster:
PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
Aktivieren Sie AlwaysOn High Availability für beide Knoten im Cluster:
PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
Erstellen Sie in der sekundären Instanz, in der kein Cluster-Manager vorhanden ist, einen Sicherungsordner unter
C:\SQLBackup
. Geben Sie für das Konto\\cluster-sql2\SQLBackup
den Ordner dann alssql_service
mit Lese- und Schreibzugriff frei.Erstellen Sie auf beiden Instanzen die zwei Ordner
C:\SQLData
undC:\SQLLog
. Verwenden Sie diese Ordner für die Datenbankdaten- und Logdateien.
Der Failover Cluster-Manager ist fertig. Als nächstes erstellen Sie die Verfügbarkeitsgruppe.
Verfügbarkeitsgruppe erstellen
Erstellen Sie eine Testdatenbank und konfigurieren Sie sie so, dass sie mit einer neuen Verfügbarkeitsgruppe arbeitet. Alternativ können Sie eine vorhandene Datenbank für die Verfügbarkeitsgruppe angeben.
Erstellen Sie, wenn Sie noch keine Datenbank konfiguriert haben, eine Testdatenbank. Führen Sie auf der Cluster-Manager-Instanz SQL Server Management Studio aus und erstellen Sie mit dem folgenden SQL-Befehl eine Testdatenbank:
CREATE DATABASE TestDB ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB ) LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB ) GO USE [TestDB] Exec dbo.sp_changedbowner @loginame = 'sa', @map = false; ALTER DATABASE [TestDB] SET RECOVERY FULL; GO BACKUP DATABASE TestDB to disk = '\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT GO
Führen Sie SQL Server Management Studio auf der Cluster-Manager-Instanz aus.
Klicken Sie mit der rechten Maustaste auf AlwaysOn High Availability und wählen Sie New Availability Group Wizard aus.
Legen Sie auf der Seite Namen angeben den Namen der Verfügbarkeitsgruppe fest. Geben Sie für dieses Beispiel
cluster-ag
an.Geben Sie auf der Seite Datenbanken auswählen an, welche Datenbank Sie replizieren möchten. Geben Sie für dieses Beispiel als Datenbank
TestDB
an.Legen Sie auf der Seite Replikate angeben beide Instanzen als Replikate mit automatischem Failover und synchronem Commit fest.
Legen Sie auf der Seite Datensynchronisierung auswählen die Netzwerkfreigabe fest, um die Sicherung der Datenbank für die erste Synchronisierung beizubehalten. Geben Sie für dieses Beispiel
\\cluster-sql2\SQLBackup
an.Die Seite Validierung zeigt eine Warnung an, da kein Listener vorhanden ist. Diese Warnung können Sie ignorieren.
Nachdem der Assistent abgeschlossen ist, klicken Sie mit der rechten Maustaste auf die neue Verfügbarkeitsgruppe und wählen Sie Listener hinzufügen aus.
Geben Sie die Parameter für diesen Listener an:
- Listener DNS Name (Listener-DNS-Name):
cluster-listener
. - Network Port (Netzwerkport):
1433
- Network Mode (Netzwerkmodus):
Static IP
- Listener DNS Name (Listener-DNS-Name):
Fügen Sie zwei Subnetz- und IP-Adressfelder hinzu. In diesem Beispiel verwenden Sie die folgenden Subnetz- und IP-Adresspaare:
10.0.0.0/16
und10.0.0.6
10.1.0.0/16
und10.1.0.6
Jetzt können Sie eine Verbindung zu SQL Server herstellen mit cluster-listener
als Name für die SQL Server-Datenbank anstelle des Namens der Instanzen. Diese Verbindung zeigt auf die Instanz, die derzeit aktiv ist.
Weitere Informationen
- Maschinentyp ändern, wenn Instanzen mehr Rechenressourcen benötigen
- Laufwerk hinzufügen oder die Größe des nichtflüchtigen Bootlaufwerks ändern, wenn mehr Speicherplatz benötigt wird