Horizontales Herunter- oder Hochskalieren eines Clusters

Warnung

Lesen Sie vor dem Skalieren diesen Abschnitt.

Die Skalierung von Computeressourcen zum Ermitteln der Arbeitsauslastung Ihrer Anwendung erfordert eine absichtliche Planung, dauert fast immer länger als eine Stunde für eine Produktionsumgebung und setzt voraus, dass Sie Ihre Arbeitsauslastung und Ihren Geschäftskontext verstehen. Wenn Sie diese Aktivität noch nie zuvor ausgeführt haben, wird empfohlen, dass Sie zunächst die Überlegungen zur Kapazitätsplanung von Service Fabric-Clustern lesen und verstehen, bevor Sie sich mit dem Rest dieses Dokuments beschäftigen. Diese Empfehlung dient dazu, unbeabsichtigte LiveSite-Probleme zu vermeiden. Es wird außerdem empfohlen, die Vorgänge, die Sie für eine Nichtproduktionsumgebung ausführen möchten, erfolgreich zu testen. Sie können jederzeit Produktionsprobleme melden oder bezahlte Unterstützung für Azure anfordern. Für Engineers, die für die Ausführung dieser Vorgänge vorgesehen sind und den entsprechendem Kontext kennen, werden in diesem Artikel Skalierungsvorgänge beschrieben. Sie müssen aber entscheiden und verstehen, welche Vorgänge für Ihren Anwendungsfall geeignet sind, z.B. welche Ressourcen skaliert werden sollen (CPU, Speicher, Arbeitsspeicher), in welche Richtung skaliert werden soll (vertikal oder horizontal) und welche Vorgänge ausgeführt werden sollen (Bereitstellung von Ressourcenvorlagen, Portal, PowerShell/CLI).

Hinweis

Es wird empfohlen, das Azure Az PowerShell-Modul für die Interaktion mit Azure zu verwenden. Informationen zu den ersten Schritten finden Sie unter Installieren von Azure PowerShell. Informationen zum Migrieren zum Az PowerShell-Modul finden Sie unter Migrieren von Azure PowerShell von AzureRM zum Az-Modul.

Zentrales Hoch- oder Herunterskalieren eines Service Fabric-Clusters mithilfe von Regeln für die automatische Skalierung oder eines manuellen Verfahrens

VM-Skalierungsgruppen sind eine Azure-Computeressource, mit der Sie eine Sammlung von virtuellen Computern bereitstellen und verwalten können. Jeder Knotentyp, der in einem Service Fabric-Cluster definiert ist, wird als separate Skalierungsgruppe eines virtuellen Computers eingerichtet. Jeden Knotentyp kann dann unabhängig zentral hoch- oder herunterskaliert werden, bei jedem Typ können unterschiedliche Portgruppen geöffnet sein, und die Typen können verschiedene Kapazitätsmetriken aufweisen. Weitere Informationen finden Sie im Dokument über die Service Fabric-Knotentypen. Da die Service Fabric-Knotentypen in Ihrem Cluster am Back-End aus VM-Skalierungsgruppen bestehen, müssen Sie für jeden Knotentyp bzw. jede VM-Skalierungsgruppe Regeln für die automatische Skalierung einrichten.

Hinweis

Ihr Abonnement muss ausreichend Kerne zum Hinzufügen der neuen virtuellen Computer umfassen, aus denen dieser Cluster besteht. Gegenwärtig erfolgt keine Modellvalidierung. Daher wird für die Bereitstellungszeit ein Fehler ausgegeben, wenn eine der Kontingentgrenzen erreicht wird.

Hinweis

Wenn Sie ein Windows-Betriebssystemimage mit aktivierter Hyper-V-Rolle verwenden (d. h. die VM ist für geschachtelte Virtualisierung konfiguriert), steht die Metrik „Verfügbarer Speicher“ nicht zur Verfügung, da sich der Treiber für den dynamische Arbeitsspeicher innerhalb der VM im Zustand „Beendet“ befindet.

Auswählen des zu skalierenden Knotentyps bzw. der VM-Skalierungsgruppe

Zurzeit können Sie über das Portal keine Regeln für die automatische Skalierung für VM-Skalierungsgruppen angeben, um einen Service Fabric-Cluster zu erstellen. Daher wird Azure PowerShell (1.0 und höher) verwendet, um die Knotentypen aufzulisten und anschließend automatische Skalierungsregeln hinzuzufügen.

Führen Sie die folgenden Cmdlets aus, um eine Liste mit den VM-Skalierungsgruppen abzurufen, aus denen Ihr Cluster besteht:

Get-AzResource -ResourceGroupName <RGname> -ResourceType Microsoft.Compute/VirtualMachineScaleSets

Get-AzVmss -ResourceGroupName <RGname> -VMScaleSetName <virtual machine scale set name>

Festlegen von Regeln für die automatische Skalierung für Knotentypen bzw. VM-Skalierungsgruppen

Wenn Ihr Cluster mehrere Knotentypen enthält, müssen Sie diesen Vorgang für jeden der Knotentypen bzw. jede der VM-Skalierungsgruppen durchführen, die Sie horizontal hoch- oder herunterskalieren möchten. Sie sollten dabei die Anzahl der Knoten berücksichtigen, die Sie benötigen, bevor Sie die automatische Skalierung einrichten. Die minimale Anzahl von Knoten, die für den primären Knotentyp benötigt wird, wird von der Zuverlässigkeitsstufe gesteuert, die Sie ausgewählt haben. Erfahren Sie mehr über Zuverlässigkeitsstufen.

Hinweis

Wenn Sie den primären Knotentyp auf eine geringere Anzahl als das Minimum skalieren, wird der Cluster instabil oder ggf. sogar abgeschaltet. Dies könnte für Ihre Anwendung und die Systemdienste zu Datenverlust führen.

Die automatische Skalierungsfunktion wird derzeit nicht durch die Lasten gesteuert, die Ihre Anwendung an Service Fabric meldet. Die bereitgestellte automatische Skalierung wird derzeit ausschließlich durch Leistungsindikatoren gesteuert, die von jeder Instanz der VM-Skalierungsgruppen ausgegeben werden.

Befolgen Sie diese Anweisungen, um eine automatische Skalierung für jede VM-Skalierungsgruppe einzurichten.

Hinweis

In einem Abskalierungsszenario müssen Sie das Cmdlet Remove-ServiceFabricNodeState mit dem Namen des entsprechenden Knotens aufrufen, es sei denn, Ihr Knotentyp besitzt die Dauerhaftigkeitsstufe „Gold“ oder „Silber“. Für die Dauerhaftigkeitsstufe „Bronze“wird nicht empfohlen, mehrere Knoten gleichzeitig abzuskalieren.

Manuelles Hinzufügen von virtuellen Computern zu einem Knotentyp oder einer VM-Skalierungsgruppe

Beim Aufskalieren werden der Skalierungsgruppe mehr VM-Instanzen hinzugefügt. Diese Instanzen werden zu den Knoten, die Service Fabric verwendet. Service Fabric erkennt, wenn der Skalierungsgruppe durch horizontales Hochskalieren weitere Instanzen hinzugefügt werden, und reagiert automatisch.

Hinweis

Das Hinzufügen virtueller Computer ist zeitaufwendig. Rechnen Sie also nicht damit, dass das Hinzufügen unmittelbar erfolgt. Planen Sie das Hinzufügen von Kapazität vorausschauend, räumen Sie mehr als 10 Minuten ein, bis die VM-Kapazität für die Platzierung der Replikate und Dienstinstanzen verfügbar ist.

Hinzufügen von VMs mithilfe einer Vorlage

Befolgen Sie das Beispiel bzw. die Anweisungen im Vorlagenkatalog für den Schnellstart, um die Anzahl der VMs in jedem Knotentyp zu ändern.

Hinzufügen von virtuellen Computern mithilfe von PowerShell- oder CLI-Befehlen

Der folgende Code ruft eine Skalierungsgruppe anhand ihres Namens ab und erhöht die Kapazität der Skalierungsgruppe um 1:

$scaleset = Get-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm
$scaleset.Sku.Capacity += 1

Update-AzVmss -ResourceGroupName $scaleset.ResourceGroupName -VMScaleSetName $scaleset.Name -VirtualMachineScaleSet $scaleset

Der folgende Code legt die Kapazität auf 6 fest:

# Get the name of the node with
az vmss list-instances -n nt1vm -g sfclustertutorialgroup --query [*].name

# Use the name to scale
az vmss scale -g sfclustertutorialgroup -n nt1vm --new-capacity 6

Manuelles Entfernen von virtuellen Computern aus einem Knotentyp oder einer VM-Skalierungsgruppe

Wenn Sie in einem Knotentyp abskalieren, entfernen Sie damit VM-Instanzen aus der Skalierungsgruppe. Wenn der Knotentyp die Dauerhaftigkeitsstufe „Bronze“ aufweist, weiß Service Fabric nicht, was passiert ist, und meldet, dass ein Knoten verloren gegangen ist. Daraufhin meldet Service Fabric einen fehlerhaften Zustand für den Cluster. Um diesen Zustand zu verhindern, müssen Sie den Knoten explizit aus dem Cluster entfernen und den Knotenstatus korrigieren.

Die Service Fabric-Systemdienste werden auf dem primären Knotentyp in Ihrem Cluster ausgeführt. Skalieren Sie beim Abskalieren des primären Knotentyps auf keinen Fall die Anzahl der Instanzen auf einen Wert ab, der unter dem von der Zuverlässigkeitsstufe vorgegebenen liegt.

Für einen zustandsbehafteten Dienst muss eine bestimmte Anzahl von Knoten stets aktiv sein, um Verfügbarkeit sicherzustellen und den Status Ihres Diensts beizubehalten. Sie benötigen als äußerstes Minimum eine Anzahl von Knoten, die der Anzahl der Zielreplikatgruppen der Partition oder des Diensts entspricht.

Entfernen des Service Fabric-Knotens

Die Schritte für das manuelle Korrigieren des Knotenstatus gelten nur für Knotentypen mit der Dauerhaftigkeitsstufe Bronze. Für die Dauerhaftigkeitsstufen Silber und Gold werden diese Schritte automatisch von der Plattform ausgeführt. Weitere Informationen zur Dauerhaftigkeit finden Sie unter Überlegungen zur Kapazitätsplanung für Service Fabric-Cluster.

Hinweis

Verwalten Sie mindestens fünf Knoten für alle VM-Skalierungsgruppen, für die die Dauerhaftigkeitsstufen „Gold“ oder „Silber“ aktiviert wurden. Der Cluster wechselt in den Fehlerzustand, wenn Sie ihn auf einen Wert unterhalb dieses Schwellenwerts abskalieren, und Sie müssen die entfernten Knoten manuell bereinigen.

Der zuletzt erstellte Knoten sollte zuerst entfernt werden, damit die Knoten des Clusters über die Upgrade- und Fehlerdomänen gleichmäßig verteilt bleiben und die gleichmäßige Nutzung sichergestellt ist. Anders ausgedrückt: Die Knoten sollten in der umgekehrten Reihenfolge ihrer Erstellung entfernt werden. Der zuletzt erstellte Knoten verfügt über den höchsten virtual machine scale set InstanceId-Eigenschaftswert. In den unten angegebenen Codebeispielen wird der zuletzt erstellte Knoten zurückgegeben.

Get-ServiceFabricNode | Sort-Object NodeInstanceId -Descending | Select-Object -First 1
sfctl node list --query "sort_by(items[*], &name)[-1]"

Der Service Fabric-Cluster muss wissen, dass dieser Knoten entfernt wird. Hierzu sind drei Schritte erforderlich:

  1. Deaktivieren Sie den Knoten, sodass es sich dabei nicht mehr um ein Replikat für Daten handelt.
    PowerShell: Disable-ServiceFabricNode
    sfctl: sfctl node disable

  2. Beenden Sie den Knoten, damit die Service Fabric-Laufzeit richtig heruntergefahren wird und Ihre App eine Beendigungsanforderung erhält.
    PowerShell: Start-ServiceFabricNodeTransition -Stop
    sfctl: sfctl node transition --node-transition-type Stop

  3. Entfernen Sie den Knoten aus dem Cluster.
    PowerShell: Remove-ServiceFabricNodeState
    sfctl: sfctl node remove-state

Nachdem diese drei Schritte für den Knoten ausgeführt wurden, kann er aus der Skalierungsgruppe entfernt werden. Bei Verwendung einer anderen Dauerhaftigkeitsstufe als Bronze werden diese Schritte automatisch ausgeführt, wenn die Skalierungsgruppeninstanz entfernt wird.

Der folgende Codeblock ruft den zuletzt erstellten Knoten ab und deaktiviert, beendet und entfernt ihn aus dem Cluster.

#### After you've connected.....
# Get the node that was created last
$node = Get-ServiceFabricNode | Sort-Object { $_.NodeName.Substring($_.NodeName.LastIndexOf('_') + 1) } -Descending | Select-Object -First 1

# Node details for the disable/stop process
$nodename = $node.NodeName
$nodeid = $node.NodeInstanceId

$loopTimeout = 10

# Run disable logic
Disable-ServiceFabricNode -NodeName $nodename -Intent RemoveNode -TimeoutSec 300 -Force

$state = Get-ServiceFabricNode | Where-Object NodeName -eq $nodename | Select-Object -ExpandProperty NodeStatus

while (($state -ne [System.Fabric.Query.NodeStatus]::Disabled) -and ($loopTimeout -ne 0))
{
    Start-Sleep 5
    $loopTimeout -= 1
    $state = Get-ServiceFabricNode | Where-Object NodeName -eq $nodename | Select-Object -ExpandProperty NodeStatus
    Write-Host "Checking state... $state found"
}

# Exit if the node was unable to be disabled
if ($state -ne [System.Fabric.Query.NodeStatus]::Disabled)
{
    Write-Error "Disable failed with state $state"
}
else
{
    # Stop node
    $stopid = New-Guid
    Start-ServiceFabricNodeTransition -Stop -OperationId $stopid -NodeName $nodename -NodeInstanceId $nodeid -StopDurationInSeconds 300

    $state = (Get-ServiceFabricNodeTransitionProgress -OperationId $stopid).State
    $loopTimeout = 10

    # Watch the transaction
    while (($state -eq [System.Fabric.TestCommandProgressState]::Running) -and ($loopTimeout -ne 0))
    {
        Start-Sleep 5
        $state = (Get-ServiceFabricNodeTransitionProgress -OperationId $stopid).State
        Write-Host "Checking state... $state found"
    }

    if ($state -ne [System.Fabric.TestCommandProgressState]::Completed)
    {
        Write-Error "Stop transaction failed with $state"
    }
    else
    {
        # Remove the node from the cluster
        Remove-ServiceFabricNodeState -NodeName $nodename -TimeoutSec 300 -Force
    }
}

Unten im sfctl-Code wird der folgende Befehl verwendet, um den Wert node-name des zuletzt erstellten Knotens abzurufen: sfctl node list --query "sort_by(items[*], &name)[-1].name"

# Inform the node that it is going to be removed
sfctl node disable --node-name _nt1vm_5 --deactivation-intent 4 -t 300

# Stop the node using a random guid as our operation id
sfctl node transition --node-instance-id 131541348482680775 --node-name _nt1vm_5 --node-transition-type Stop --operation-id c17bb4c5-9f6c-4eef-950f-3d03e1fef6fc --stop-duration-in-seconds 14400 -t 300

# Remove the node from the cluster
sfctl node remove-state --node-name _nt1vm_5

Tipp

Verwenden Sie die folgenden sfctl-Abfragen, um den Status der einzelnen Schritte zu überprüfen:

Überprüfen des Deaktivierungsstatussfctl node list --query "sort_by(items[*], &name)[-1].nodeDeactivationInfo"

Überprüfen des Beendigungsstatussfctl node list --query "sort_by(items[*], &name)[-1].isStopped"

Abskalieren der Skalierungsgruppe

Nachdem der Service Fabric-Knoten aus dem Cluster entfernt wurde, kann die VM-Skalierungsgruppe horizontal herunterskaliert werden. Im folgenden Beispiel wird die Kapazität der Skalierungsgruppe um 1 verringert:

$scaleset = Get-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm
$scaleset.Sku.Capacity -= 1

Update-AzVmss -ResourceGroupName SFCLUSTERTUTORIALGROUP -VMScaleSetName nt1vm -VirtualMachineScaleSet $scaleset

Der folgende Code legt die Kapazität auf 5 fest:

# Get the name of the node with
az vmss list-instances -n nt1vm -g sfclustertutorialgroup --query [*].name

# Use the name to scale
az vmss scale -g sfclustertutorialgroup -n nt1vm --new-capacity 5

Verhaltensweisen von Service Fabric Explorer, die Sie möglicherweise beobachten

Wenn Sie einen Cluster aufskalieren, zeigt Service Fabric Explorer die Knotenanzahl (Instanzen der VM-Skalierungsgruppen) an, die zu dem Cluster gehört. Wenn Sie einen Cluster jedoch abskalieren, wird der entfernte Knoten bzw. die entfernte VM-Instanz in einem fehlerhaften Zustand angezeigt, es sei denn, Sie rufen das Cmdlet Remove-ServiceFabricNodeState mit dem entsprechenden Knotennamen auf.

Dieses Verhalten erklärt sich wie folgt:

Die in Service Fabric Explorer aufgeführten Knoten sind ein Abbild der Informationen, die die Service Fabric-Systemdienste (besonders FM) über die derzeitige und frühere Anzahl der Knoten des Clusters besitzen. Wenn Sie eine VM-Skalierungsgruppe abskalieren, wird die VM gelöscht. Der FM-Systemdienst geht aber weiterhin davon aus, dass der Knoten, der dem gelöschten virtuellen Computer zugeordnet war, dem Cluster wieder zur Verfügung stehen wird. Service Fabric Explorer zeigt diesen Knoten daher weiterhin an (der Integritätszustand kann „fehlerhaft“ oder „unbekannt“ lauten).

Sie verfügen über zwei Optionen, um sicherzustellen, dass ein Knoten beim Entfernen eines virtuellen Computers entfernt wird:

  1. Wählen Sie die Dauerhaftigkeitsstufe „Gold“ oder „Silber“ für die Knotentypen in Ihrem Cluster aus, die die Infrastrukturintegration für Sie bereitstellt. Wenn Sie skalieren, werden Knoten automatisch aus unserem Systemdienststatus (FM) entfernt. hier mit den Details der Dauerhaftigkeitsstufen

Hinweis

Verwalten Sie mindestens fünf Knoten für alle VM-Skalierungsgruppen, für die die Dauerhaftigkeitsstufen „Gold“ oder „Silber“ aktiviert wurden. Der Cluster wechselt in den Fehlerzustand, wenn Sie ihn auf einen Wert unterhalb dieses Schwellenwerts abskalieren, und Sie müssen die entfernten Knoten manuell bereinigen.

  1. Sobald die VM-Instanz abskaliert wurde, müssen Sie das Cmdlet Remove-ServiceFabricNodeState aufrufen.

Hinweis

Service Fabric-Cluster benötigen eine bestimmte Anzahl von Knoten, die immer vorhanden sein müssen, um die Verfügbarkeit zu gewährleisten und den Zustand beizubehalten. Das wird auch als Quorumaufrechterhaltung bezeichnet. Es ist normalerweise unsicher, alle Computer im Cluster herunterfahren, es sei denn, Sie haben zuerst eine vollständige Sicherung Ihres Zustands durchgeführt.

Nächste Schritte

Lesen Sie die folgenden Artikel, um mehr über die Kapazitätsplanung von Clustern, das Upgraden von Clusters und das Partitionieren von Diensten zu erfahren: