Sdílet prostřednictvím


Horizontální snížení nebo navýšení kapacity clusteru

Upozorňující

Před škálováním si přečtěte tuto část.

Škálování výpočetních prostředků pro zdroj pracovního zatížení aplikace vyžaduje záměrné plánování, dokončení téměř vždy trvá déle než hodinu pro produkční prostředí a vyžaduje pochopení úlohy a obchodního kontextu; pokud jste tuto aktivitu ještě nikdy neudělali, doporučujeme začít tím, že si přečtete a pochopíte aspekty plánování kapacity clusteru Service Fabric, než budete pokračovat ve zbývající části tohoto dokumentu. Toto doporučení je zabránit nechtěným problémům se službou LiveSite a doporučuje se také úspěšně otestovat operace, které se rozhodnete provést v neprodukčním prostředí. Kdykoli můžete hlásit provozní problémy nebo požádat o placenou podporu pro Azure. Pro techniky přidělené k provádění těchto operací, které mají odpovídající kontext, tento článek popisuje operace škálování, ale musíte rozhodnout a pochopit, které operace jsou vhodné pro váš případ použití; například jaké prostředky se mají škálovat (procesor, úložiště, paměť), jaký směr škálování (vertikálně nebo horizontálně) a jaké operace provést (nasazení šablony prostředků, portál, PowerShell nebo rozhraní příkazového řádku).

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Pokud chcete začít, přečtěte si téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Horizontální navýšení nebo snížení kapacity clusteru Service Fabric pomocí pravidel automatického škálování nebo ručně

Škálovací sady virtuálních počítačů jsou výpočetní prostředek Azure, který můžete použít k nasazení a správě kolekce virtuálních počítačů jako sady. Každý typ uzlu definovaný v clusteru Service Fabric je nastavený jako samostatná škálovací sada virtuálních počítačů. Každý typ uzlu se pak dá nezávisle škálovat, má otevřené různé sady portů a může mít různé metriky kapacity. Přečtěte si další informace v dokumentu o typech uzlů Service Fabric. Vzhledem k tomu, že typy uzlů Service Fabric ve vašem clusteru jsou tvořeny škálovacími sadami virtuálních počítačů v back-endu, musíte nastavit pravidla automatického škálování pro každý typ uzlu nebo škálovací sadu virtuálních počítačů.

Poznámka:

Vaše předplatné musí mít dostatek jader pro přidání nových virtuálních počítačů, které tvoří tento cluster. V současné době neexistuje žádné ověření modelu, takže pokud dojde k dosažení některého z limitů kvóty, dojde k selhání doby nasazení.

Poznámka:

Pokud používáte image operačního systému Windows s povolenou rolí Hyper-V, tj. Virtuální počítač bude nakonfigurovaný pro vnořenou virtualizaci, metrika dostupné paměti nebude k dispozici, protože ovladač dynamické paměti v rámci virtuálního počítače bude v zastaveném stavu.

Zvolte typ uzlu nebo škálovací sadu virtuálních počítačů, která se má škálovat.

V současné době nemůžete určit pravidla automatického škálování pro škálovací sady virtuálních počítačů pomocí portálu k vytvoření clusteru Service Fabric, takže pomocí Azure PowerShellu (1.0+) vypíšeme typy uzlů a pak do nich přidáme pravidla automatického škálování.

Pokud chcete získat seznam škálovacích sad virtuálních počítačů, které tvoří váš cluster, spusťte následující rutiny:

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

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

Nastavení pravidel automatického škálování pro typ uzlu nebo škálovací sadu virtuálních počítačů

Pokud má váš cluster více typů uzlů, opakujte tento postup pro jednotlivé typy uzlů nebo škálovací sady virtuálních počítačů, které chcete škálovat (in nebo out). Před nastavením automatického škálování vezměte v úvahu potřebný počet uzlů. Minimální počet uzlů, který je potřeba pro primární typ uzlu, vychází ze zvolené úrovně spolehlivosti. Přečtěte si další informace o úrovních spolehlivosti.

Poznámka:

Škálování v primárním typu uzlu na menší než minimální počet způsobí nestabilitu clusteru nebo dokonce jeho snížení. To může vést ke ztrátě dat pro vaše aplikace a systémové služby.

Funkce automatického škálování v současné době není řízena načtením, které vaše aplikace můžou hlásit službě Service Fabric. V tuto chvíli tedy automatické škálování, které získáte, je čistě řízeno čítači výkonu, které jsou generovány jednotlivými instancemi škálovací sady virtuálních počítačů.

Podle těchto pokynů nastavte automatické škálování pro každou škálovací sadu virtuálních počítačů.

Poznámka:

Pokud váš typ uzlu nemá ve scénáři škálování úroveň stálosti gold nebo Silver, musíte volat rutinu Remove-ServiceFabricNodeState s odpovídajícím názvem uzlu. Pro bronzovou odolnost se nedoporučuje škálovat na více než jeden uzel najednou.

Ruční přidání virtuálních počítačů do typu uzlu nebo škálovací sady virtuálních počítačů

Při škálování na více instancí přidáte do škálovací sady více instancí virtuálních počítačů. Tyto instance se stanou uzly, které bude Service Fabric používat. Service Fabric to pozná, když se do škálovací sady přidají další instance (díky horizontálnímu navýšení kapacity), a automaticky zareaguje.

Poznámka:

Přidání virtuálních počítačů nějakou dobu trvá, takže neočekávejte okamžité přidání. Předem naplánujte přidání kapacity, což umožňuje více než 10 minut, než bude kapacita virtuálního počítače k dispozici pro umístění replik nebo instancí služby.

Přidání virtuálních počítačů pomocí šablony

Pokud chcete změnit počet virtuálních počítačů v jednotlivých typech uzlů, postupujte podle ukázek a pokynů v galerii šablon rychlého startu.

Přidání virtuálních počítačů pomocí příkazů PowerShellu nebo rozhraní příkazového řádku

Následující kód načte škálovací sadu podle názvu a zvýší její kapacitu o 1.

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

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

Tento kód nastaví kapacitu 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

Ruční odebrání virtuálních počítačů z typu uzlu nebo škálovací sady virtuálních počítačů

Při škálování typu uzlu odeberete instance virtuálních počítačů ze škálovací sady. Pokud je typ uzlu bronzová úroveň odolnosti, Service Fabric neví, co se stalo, a hlásí, že uzel zmizel. Service Fabric pak hlásí, že stav clusteru není v pořádku. Pokud chcete ho zabránit, musíte uzel explicitně odebrat z clusteru a odebrat stav uzlu.

Systémové služby Service Fabric běží v primárním typu uzlu v clusteru. Při škálování v primárním typu uzlu se nikdy nesrovnávejte v počtu instancí na méně, než jaká úroveň spolehlivosti zaručuje.

Pro stavovou službu potřebujete určitý počet uzlů, aby se zachovala dostupnost a zachoval stav vaší služby. Na minimum potřebujete počet uzlů, které se rovnají sadě cílových replik oddílu nebo služby.

Odebrání uzlu Service Fabric

Postup ručního odebrání stavu uzlu se vztahuje pouze na typy uzlů s bronzovou úrovní stálosti. Pro úroveň stálosti Silver a Gold se tyto kroky provádějí automaticky platformou. Další informace o odolnosti najdete v článku Plánování kapacity clusteru Service Fabric.

Poznámka:

Udržujte minimální počet pěti uzlů pro libovolnou škálovací sadu virtuálních počítačů, která má povolenou úroveň odolnosti gold nebo Silver. Pokud kapacitu překročíte pod touto prahovou hodnotou, váš cluster zadá chybový stav a budete muset odebrat uzly ručně vyčistit.

V zájmu toho, aby byly uzly clusteru rovnoměrně rozdělené v doménách upgradu a doménách selhání a aby se tedy i rovnoměrně využívaly, je potřeba jako první odebrat naposledy vytvořený uzel. Jinak řečeno, uzly by se měly odebírat v opačném pořadí, než v jakém došlo k jejich vytvoření. Naposledy vytvořený uzel je uzel s nejvyšší hodnotou vlastnosti virtual machine scale set InstanceId. Následující příklady kódu vracejí naposledy vytvořený uzel.

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

Cluster Service Fabric potřebuje vědět, že se tento uzel odebere. Musíte provést tři kroky:

  1. Zakázat uzel, aby už nefungoval jako replika pro data.
    PowerShell: Disable-ServiceFabricNode
    sfctl: sfctl node disable

  2. Zastavit uzel tak, aby se řádně ukončil provoz Service Fabricu a vaše aplikace obdržela žádost o ukončení.
    PowerShell: Start-ServiceFabricNodeTransition -Stop
    sfctl: sfctl node transition --node-transition-type Stop

  3. Odebrat uzel z clusteru.
    PowerShell: Remove-ServiceFabricNodeState
    sfctl: sfctl node remove-state

Jakmile na uzel aplikujete tyto tři kroky, může se odebrat ze škálovací sady. Pokud používáte nějakou jinou úroveň odolnosti než bronzovou, tyto kroky se provedou za vás při odebrání instance škálovací sady.

Následující blok kódu získá poslední vytvořený uzel a zakáže ho, zastaví a odebere z clusteru.

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

V kódu sfctl níže slouží následující příkaz k získání hodnoty node-name posledního vytvořeného uzlu: 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

Tip

Pomocí následujících dotazů sfctl můžete zkontrolovat stav každého kroku.

Kontrola stavu deaktivacesfctl node list --query "sort_by(items[*], &name)[-1].nodeDeactivationInfo"

Kontrola stavu zastavenísfctl node list --query "sort_by(items[*], &name)[-1].isStopped"

Horizontální snížení kapacity škálovací sady

Teď, když je uzel Service Fabric odebraný z clusteru, je možné horizontálně snížit kapacitu škálovací sady virtuálních počítačů. V následujícím příkladu je kapacita škálovací sady snížená o 1.

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

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

Tento kód nastaví kapacitu 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

Chování, které můžete pozorovat v Service Fabric Exploreru

Při horizontálním navýšení kapacity clusteru bude Service Fabric Explorer odrážet počet uzlů (instancí škálovací sady virtuálních počítačů), které jsou součástí clusteru. Když ale škálujete cluster v clusteru, zobrazí se odebraná instance uzlu nebo virtuálního počítače ve stavu, ve kterém není v pořádku, pokud nezavoláte rutinu Remove-ServiceFabricNodeState s odpovídajícím názvem uzlu.

Tady je vysvětlení tohoto chování.

Uzly uvedené v Service Fabric Exploreru jsou odrazem toho, co systémové služby Service Fabric (FM konkrétně) znají o počtu uzlů, které cluster měl/má. Když škálujete škálovací sadu virtuálních počítačů, virtuální počítač se odstranil, ale systémová služba FM si stále myslí, že se uzel (namapovaný na odstraněný virtuální počítač) vrátí. Service Fabric Explorer tedy dál zobrazuje tento uzel (i když stav může být chybový nebo neznámý).

Pokud chcete zajistit odebrání uzlu při odebrání virtuálního počítače, máte dvě možnosti:

  1. Pro typy uzlů ve vašem clusteru zvolte úroveň stálosti gold nebo Silver, která poskytuje integraci infrastruktury. Při horizontálním snížení kapacity se uzly automaticky odeberou ze stavu našich systémových služeb (FM). Podrobnosti o úrovních odolnosti najdete tady.

Poznámka:

Udržujte minimální počet pěti uzlů pro libovolnou škálovací sadu virtuálních počítačů, která má povolenou úroveň odolnosti gold nebo Silver. Pokud kapacitu překročíte pod touto prahovou hodnotou, váš cluster zadá chybový stav a budete muset odebrat uzly ručně vyčistit.

  1. Jakmile se instance virtuálního počítače škáluje, musíte volat rutinu Remove-ServiceFabricNodeState.

Poznámka:

Clustery Service Fabric vyžadují, aby byl neustále v provozu určitý počet uzlů, aby se zachovala dostupnost a zachoval stav – označuje se jako údržba kvora. Proto je obvykle nebezpečné vypnout všechny počítače v clusteru, pokud jste nejprve neprovedli úplnou zálohu stavu.

Další kroky

Přečtěte si následující informace o plánování kapacity clusteru, upgradu clusteru a dělení služeb: