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

Upozornění

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

Škálování výpočetních prostředků tak, aby zpracovály vaši aplikaci, vyžaduje záměrné plánování, dokončení produkčního prostředí bude téměř vždy trvat déle než hodinu a vyžaduje, abyste pochopili své úlohy a obchodní kontext. Pokud jste tuto aktivitu ještě nikdy neprokonávali, 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, abyste se vyhnuli nezamýšleným problémům s webem LiveSite a také doporučujeme úspěšně otestovat operace, které se rozhodnete provádět v neprodukčním prostředí. Kdykoli můžete hlásit problémy s produkčním prostředím 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 se 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 se má škálovat (svisle nebo vodorovně) a jaké operace se mají provést (nasazení šablony prostředků, portál, PowerShell nebo rozhraní příkazového řádku).

Poznámka

K interakci s Azure doporučujeme použít modul Azure Az PowerShell. Začněte tím, že si projdete 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.

Škálování 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 nebo škálovat, má otevřené různé sady portů a může mít různé metriky kapacity. Další informace najdete v dokumentu Typy uzlů Service Fabric . Vzhledem k tomu, že typy uzlů Service Fabric ve vašem clusteru jsou tvořené š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 k přidání nových virtuálních počítačů, které tvoří tento cluster. V současné době nedochází k žádnému 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 nakonfigurován pro vnořenou virtualizaci, metrika dostupné paměti nebude k dispozici, protože ovladač dynamické paměti na virtuálním počítači bude v zastaveném stavu.

Zvolte typ uzlu nebo škálovací sadu virtuálních počítačů pro škálování.

V současné době nemůžete pomocí portálu určit pravidla automatického škálování pro škálovací sady virtuálních počítačů k vytvoření clusteru Service Fabric, proto pomocí Azure PowerShell (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 každý typ uzlů nebo škálovací sady virtuálních počítačů, které chcete škálovat (v rámci nebo vynulovat). 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í primárního 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 zatížením, které vaše aplikace můžou hlásit do Service Fabric. V tuto chvíli je tedy automatické škálování, které získáte, řízeno výhradně čítači výkonu, které jsou generovány každou instancí škálovací sady virtuálních počítačů.

Postupujte podle těchto pokynů a 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. V případě odolnosti bronzu se nedoporučuje škálovat 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 horizontálním navyšování kapacity 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, že přidání bude okamžité. Naplánujte si přidání kapacity s předstihem, což umožní více než 10 minut, než bude kapacita virtuálního počítače k dispozici pro umístění replik nebo instancí služeb.

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 nebo pokynů v galerii šablon pro rychlý start .

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 na úrovni bronzové stálosti, Service Fabric neví, co se stalo, a hlásí, že uzel chybí. Service Fabric pak hlásí, že stav clusteru není v pořádku. Pokud chcete ho předejít, musíte uzel explicitně odebrat z clusteru a odebrat stav uzlu.

Systémové služby Service Fabric běží v primárním typu uzlu ve vašem clusteru. Při škálování v primárním typu uzlu nikdy neškálejte počet instancí na menší, než vyžaduje úroveň spolehlivosti .

V případě stavové služby potřebujete mít určitý počet uzlů, aby se zachovala dostupnost a zachoval stav vaší služby. Minimálně potřebujete počet uzlů, který se rovná počtu cílových sad replik v oddílu nebo službě.

Odebrání uzlu Service Fabric

Postup ručního odebrání stavu uzlu se vztahuje pouze na typy uzlů s bronzovou úrovní odolnosti. U úrovní odolnosti Silver a Gold provádí tyto kroky automaticky platforma. 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 každou škálovací sadu virtuálních počítačů, která má povolenou úroveň odolnosti Gold nebo Silver. Pokud škálujete kapacitu pod tuto prahovou hodnotu, váš cluster přejde do chybového stavu a odebrané uzly budete muset 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 Explorer

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. Při škálování clusteru v systému se však odebraný uzel nebo instance virtuálního počítače zobrazí ve špatném stavu, 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 Explorer jsou odrazem toho, co systémové služby Service Fabric (konkrétně FM) vědí o počtu uzlů clusteru. 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 (který byl namapovaný na odstraněný virtuální počítač) vrátí. Proto Service Fabric Explorer i nadále zobrazuje tento uzel (i když může být stav chyba nebo neznámý).

Abyste měli jistotu, že se uzel při odebrání virtuálního počítače odebere, máte dvě možnosti:

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

Poznámka

Udržujte minimální počet pěti uzlů pro každou škálovací sadu virtuálních počítačů, která má povolenou úroveň odolnosti Gold nebo Silver. Pokud vertikálně snížíte kapacitu pod tuto prahovou hodnotu, cluster přejde do chybového stavu a odebrané uzly budete muset ručně vyčistit.

  1. Po horizontálním snížení kapacity instance virtuálního počítače je potřeba zavolat 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 "udržování kvora". Proto je obvykle nebezpečné vypnout všechny počítače v clusteru, pokud jste nejprve neprovedli úplné zálohování 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: