Konfiguration eines internen Listeners für Verfügbarkeitsgruppen auf Azure SQL Server-VMs

In der vergangenen Woche haben wir uns der Konfiguration von externen Listenern für Verfügbarkeitsgruppen innerhalb Azure SQL Server VMs gewidmet. Als Gegenspieler zum externen, also nur über das Internet erreichbaren Listener, gibt es auch einen internen (ILB) Listener. Der Unterschied zum externen Listener besteht darin, dass der interne nur über einen internen Load Balancer (ILB) innerhalb eines vorhandenen Netzwerks auf einen Listener zugreifen kann. Auf den externen Listener kann dagegen nur über eine öffentliche virtuelle IP Adresse zugegriffen werden. Die Konfigurationsschritte sind jedoch in einigen Bereichen gleich.

Wie bereits schon bei der Konfiguration des externen Listeners, müssen bestimmte Richtlinien und Regeln im Vorhinein eingehalten werden, die da wären:

  • Der Listener für die Verfügbarkeitsgruppe wird nur von Windows Server 2008 R2, Windows Server 2012 und Windows Server 2012 R2 unterstützt.
  • Für jeden Clouddienst existiert nur ein interner Listener, da pro Dienst nur ein interner Load Balancer zugelassen ist. Möchten Sie mehrere Listener konfigurieren, müssen Sie einen externen konfigurieren.
  • Ein ILB kann nur in virtuellen Netzwerken mit regionalem Geltungsbereich konfiguriert werden. Vorhandene virtuelle Netzwerke, die für eine Affinitätsgruppe konfiguriert wurden, können keinen ILB verwenden.
  • Sie müssen über ein aktives Azure Abonnement verfügen.

VM-Endpunkte mit Lastenausgleich und direkter Serverrückgabe erstellen

Um einen internen Listener zu konfigurieren, müssen zunächst VM Endpunkte erstellt werden. Ähnlich zur Konfiguration der externen Listener, muss ein Lastenausgleich für jede VM, die ein Replikat hostet, vorgenommen werden. Das gilt zudem auch für regionsübergreifende Replikate, jedoch ist es wichtig, dass sich alle vorhandenen Replikate in demselben virtuellen Azure-Netzwerk befinden.

1. Öffnen Sie das Azure Portal

2. Navigieren Sie zu jeder vorhandenen VM, die ein Replikat hostet und klicken auf die Registerkarte Endpunkte.

3. Stellen Sie sicher, dass der Name und der öffentliche Port des Listener-Endpunkts, den Sie verwenden möchten, nicht bereits verwendet wird. In diesem Beispiel lautet der Name MyEndpoint und der Port 1433 .

4. Öffnen Sie nun auf dem lokalen Client das PowerShell Modul und starten eine neue Sitzung.

5. Mit dem Cmdlet Get-AzurePublishSettingsFile werden Sie in ein neues Browserfenster weitergeleitet, in dem Sie anschließend die Datei mit den Veröffentlichungseinstellungen herunterladen können.

6. Führen Sie den Befehl Import-AzurePublishSettingsFile in Ihrer PowerShell Sitzung aus, um die Datei zu importieren.

Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>

7. Nun können Sie Ihre Azure-Abonnement in dieser PowerShell Sitzung bearbeiten und verwalten.

8. Weisen Sie dem internen Load Balancer eine statische IP-Adresse zu. Dafür untersuchen Sie die aktuelle Konfiguration des virtuellen Netzwerks, mit folgendem Befehl:

(Get-AzureVNetConfig).XMLConfiguration

9. Notieren Sie sich den Subnetznamen für das Subnetz, welches die VMs enthält. Der Name ist unter dem Parameter SubnetName im Skript zu finden.

10. Notieren Sie außerdem den VirtualNetworkSiteNamen und das Startadressenpräfix für das entsprechende Subnetz. Suchen Sie nach einer verfügbaren IP-Adresse, indem Sie beide Werte an den Test-AzureStaticVNetIPBefehl übergeben, um die AvailableAddresseszuuntersuchen. Wenn das virtuelle Netzwerk beispielsweise MyVNet heißt und einen Subnetzadressbereich hat, der bei 172.16.0.128 beginnt, würde der folgende Befehl die verfügbaren Adressen auflisten:

(Test-AzureStaticVNetIP -VNetName "MyVNet"-IPAddress 172.16.0.128).AvailableAddresses

11. Wählen Sie eine der verfügbaren Adressen aus und verwenden Sie ihn im Parameter ILBStaticIP des Skripts.

12. Kopieren Sie nun das nachfolgende PowerShell-Skript in einen Texteditor und legen Sie die Variablenwerte entsprechend Ihrer Umgebung fest. Erstreckt sich die Verfügbarkeitsgruppe über mehrere Azure-Regionen, müssen Sie diesen Schritt pro Rechenzentrum und vorhandenen Knoten ausführen.

# Define variables $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes containing replicas in the same cloud service, separated by commas $SubnetName = "<MySubnetName>" # subnet name that the replicas use in the virtual network $ILBStaticIP = "<MyILBStaticIPAddress>" # static IP address for the ILB in the subnet $ILBName = "AGListenerLB" # customize the ILB name or use this default value # Create the ILB Add-AzureInternalLoadBalancer -InternalLoadBalancerName $ILBName -SubnetName $SubnetName -ServiceName $ServiceName -StaticVNetIPAddress $ILBStaticIP # Configure a load-balanced endpoint for each node in $AGNodes by using ILB ForEach ($node in $AGNodes) { Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name "ListenerEndpoint" -LBSetName "ListenerEndpointLB" -Protocol tcp -LocalPort 1433 -PublicPort 1433 -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName $ILBName -DirectServerReturn $true | Update-AzureVM }

13. Haben Sie alle Variablen festgelegt, kopieren Sie dieses Skript in die PowerShell Sitzung und führen diese aus.

→ Sind Ihre Azure VMs ein Teil eines Windows Server 2008 R2 oder Windows Server 2012 Clusters, müssen Sie sicherstellen, dass der Hotfix KB2854082 auf jedem lokalen Server, sowie der Azure VMs installiert ist. Laden Sie dafür in einer Remotedesktopsitzung für jeden der Clusterknoten den Hotfix KB2854082 in das lokale Verzeichnis herunter und installieren Sie ihn auf jedem Clusterknoten. Wenn der Clusterdienst derzeit auf dem Clusterknoten ausgeführt wird, wird der Server am Ende der Hotfix-Installation neu gestartet.

Öffnen der Firewall Ports in Verfügbarkeitsgruppenknoten

Wir erstellen nun eine Regel zum Öffnen des Firewall Testports für den VM Endpunkt mit Lastenausgleich. Gleichzeitig erstellen wir eine weitere Regel zum Öffnen des Listener-Ports der Verfügbarkeitsgruppe.

  1. Starten Sie Windows-Firewall mit erweiterter Sicherheit auf Ihrer VM.
  2. Klicken Sie auf Eingehende Regeln und erstellen eine Neue Regel.
  3. Im Regeltyp wählen Sie Port und klicken auf Weiter.
  4. Auf dem Protokoll und Ports Bereich wählen Sie TCP und geben 59999 in das specific local Ports Feld ein und klicken auf Weiter.
  5. Navigieren Sie zu Action und wählen die Verbindung zulassen aus.
  6. Akzeptieren Sie auf der Seite Profil die Standardeinstellungen.
  7. Benennen Sie nun im Bereich Namen, einen Namen für die Regel – vergleichbar mit der des Always On Listener Testports und klicken Sie dann auf Fertigstellen.
  8. Wiederholen Sie die vorherigen Schritte für den Listener-Port der Verfügbarkeitsgruppe (wie zuvor im Parameter $EndpointPort des Skripts angegeben) und wählen Sie jeweils einen geeigneten Regelnamen.

Nachdem wir nun die Firewall geöffnet und die VM Endpunkte eingerichtet haben, kann es nun weitergehen mit der Einrichtung der Verfügbarkeits-Listener.

Erstellen des Verfügbarkeitsgruppen Listeners

Dieser Punkt ist ebenfalls identisch zur Konfiguration des externen Listeners. Zunächst erstellen wir einen Clientzugriffspunkt sowie eine Clusterressource und konfigurieren entsprechende Abhängigkeiten. Danach konfigurieren wir die Clusterressourcen mit PowerShell. Wir verwenden dafür den Failovercluster-Manager sowie das SQL Server Management Studio.

2. Öffnen Sie den Failover-Cluster-Manager des Knotens, der das primäre Replikat hostet.

3. Wählen Sie Netzwerke-Knoten aus und notieren sich den Namen des Clusternetzwerks. Dieser Name wird in der Variablen $ClusterNetworkName im PowerShell-Skript verwendet.

4. Erweitern Sie den Clusternamen und klicken dann auf Rollen .

5. Klicken Sie im Bereich Rollen mit der rechten Maustaste auf den Namen der Verfügbarkeitsgruppe und wählen Add Resource > Client Access Point aus.

6. Erstellen Sie im Feld Name einen Namen für den neuen Listener. Klicken Sie anschließend auf Fertigstellen. Bringen Sie den Listener oder die Ressource zu diesem Zeitpunkt nicht online!

7. Klicken Sie auf die Registerkarte Ressourcen und erweitern Sie den soeben erstellten Clientzugriffspunkt. Die IP-Adressressource für jedes Clusternetzwerk wird angezeigt. Handelt es sich hier um eine Azure-Lösung, wird nur eine IP-Adressressource angezeigt.

8. Führen Sie nun einen der folgenden Schritte aus:

9. Konfiguration einer Hybridlösung:

→ Klicken Sie mit der rechten Maustaste auf die IP-Adressressource, die Ihrem lokalen Subnetz entspricht und wählen dann Eigenschaften aus. Notieren Sie sich den IP-Adressnamen und den Netzwerknamen.

→ Wählen Sie Statische IP-Adresse und weisen dieser eine nicht verwendete IP-Adresse zu und klicken dann auf OK .

10. Konfiguration einer Azure-Lösung:

A. Klicken Sie mit der rechten Maustaste auf die IP-Adressressource, die Ihrem Azure-Subnetz entspricht, und wählen Sie dann Eigenschaften aus.
B. In der gleichen Fenster ändern Sie den Namen der IP – Adresse.
Dieser Name wird in der Variablen $IPResourceName des PowerShell-Skripts verwendet. Wenn Ihre Lösung mehrere virtuelle Azure-Netzwerke umfasst, wiederholen Sie diesen Schritt für jede IP-Ressource.

Konfigurieren der Clusterressourcen mit PowerShell

  1. Für ILB müssen Sie die IP-Adresse des zuvor erstellten Load Balancers verwenden. Um diese IP-Adresse in PowerShell zu erhalten, verwenden Sie das folgende Skript:
# Define variables $ServiceName="<MyServiceName>" # the name of the cloud service that contains the AG nodes (Get-AzureInternalLoadBalancer -ServiceName $ServiceName).IPAddress

2. Kopieren das PowerShell-Skript in einen Texteditor und legen Sie anschließend die Variablen auf die zuvor notierten Werte fest.
Verwenden Sie für Windows Server 2012 oder höher das folgende Skript:

# Define variables $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name) $IPResourceName = "<IPResourceName>" # the IP address resource name $ILBIP = "<X.X.X.X>" # the IP address of the ILB Import-Module FailoverClusters Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}

3. Für Windows Server 2008 R2 verwenden Sie folgendes Skript:

# Define variables $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name) $IPResourceName = "<IPResourceName>" # the IP address resource name $ILBIP = "<X.X.X.X>" # the IP address of the ILB Import-Module FailoverClusters cluster res $IPResourceName /priv enabledhcp=0 address=$ILBIP probeport=59999 subnetmask=255.255.255.255

4. Nachdem Sie die Variablen festgelegt haben, öffnen Sie ein Windows PowerShell-Fenster mit Adminrechten und fügen das Skript aus dem Texteditor in Ihre PowerShell-Sitzung ein.

5. Führen Sie es mit Enter aus.

6. Wiederholen Sie die vorherigen Schritte für jede VM, die ein Replikat hostet.

→ Dieses Skript konfiguriert die IP-Adressressource mit der IP-Adresse des Cloud-Dienstes und legt Parameter fest wie z. B. den Testport. Wenn die IP-Adressressource online geschaltet wird, kann sie vom zuvor erstellten Endpunkt mit Lastenausgleich auf die Abfrage am Testport antworten.

Den internen Listener online bringen

  1. Wir befinden uns wieder im Failovercluster-Manager und öffnen den Bereich Rollen.

2. Markieren Sie Ihre Verfügbarkeitsgruppe.

3. Klicken Sie in Ressourcen mit der rechten Maustaste auf den Listener-Namen und öffnen die Eigenschaften .

4. Öffnen Sie nun den Bereich Abhängigkeiten. Wenn mehrere Ressourcen aufgelistet sind, überprüfen Sie, ob die IP-Adressen OR- und nicht AND-Abhängigkeiten aufweisen.

5. Klicken Sie auf OK .

6. Schalten Sie nun mit Rechtsklick auf den Listenernamen den Listener online.

7. Ist der Listener jetzt online, klicken Sie in Ressourcen mit der rechten Maustaste auf die Verfügbarkeitsgruppe und öffnen die Eigenschaften

8. Erstellen Sie nun eine Abhängigkeit der Listener-Namensressource (nicht den Namen der IP-Adressressourcen) und klicken dann auf OK.

9. Starten Sie SQL Server Management Studio, und stellen Sie dann eine Verbindung mit dem primären Replikat her.

10. Wechseln Sie zu AlwaysOn- Hochverfügbarkeit → Verfügbarkeitsgruppen → <AvailabilityGroupName> → Verfügbarkeitsgruppen-Listener.

11. Der Listenername, den Sie im Failovercluster-Manager erstellt haben, sollte jetzt angezeigt werden.

12. Öffnen Sie mit einem Rechtsklick auf den Listenernamen die Eigenschaften.

13. Geben Sie die Portnummer für die Verfügbarkeitsgruppe an, indem Sie den EndpointPort verwenden und klicken dann auf ok.

Testen des Verfügbarkeitsgruppenlisteners innerhalb des VNETs

Um die Einrichtung des internen Listeners zu überprüfen, testen wir mit den nachfolgenden Schritten unsere Umsetzung innerhalb unseres VNETs:

  • Clientverbindungen zum Listener müssen von Computern stammen, die sich in einem anderen Clouddienst befinden.
  • Wenn sich die AlwaysOn- Replikate in verschiedenen Subnetzen befinden, müssen Clients MultisubnetFailover=True in der Verbindungszeichenfolge angeben. 
  • Diese Bedingung führt zu parallelen Verbindungsversuchen von Replikaten, in verschiedenen Subnetzen. Dieses Szenario umfasst eine regionsübergreifende AlwaysOn-Verfügbarkeitsgruppenbereitstellung.

Dafür stellen wir die Verbindung zwischen dem Listener und einem virtuellen Computer innerhalb eines Azure Netzwerks her. Eine mögliche Option ist die Verbindung über das SQL Server Management Studio, eine Andere, über SQLCMD.exe das folgende Skript auszuführen:

sqlcmd -S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15

→ Stellen Sie beim Testen des Listeners sicher, dass die Verfügbarkeitsgruppe übersprungen wird, sodass Clients über Failover hinweg eine Verbindung mit dem Listener herstellen können.