Dela via


skala upp eller ned ett kluster

Varning

Läs det här avsnittet innan du skalar

Skalning av beräkningsresurser för att hämta din programarbetsbelastning kräver avsiktlig planering, tar nästan alltid längre tid än en timme att slutföra för en produktionsmiljö och kräver att du förstår din arbetsbelastning och affärskontext. Om du aldrig har gjort den här aktiviteten tidigare rekommenderar vi att du börjar med att läsa och förstå överväganden för kapacitetsplanering för Service Fabric-kluster innan du fortsätter resten av det här dokumentet. Den här rekommendationen är att undvika oavsiktliga LiveSite-problem och vi rekommenderar också att du testar de åtgärder som du bestämmer dig för att utföra mot en icke-produktionsmiljö. När som helst kan du rapportera produktionsproblem eller begära betald support för Azure. För tekniker som har allokerats för att utföra dessa åtgärder som har rätt kontext beskrivs skalningsåtgärder i den här artikeln, men du måste bestämma och förstå vilka åtgärder som är lämpliga för ditt användningsfall. till exempel vilka resurser som ska skalas (CPU, Lagring, Minne), vilken riktning du ska skala (lodrätt eller vågrätt) och vilka åtgärder som ska utföras (distribution av resursmallar, portalen, PowerShell/CLI).

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Information om hur du kommer igång finns i Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Skala in eller ut ett Service Fabric-kluster med hjälp av regler för automatisk skalning eller manuellt

Vm-skalningsuppsättningar är en Azure-beräkningsresurs som du kan använda för att distribuera och hantera en samling virtuella datorer som en uppsättning. Varje nodtyp som definieras i ett Service Fabric-kluster konfigureras som en separat VM-skalningsuppsättning. Varje nodtyp kan sedan skalas in eller ut oberoende av varandra, ha olika uppsättningar portar öppna och kan ha olika kapacitetsmått. Läs mer om det i dokumentet Service Fabric-nodtyper . Eftersom Service Fabric-nodtyperna i klustret består av vm-skalningsuppsättningar på serverdelen måste du konfigurera regler för automatisk skalning för varje nodtyp/vm-skalningsuppsättning.

Kommentar

Din prenumeration måste ha tillräckligt med kärnor för att kunna lägga till de nya virtuella datorer som utgör klustret. Det finns för närvarande ingen modellverifiering, så du får ett distributionstidsfel om någon av kvotgränserna nås.

Kommentar

Om du använder Windows OS-avbildning med Hyper-V-rollen aktiverad, dvs. den virtuella datorn kommer att konfigureras för kapslad virtualisering, det tillgängliga minnesmåttet är inte tillgängligt eftersom drivrutinen för dynamiskt minne i den virtuella datorn kommer att vara i ett stoppat tillstånd.

Välj nodtyp/VM-skalningsuppsättning för skalning

För närvarande kan du inte ange regler för automatisk skalning för vm-skalningsuppsättningar med hjälp av portalen för att skapa ett Service Fabric-kluster, så låt oss använda Azure PowerShell (1.0+) för att lista nodtyperna och sedan lägga till regler för automatisk skalning till dem.

Kör följande cmdletar för att hämta listan över vm-skalningsuppsättningar som utgör klustret:

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

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

Ange regler för automatisk skalning för nodtypen/vm-skalningsuppsättningen

Om klustret har flera nodtyper upprepar du detta för varje nodtyper/vm-skalningsuppsättningar som du vill skala (in eller ut). Ta hänsyn till antalet noder som du måste ha innan du ställer in automatisk skalning. Det minsta antalet noder som du måste ha för den primära nodtypen avgörs av tillförlitlighetsnivån som du har valt. Läs mer om tillförlitlighetsnivåer.

Kommentar

Om du skalar in den primära nodtypen till mindre än det minsta antalet blir klustret instabilt eller till och med tar ned det. Detta kan leda till dataförlust för dina program och för systemtjänsterna.

För närvarande drivs funktionen för automatisk skalning inte av de belastningar som dina program kan rapportera till Service Fabric. För närvarande drivs den automatiska skalning som du får enbart av de prestandaräknare som genereras av var och en av de virtuella datorskalningsuppsättningsinstanserna.

Följ dessa instruktioner för att konfigurera automatisk skalning för varje VM-skalningsuppsättning.

Kommentar

Om inte nodtypen har en hållbarhetsnivå på Guld eller Silver i ett scenario med skalning i scenariot måste du anropa cmdleten Remove-ServiceFabricNodeState med lämpligt nodnamn. För bronshållbarheten rekommenderar vi inte att du skalar in fler än en nod i taget.

Lägga till virtuella datorer manuellt i en nodtyp/vm-skalningsuppsättning

När du skalar ut lägger du till fler instanser av virtuella datorer i skalningsuppsättningen. Dessa instanser blir de noder som används i Service Fabric. Service Fabric vet när fler instanser läggs till i skalningsuppsättningen (genom utskalning) och reagerar automatiskt.

Kommentar

Det tar tid att lägga till virtuella datorer, så förvänta dig inte att tilläggen ska vara omedelbara. Planera att lägga till kapacitet i god tid, vilket innebär att det tar mer än 10 minuter innan den virtuella datorns kapacitet är tillgänglig för att replikerna/tjänstinstanserna ska placeras.

Lägga till virtuella datorer med hjälp av en mall

Följ exemplet/instruktionerna i snabbstartsmallgalleriet för att ändra antalet virtuella datorer i varje nodtyp.

Lägga till virtuella datorer med PowerShell- eller CLI-kommandon

Följande kod hämtar en skalningsuppsättning efter namn och ökar kapaciteten för skalningsuppsättningen med 1.

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

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

Den här koden anger värdet 6 för kapaciteten.

# 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

Ta bort virtuella datorer manuellt från en nodtyp/vm-skalningsuppsättning

När du skalar i en nodtyp tar du bort vm-instanser från skalningsuppsättningen. Om nodtypen är bronshållbarhetsnivå känner Service Fabric inte till vad som har hänt och rapporterar att en nod har försvunnit. Service Fabric rapporterar ett feltillstånd för klustret. För att förhindra det felaktiga tillståndet måste du uttryckligen ta bort noden från klustret och ta bort nodtillståndet.

Service Fabric-systemtjänsterna körs i den primära nodtypen i klustret. Vid skalning i den primära nodtypen skalar du aldrig in antalet instanser till mindre än vad tillförlitlighetsnivån garanterar.

För en tillståndskänslig tjänst behöver du ett visst antal noder för att alltid kunna upprätthålla tillgängligheten och bevara tjänstens tillstånd. Du behöver minst antalet noder som är lika med antalet målreplikuppsättningar för partitionen/tjänsten.

Ta bort Service Fabric-noden

Stegen för att manuellt ta bort nodtillstånd gäller endast för nodtyper med en bronshållbarhetsnivå . För hållbarhetsnivån Silver och Guld utförs dessa steg automatiskt av plattformen. Mer information om hållbarhet finns i Kapacitetsplanering för Service Fabric-kluster.

Kommentar

Behåll minst fem noder för alla vm-skalningsuppsättningar som har hållbarhetsnivån Guld eller Silver aktiverat. Klustret anger feltillstånd om du skalar in under det här tröskelvärdet och du måste rensa de borttagna noderna manuellt.

Om du vill hålla noderna i klustret jämnt fördelade över uppgraderings- och feldomäner och därmed möjliggöra jämn användning av dem, bör den senast skapade noden tas bort först. Med andra ord bör noderna tas bort i omvänd ordning mot hur de skapades. Den senast skapade noden är den som har den största egenskapsvärdet för virtual machine scale set InstanceId. Kodexemplen nedan returnerar den senast skapade noden.

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

Service Fabric-klustret måste informeras om att noden ska tas bort. Du måste göra tre saker:

  1. Inaktivera noden så att den inte längre är en replik av data.
    PowerShell: Disable-ServiceFabricNode
    sfctl: sfctl node disable

  2. Stoppa noden så att Service Fabric-körningen får en ren avstängning och appen får en avslutningsbegäran.
    PowerShell: Start-ServiceFabricNodeTransition -Stop
    sfctl: sfctl node transition --node-transition-type Stop

  3. Ta bort noden från klustret.
    PowerShell: Remove-ServiceFabricNodeState
    sfctl: sfctl node remove-state

När du har utfört dessa steg för noden kan du ta bort den från skalningsuppsättningen. Om du har någon annan hållbarhetsnivå än Brons görs dessa steg åt dig när instansen av skalningsuppsättningen tas bort.

Följande kodblock hämtar den senaste skapade noden och inaktiverar, stoppar och tar bort noden från klustret.

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

I sfctl-koden nedan används följande kommando för att hämta node-name-värdet för den nod som skapats senast: 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

Dricks

Använd följande sfctl-frågor för att kontrollera status för varje steg

Kontrollera inaktiveringsstatussfctl node list --query "sort_by(items[*], &name)[-1].nodeDeactivationInfo"

Kontrollera stoppstatussfctl node list --query "sort_by(items[*], &name)[-1].isStopped"

Skala in skalningsuppsättningen

Nu när Service Fabric-noden har tagits bort från klustret kan VM-skalningsuppsättningen skalas in. I exemplet nedan minskas skalningsuppsättningskapaciteten med 1.

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

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

Den här koden anger värdet 5 för kapaciteten.

# 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

Beteenden som du kan observera i Service Fabric Explorer

När du skalar ut ett kluster återspeglar Service Fabric Explorer antalet noder (vm-skalningsuppsättningsinstanser) som ingår i klustret. Men när du skalar ett kluster i visas den borttagna nod-/VM-instansen i ett feltillstånd om du inte anropar Remove-ServiceFabricNodeState-cmd med lämpligt nodnamn .

Här är förklaringen till det här beteendet.

Noderna som anges i Service Fabric Explorer är en återspegling av vad Service Fabric-systemtjänster (FM specifikt) vet om antalet noder som klustret hade/har. När du skalar in vm-skalningsuppsättningen togs den virtuella datorn bort, men FM-systemtjänsten tror fortfarande att noden (som mappades till den virtuella datorn som togs bort) kommer tillbaka. Service Fabric Explorer fortsätter därför att visa noden (även om hälsotillståndet kan vara fel eller okänt).

För att säkerställa att en nod tas bort när en virtuell dator tas bort har du två alternativ:

  1. Välj hållbarhetsnivån Guld eller Silver för nodtyperna i klustret, vilket ger dig infrastrukturintegrering. När du skalar in tas noder automatiskt bort från vårt systemtjänsttillstånd (FM). Läs mer om hållbarhetsnivåer här

Kommentar

Behåll minst fem noder för alla vm-skalningsuppsättningar som har hållbarhetsnivån Guld eller Silver aktiverat. Klustret anger feltillstånd om du skalar in under det här tröskelvärdet och du måste rensa de borttagna noderna manuellt.

  1. När den virtuella datorinstansen har skalats in måste du anropa cmdleten Remove-ServiceFabricNodeState.

Kommentar

Service Fabric-kluster kräver att ett visst antal noder alltid är igång för att upprätthålla tillgängligheten och bevara tillståndet , vilket kallas "upprätthålla kvorum". Det är därför vanligtvis osäkert att stänga av alla datorer i klustret om du inte har utfört en fullständig säkerhetskopia av tillståndet.

Nästa steg

Läs följande om du också vill lära dig mer om att planera klusterkapacitet, uppgradera ett kluster och partitionera tjänster: