Udostępnij za pośrednictwem


Skalowanie klastra na zewnątrz lub do wewnątrz

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ę w środowisku produkcyjnym 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 zdecydujesz 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 mają 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

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. 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 walidacji modelu, więc występuje 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 w celu utworzenia klastra usługi Service Fabric, więc użyjmy programu Azure PowerShell (1.0 lub nowszego), aby wyświetlić listę typów węzłów, a następnie dodać do nich reguły automatycznego skalowania.

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ł automatycznego skalowania 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 oparta na obciążeniach, które aplikacje mogą zgłaszać w usłudze Service Fabric. W tej chwili uzyskana funkcja automatycznego skalowania jest oparta wyłącznie na licznikach wydajności emitowanych przez każde wystąpienie 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 w scenariuszu, chyba że typ węzła ma poziom trwałości Gold lub Silver, musisz 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 jednocześnie.

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 należy oczekiwać, że dodatki będą natychmiastowe. Zaplanuj dodanie pojemności z wyprzedzeniem, dzięki czemu będzie dostępna ponad 10 minut, zanim pojemność maszyny wirtualnej będzie dostępna dla replik/wystąpień usługi, które zostaną umieszczone.

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 programu PowerShell lub poleceń 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

Skalowanie w typie węzła spowoduje usunięcie wystąpień maszyn wirtualnych z zestawu skalowania. Jeśli typ węzła ma poziom trwałości Brązowa, 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 złemu stanowi, należy jawnie usunąć węzeł z klastra i usunąć stan węzła.

Usługi systemowe usługi Service Fabric działają 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, która zawsze będzie utrzymywać dostępność i zachowywać stan usługi. Co najmniej wymagana jest liczba węzłów równych docelowej liczbie 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ązowej. 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 wprowadzi 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

Napiwek

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 zaobserwować w narzędziu Service Fabric Explorer

Podczas skalowania klastra w poziomie eksplorator usługi 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 narzędziu Service Fabric Explorer są odzwierciedleniem tego, co usługi systemowe usługi Service Fabric (FM) wiedzą o liczbie węzłów, które miał/ma klaster. Podczas skalowania zestawu skalowania maszyn wirtualnych w systemie 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ą) wróci. Dlatego narzędzie 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, masz 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). Szczegółowe informacje na temat poziomów trwałości można znaleźć 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 wprowadzi 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 obsługiwać dostępność i zachowywać stan określony węzłów , nazywanych "utrzymywaniem 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

Przeczytaj następujące informacje, aby dowiedzieć się więcej na temat planowania pojemności klastra, uaktualniania klastra i partycjonowania usług: