Skalowanie klastra w poziomie lub w pionie

Ostrzeżenie

Przeczytaj tę sekcję przed skalowaniem

Skalowanie zasobów obliczeniowych w celu źródła obciążenia pracy aplikacji wymaga zamierzonego planowania, prawie zawsze trwa dłużej niż godzinę dla środowiska produkcyjnego i wymaga zrozumienia obciążenia i kontekstu biznesowego; w rzeczywistości, jeśli nigdy wcześniej nie wykonano tego działania, zaleca się rozpoczęcie od przeczytania i zrozumienia zagadnień dotyczących planowania pojemności klastra usługi Service Fabric przed kontynuowaniem pozostałej części tego dokumentu. To zalecenie polega na unikaniu niezamierzonych problemów z witryną LiveSite i zaleca się również pomyślne przetestowanie operacji, które decydujesz się wykonać w środowisku nieprodukcyjnym. W dowolnym momencie możesz zgłosić problemy produkcyjne lub poprosić o płatną pomoc techniczną dla platformy Azure. W przypadku inżynierów przydzielonych do wykonywania tych operacji, które posiadają odpowiedni kontekst, w tym artykule opisano operacje skalowania, ale musisz zdecydować i zrozumieć, które operacje są odpowiednie dla danego przypadku użycia; takie jak zasoby do skalowania (procesor CPU, magazyn, pamięć), kierunek skalowania (pionowo lub poziomo) oraz jakie operacje należy wykonać (wdrożenie szablonu zasobów, portal, program PowerShell/interfejs wiersza polecenia).

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Skalowanie klastra usługi Service Fabric w poziomie lub w poziomie przy użyciu reguł skalowania automatycznego lub ręcznego

Zestawy skalowania maszyn wirtualnych to zasób obliczeniowy platformy Azure, którego można użyć do wdrożenia kolekcji maszyn wirtualnych i zarządzania nią jako zestawu. Każdy typ węzła zdefiniowany w klastrze usługi Service Fabric jest konfigurowany jako oddzielny zestaw skalowania maszyn wirtualnych. Każdy typ węzła można następnie skalować w poziomie lub w poziomie niezależnie, mieć otwarte różne zestawy portów i mogą mieć różne metryki pojemności. Przeczytaj więcej na ten temat w dokumencie Dotyczącym typów węzłów usługi Service Fabric . Ponieważ typy węzłów usługi Service Fabric w klastrze są tworzone z zestawów skalowania maszyn wirtualnych w zapleczu, należy skonfigurować reguły automatycznego skalowania dla każdego typu węzła/zestawu skalowania maszyn wirtualnych.

Uwaga

Twoja subskrypcja musi mieć wystarczającą liczbę rdzeni, aby dodać nowe maszyny wirtualne tworzące ten klaster. Obecnie nie ma weryfikacji modelu, więc otrzymujesz błąd czasu wdrożenia, jeśli którykolwiek z limitów przydziału zostanie osiągnięty.

Uwaga

Jeśli używasz obrazu systemu operacyjnego Windows z włączoną rolą funkcji Hyper-V, tj. maszyna wirtualna zostanie skonfigurowana do wirtualizacji zagnieżdżonej, metryka dostępnej pamięci nie będzie dostępna, ponieważ sterownik pamięci dynamicznej na maszynie wirtualnej będzie w stanie zatrzymania.

Wybierz typ węzła/zestaw skalowania maszyn wirtualnych do skalowania

Obecnie nie można określić reguł skalowania automatycznego dla zestawów skalowania maszyn wirtualnych przy użyciu portalu do utworzenia klastra usługi Service Fabric, dlatego użyjemy Azure PowerShell (1.0+), aby wyświetlić listę typów węzłów, a następnie dodać do nich reguły skalowania automatycznego.

Aby uzyskać listę zestawów skalowania maszyn wirtualnych tworzących klaster, uruchom następujące polecenia cmdlet:

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

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

Ustawianie reguł skalowania automatycznego dla typu węzła/zestawu skalowania maszyn wirtualnych

Jeśli klaster ma wiele typów węzłów, powtórz to dla każdego typu węzła/zestawów skalowania maszyn wirtualnych, które chcesz skalować (w poziomie lub w poziomie). Przed skonfigurowaniem skalowania automatycznego należy wziąć pod uwagę potrzebną liczbę węzłów. Minimalna liczba węzłów wymagana dla typu węzła podstawowego zależy od wybranego poziomu niezawodności. Przeczytaj więcej na temat poziomów niezawodności.

Uwaga

Skalowanie w typie węzła podstawowego do mniejszej niż minimalna liczba spowoduje, że klaster będzie niestabilny, a nawet obniży go. Może to spowodować utratę danych dla aplikacji i usług systemowych.

Obecnie funkcja automatycznego skalowania nie jest napędzana przez obciążenia, które aplikacje mogą zgłaszać do usługi Service Fabric. W tej chwili uzyskana funkcja automatycznego skalowania jest oparta wyłącznie na licznikach wydajności emitowanych przez każde z wystąpień zestawu skalowania maszyn wirtualnych.

Postępuj zgodnie z tymi instrukcjami , aby skonfigurować skalowanie automatyczne dla każdego zestawu skalowania maszyn wirtualnych.

Uwaga

W scenariuszu skalowania, chyba że typ węzła ma poziom trwałości Gold lub Silver, należy wywołać polecenie cmdlet Remove-ServiceFabricNodeState z odpowiednią nazwą węzła. W przypadku trwałości brązu nie zaleca się skalowania w więcej niż jednym węźle naraz.

Ręczne dodawanie maszyn wirtualnych do typu węzła/zestawu skalowania maszyn wirtualnych

Skalowanie w poziomie polega na dodawaniu wystąpień maszyn wirtualnych do zestawu skalowania. Wystąpienia te stają się węzłami używanymi przez usługę Service Fabric. Usługa Service Fabric wykrywa zwiększenie liczby wystąpień (efekt skalowania w poziomie) i reaguje automatycznie.

Uwaga

Dodawanie maszyn wirtualnych zajmuje trochę czasu, więc nie spodziewaj się natychmiastowego dodania. Zaplanuj dodanie pojemności z wyprzedzeniem, co pozwoli na umieszczenie pojemności maszyny wirtualnej przez ponad 10 minut.

Dodawanie maszyn wirtualnych przy użyciu szablonu

Postępuj zgodnie z przykładowymi/instrukcjami w galerii szablonów szybkiego startu , aby zmienić liczbę maszyn wirtualnych w każdym typie węzła.

Dodawanie maszyn wirtualnych przy użyciu poleceń programu PowerShell lub interfejsu wiersza polecenia

Poniższy kod pobiera nazwę zestawu skalowania i zwiększa jego pojemność o 1.

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

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

Pojemność jest ustawiana na 6.

# 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

Ręczne usuwanie maszyn wirtualnych z typu węzła/zestawu skalowania maszyn wirtualnych

Podczas skalowania w typie węzła usuwa się wystąpienia maszyn wirtualnych z zestawu skalowania. Jeśli typ węzła to Poziom trwałości brązu, usługa Service Fabric nie wie, co się stało i zgłasza, że brakuje węzła. Powoduje to zgłoszenie stanu złej kondycji klastra. Aby zapobiec temu nieprawidłowemu stanowi, należy jawnie usunąć węzeł z klastra i usunąć stan węzła.

Usługi systemowe usługi Service Fabric są uruchamiane w podstawowym typie węzła w klastrze. Podczas skalowania w typie węzła podstawowego nigdy nie skaluj liczby wystąpień do mniejszej niż to, co gwarantuje warstwa niezawodności .

W przypadku usługi stanowej wymagana jest pewna liczba węzłów, aby zawsze zachować dostępność i zachować stan usługi. Co najmniej wymagana jest liczba węzłów równych liczbie docelowych zestawów replik partycji/usługi.

Usuwanie węzła usługi Service Fabric

Kroki ręcznego usuwania stanu węzła dotyczą tylko typów węzłów z warstwą trwałości brązu . W przypadku warstwy trwałości Silver i Gold te kroki są wykonywane automatycznie przez platformę. Aby uzyskać więcej informacji o trwałości, zobacz Planowanie pojemności klastra usługi Service Fabric.

Uwaga

Zachowaj minimalną liczbę pięciu węzłów dla dowolnego zestawu skalowania maszyn wirtualnych z włączonym poziomem trwałości gold lub Silver. Klaster będzie wprowadzać stan błędu w przypadku skalowania poniżej tego progu i należy ręcznie wyczyścić usunięte węzły.

Aby zachować równe rozłożenie węzłów klastra w domenach uaktualniania i błędów, a tym samym umożliwić ich równomierne wykorzystywanie, najpierw należy usunąć ostatnio utworzony węzeł. Innymi słowy węzły należy usuwać w kolejności odwrotnej niż były tworzone. Ostatnio utworzony węzeł to ten, który ma największą wartość właściwości virtual machine scale set InstanceId. Poniższe przykłady kodu zwracają ostatnio utworzony węzeł.

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

Klaster usługi Service Fabric musi „wiedzieć”, że ten węzeł ma zostać usunięty. Musisz wykonać trzy kroki:

  1. Wyłącz węzeł, aby zatrzymać replikację danych.
    PowerShell: Disable-ServiceFabricNode
    sfctl: sfctl node disable

  2. Zatrzymaj węzeł, aby środowisko uruchomieniowe usługi Service Fabric zostało prawidłowo zamknięte, a aplikacja otrzymała żądanie przerwania.
    PowerShell: Start-ServiceFabricNodeTransition -Stop
    sfctl: sfctl node transition --node-transition-type Stop

  3. Usuń węzeł z klastra.
    PowerShell: Remove-ServiceFabricNodeState
    sfctl: sfctl node remove-state

Po wykonaniu powyższych kroków węzeł może zostać usunięty z zestawu skalowania. Jeśli korzystasz z innej warstwy trwałości niż brązowa, kroki te są wykonywane automatycznie w przypadku usunięcia wystąpienia zestawu skalowania.

Poniższy blok kodu obejmuje pobranie ostatnio utworzonego węzła oraz jego wyłączenie, zatrzymanie i usunięcie z klastra.

#### 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
    }
}

W poniższym kodzie przedstawiającym użycie polecenia sfctl następujące polecenie służy do pobrania wartości node-name ostatnio utworzonego węzła: 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

Porada

Następujące zapytania sfctl pozwalają sprawdzić stan każdego kroku

Sprawdzanie stanu dezaktywacjisfctl node list --query "sort_by(items[*], &name)[-1].nodeDeactivationInfo"

Sprawdzanie stanu zatrzymaniasfctl node list --query "sort_by(items[*], &name)[-1].isStopped"

Skalowanie zestawu w pionie

Po usunięciu węzła usługi Service Fabric z klastra skalę zestawu skalowania maszyn wirtualnych można zmniejszyć w poziomie. W poniższym przykładzie pojemność zestawu skalowania została zmniejszona o 1.

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

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

Pojemność jest ustawiana na 5.

# 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

Zachowania, które można obserwować w Service Fabric Explorer

Podczas skalowania klastra Service Fabric Explorer będzie odzwierciedlać liczbę węzłów (wystąpień zestawu skalowania maszyn wirtualnych), które są częścią klastra. Jednak podczas skalowania klastra w programie zobaczysz usunięte wystąpienie węzła/maszyny wirtualnej wyświetlane w złej kondycji, chyba że wywołasz polecenie Remove-ServiceFabricNodeState z odpowiednią nazwą węzła.

Oto wyjaśnienie tego zachowania.

Węzły wymienione w Service Fabric Explorer są odzwierciedleniem tego, co usługi systemowe usługi Service Fabric (FM konkretnie) wiedzą o liczbie węzłów, które ma/ma klaster. Podczas skalowania zestawu skalowania maszyn wirtualnych maszyna wirtualna została usunięta, ale usługa systemowa FM nadal uważa, że węzeł (który został zamapowany na usuniętą maszynę wirtualną) powróci. Dlatego Service Fabric Explorer nadal wyświetla ten węzeł (choć stan kondycji może być błąd lub nieznany).

Aby upewnić się, że węzeł zostanie usunięty po usunięciu maszyny wirtualnej, dostępne są dwie opcje:

  1. Wybierz poziom trwałości Gold lub Silver dla typów węzłów w klastrze, co zapewnia integrację infrastruktury. Podczas skalowania w poziomie węzły zostaną automatycznie usunięte ze stanu usług systemowych (FM). Zapoznaj się ze szczegółami dotyczącymi poziomów trwałości tutaj

Uwaga

Zachowaj minimalną liczbę pięciu węzłów dla dowolnego zestawu skalowania maszyn wirtualnych z włączonym poziomem trwałości gold lub Silver. Klaster będzie wprowadzać stan błędu w przypadku skalowania poniżej tego progu i należy ręcznie wyczyścić usunięte węzły.

  1. Po skalowaniu wystąpienia maszyny wirtualnej należy wywołać polecenie cmdlet Remove-ServiceFabricNodeState.

Uwaga

Klastry usługi Service Fabric wymagają, aby przez cały czas zachować dostępność i zachować stan — określany jako "utrzymanie kworum". Dlatego zazwyczaj niebezpieczne jest zamknięcie wszystkich maszyn w klastrze, chyba że po raz pierwszy wykonano pełną kopię zapasową stanu.

Następne kroki

Zapoznaj się z poniższymi informacjami, aby dowiedzieć się więcej na temat planowania pojemności klastra, uaktualniania klastra i partycjonowania usług: