Dela via


Kapacitetsplanering och skalning för Azure Service Fabric

Innan du skapar ett Azure Service Fabric-kluster eller skalar beräkningsresurser som är värdar för klustret är det viktigt att planera för kapacitet. Mer information om att planera för kapacitet finns i Planera Service Fabric-klusterkapaciteten. Mer vägledning om bästa praxis för skalbarhet för kluster finns i Överväganden för skalbarhet för Service Fabric.

Förutom att överväga nodtyp och klusteregenskaper bör du förvänta dig att skalningsåtgärder tar längre tid än en timme att slutföra för en produktionsmiljö. Det här övervägandet gäller oavsett hur många virtuella datorer du lägger till.

Automatisk skalning

Du bör utföra skalningsåtgärder via Azure Resource Manager-mallar eftersom det är bästa praxis att behandla resurskonfigurationer som kod.

Om du använder automatisk skalning via vm-skalningsuppsättningar kommer din version av Resource Manager-mallen att felaktigt definiera antalet instanser för vm-skalningsuppsättningar. Felaktig definition ökar risken för att framtida distributioner orsakar oavsiktliga skalningsåtgärder. I allmänhet bör du använda autoskalning om:

  • Att distribuera Dina Resource Manager-mallar med lämplig kapacitet deklarerad stöder inte ditt användningsfall.

    Förutom manuell skalning kan du konfigurera en pipeline för kontinuerlig integrering och leverans i Azure DevOps Services med hjälp av distributionsprojekt för Azure-resursgrupper. Den här pipelinen utlöses ofta av en logikapp som använder prestandamått för virtuella datorer som efterfrågas från Azure Monitor REST API. Pipelinen skalas effektivt automatiskt baserat på vilka mått du vill, samtidigt som du optimerar för Resource Manager-mallar.

  • Du behöver bara skala en vm-skalningsuppsättningsnod vågrätt i taget.

    Om du vill skala ut med tre eller flera noder åt gången bör du skala ut ett Service Fabric-kluster genom att lägga till en VM-skalningsuppsättning. Det är säkrast att skala in och skala ut vm-skalningsuppsättningar vågrätt, en nod i taget.

  • Du har Silver-tillförlitlighet eller högre för ditt Service Fabric-kluster och Silver-hållbarhet eller högre i valfri skala där du konfigurerar regler för automatisk skalning.

    Den minsta kapaciteten för regler för automatisk skalning måste vara lika med eller större än fem virtuella datorinstanser. Den måste också vara lika med eller större än din lägsta tillförlitlighetsnivå för din primära nodtyp.

Kommentar

Service Fabric stateful service fabric:/System/InfrastructureService/<NODE_TYPE_NAME> körs på varje nodtyp som har silver eller högre hållbarhet. Det är den enda systemtjänst som stöds för att köras i Azure på någon av dina klusternodtyper.

Viktigt!

Service Fabric-autoskalning stöder Default och NewestVM skalningskonfigurationer för vm-skalningsuppsättningar.

Överväganden för lodrät skalning

Vertikal skalning av en nodtyp i Azure Service Fabric kräver ett antal steg och överväganden. Till exempel:

  • Klustret måste vara felfritt före skalning. Annars destabiliserar du klustret ytterligare.
  • Silver hållbarhetsnivå eller högre krävs för alla Service Fabric-klusternodtyper som är värdar för tillståndskänsliga tjänster.

Kommentar

Din primära nodtyp som är värd för tillståndskänsliga Service Fabric-systemtjänster måste vara silverhållbarhetsnivå eller högre. När du har aktiverat Silver-hållbarhet blir klusteråtgärder som uppgraderingar, tillägg eller borttagning av noder och så vidare långsammare eftersom systemet optimerar för datasäkerhet över drifthastigheten.

Lodrät skalning av en vm-skalningsuppsättning genom att helt enkelt ändra resurs-SKU:n är en destruktiv åtgärd eftersom den avbildar värdarna igen och därmed tar bort alla lokalt bevarade tillstånd. I stället vill du skala klustret vågrätt genom att lägga till en ny skalningsuppsättning med önskad SKU och sedan migrera dina tjänster till den nya skalningsuppsättningen för att slutföra en säker vertikal skalningsåtgärd.

Klustret använder service fabric-nodegenskaper och placeringsbegränsningar för att bestämma var programmets tjänster ska vara värdar. När du skalar en primär nodtyp lodrätt distribuerar du en andra primär nodtyp och ställer sedan in ("isPrimary": false) på den ursprungliga primära nodtypen och fortsätter med att inaktivera dess noder och ta bort dess skalningsuppsättning och dess relaterade resurser. Mer information finns i Skala upp en primär nodtyp för Service Fabric-kluster.

Kommentar

Verifiera alltid åtgärder i testmiljöer innan du försöker ändra produktionsmiljön. Som standard har Service Fabric-klustersystemtjänster en placeringsbegränsning till endast den primära målnodtypen.

När nodegenskaperna och placeringsbegränsningarna har deklarerats utför du följande steg en VM-instans i taget. På så sätt kan systemtjänsterna (och dina tillståndskänsliga tjänster) stängas av på ett korrekt sätt på den virtuella datorinstans som du tar bort när nya repliker skapas någon annanstans.

  1. Från PowerShell kör Disable-ServiceFabricNode du med avsikt RemoveNode att inaktivera den nod som du ska ta bort. Ta bort den nodtyp som har det högsta talet. Om du till exempel har ett kluster med sex noder tar du bort den virtuella datorinstansen "MyNodeType_5".
  2. Kör Get-ServiceFabricNode för att kontrollera att noden har övergått till inaktiverad. Annars väntar du tills noden är inaktiverad. Det kan ta några timmar för varje nod. Fortsätt inte förrän noden har övergått till inaktiverad.
  3. Minska antalet virtuella datorer med en i den nodtypen. Den högsta VM-instansen tas nu bort.
  4. Upprepa steg 1 till 3 efter behov, men skala aldrig in antalet instanser i de primära nodtyperna mindre än vad tillförlitlighetsnivån garanterar. En lista över rekommenderade instanser finns i Planera Service Fabric-klusterkapaciteten .
  5. När alla virtuella datorer är borta (representeras som "Ned") visar infrastrukturresursen:/System/InfrastrukturTjänst/[nodnamn] ett feltillstånd. Sedan kan du uppdatera klusterresursen för att ta bort nodtypen. Du kan antingen använda ARM-malldistributionen eller redigera klusterresursen via Azure Resource Manager. Detta startar en klusteruppgradering som tar bort tjänsten fabric:/System/InfrastructureService/[node type] som är i feltillstånd.
  6. Efter det kan du ta bort VMScaleSet, men du ser fortfarande noderna som "Ned" från Service Fabric Explorer-vyn. Det sista steget är att rensa dem med Remove-ServiceFabricNodeState kommandot .

Horisontell skalning

Du kan utföra horisontell skalning manuellt eller programmatiskt.

Kommentar

Om du skalar en nodtyp som har silver- eller guldhållbarhet blir skalningen långsam.

Skala ut

Skala ut ett Service Fabric-kluster genom att öka instansantalet för en viss VM-skalningsuppsättning. Du kan skala ut programmatiskt med hjälp AzureClient av och ID för önskad skalningsuppsättning för att öka kapaciteten.

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);
var newCapacity = (int)Math.Min(MaximumNodeCount, scaleSet.Capacity + 1);
scaleSet.Update().WithCapacity(newCapacity).Apply(); 

Om du vill skala ut manuellt uppdaterar du kapaciteten i SKU-egenskapen för den önskade vm-skalningsuppsättningsresursen .

"sku": {
    "name": "[parameters('vmNodeType0Size')]",
    "capacity": "[parameters('nt0InstanceCount')]",
    "tier": "Standard"
}

Skala in

Att skala in kräver mer att tänka på än att skala ut. Till exempel:

  • Service Fabric-systemtjänster körs i den primära nodtypen i klustret. Stäng aldrig av eller skala aldrig in antalet instanser för den nodtypen så att du har färre instanser än vad tillförlitlighetsnivån garanterar.
  • För en tillståndskänslig tjänst behöver du ett visst antal noder som alltid håller på att vara tillgängliga och bevara tjänstens tillstånd. Du behöver minst ett antal noder som är lika med antalet målreplikuppsättningar för partitionen eller tjänsten.

Följ dessa steg för att skala in manuellt:

  1. Från PowerShell kör Disable-ServiceFabricNode du med avsikt RemoveNode att inaktivera den nod som du ska ta bort. Ta bort den nodtyp som har det högsta talet. Om du till exempel har ett kluster med sex noder tar du bort den virtuella datorinstansen "MyNodeType_5".
  2. Kör Get-ServiceFabricNode för att kontrollera att noden har övergått till inaktiverad. Annars väntar du tills noden är inaktiverad. Det kan ta några timmar för varje nod. Fortsätt inte förrän noden har övergått till inaktiverad.
  3. Minska antalet virtuella datorer med en i den nodtypen. Den högsta VM-instansen tas nu bort.
  4. Upprepa steg 1 till och med 3 efter behov tills du etablerar den kapacitet du vill ha. Skala inte in antalet instanser i de primära nodtyperna till mindre än vad tillförlitlighetsnivån garanterar. En lista över rekommenderade instanser finns i Planera Service Fabric-klusterkapaciteten .

Om du vill skala in manuellt uppdaterar du kapaciteten i SKU-egenskapen för den önskade vm-skalningsuppsättningsresursen .

"sku": {
    "name": "[parameters('vmNodeType0Size')]",
    "capacity": "[parameters('nt0InstanceCount')]",
    "tier": "Standard"
}

Du måste förbereda noden för avstängning för att skala in programmatiskt. Hitta den nod som ska tas bort (noden med högst instans). Till exempel:

using (var client = new FabricClient())
{
    var mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync())
        .Where(n => n.NodeType.Equals(NodeTypeToScale, StringComparison.OrdinalIgnoreCase))
        .Where(n => n.NodeStatus == System.Fabric.Query.NodeStatus.Up)
        .OrderByDescending(n =>
        {
            var instanceIdIndex = n.NodeName.LastIndexOf("_");
            var instanceIdString = n.NodeName.Substring(instanceIdIndex + 1);
            return int.Parse(instanceIdString);
        })
        .FirstOrDefault();

Inaktivera och ta bort noden med samma FabricClient instans (client i det här fallet) och nodinstansen (instanceIdString i det här fallet) som du använde i föregående kod:

var scaleSet = AzureClient.VirtualMachineScaleSets.GetById(ScaleSetId);

// Remove the node from the Service Fabric cluster
ServiceEventSource.Current.ServiceMessage(Context, $"Disabling node {mostRecentLiveNode.NodeName}");
await client.ClusterManager.DeactivateNodeAsync(mostRecentLiveNode.NodeName, NodeDeactivationIntent.RemoveNode);

// Wait (up to a timeout) for the node to gracefully shut down
var timeout = TimeSpan.FromMinutes(5);
var waitStart = DateTime.Now;
while ((mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Up || mostRecentLiveNode.NodeStatus == System.Fabric.Query.NodeStatus.Disabling) &&
        DateTime.Now - waitStart < timeout)
{
    mostRecentLiveNode = (await client.QueryManager.GetNodeListAsync()).FirstOrDefault(n => n.NodeName == mostRecentLiveNode.NodeName);
    await Task.Delay(10 * 1000);
}

// Decrement virtual machine scale set capacity
var newCapacity = (int)Math.Max(MinimumNodeCount, scaleSet.Capacity - 1); // Check min count 

scaleSet.Update().WithCapacity(newCapacity).Apply();

Kommentar

När du skalar i ett kluster visas den borttagna nod-/VM-instansen i ett feltillstånd i Service Fabric Explorer. En förklaring av det här beteendet finns i Beteenden som du kan observera i Service Fabric Explorer. Du kan:

Tillförlitlighetsnivåer

Tillförlitlighetsnivån är en egenskap för din Service Fabric-klusterresurs. Det kan inte konfigureras på olika sätt för enskilda nodtyper. Den styr replikeringsfaktorn för systemtjänsterna för klustret och är en inställning på klusterresursnivå.

Tillförlitlighetsnivån avgör det minsta antalet noder som din primära nodtyp måste ha. Tillförlitlighetsnivån kan ha följande värden:

  • Platina: Kör systemtjänsterna med ett antal målreplikuppsättningar på sju och nio startnoder.
  • Guld: Kör systemtjänsterna med ett antal målreplikuppsättningar på sju och sju startnoder.
  • Silver: Kör systemtjänsterna med ett antal målreplikuppsättningar på fem och fem startnoder.
  • Brons: Kör systemtjänsterna med ett antal målreplikuppsättningar på tre och tre startnoder.

Den lägsta rekommenderade tillförlitlighetsnivån är Silver.

Tillförlitlighetsnivån anges i egenskapsavsnittet för resursen Microsoft.ServiceFabric/clusters, så här:

"properties":{
    "reliabilityLevel": "Silver"
}

Hållbarhetsnivåer

Varning

Nodtyper som körs med bronshållbarhet får inga privilegier. Infrastrukturjobb som påverkar dina tillståndslösa arbetsbelastningar stoppas inte eller fördröjs, vilket kan påverka dina arbetsbelastningar.

Använd endast bronshållbarhet för nodtyper som kör tillståndslösa arbetsbelastningar. För produktionsarbetsbelastningar kör du Silver eller senare för att säkerställa tillståndskonsekvens. Välj rätt tillförlitlighet baserat på vägledningen i dokumentationen för kapacitetsplanering.

Hållbarhetsnivån måste anges i två resurser. Den ena är tilläggsprofilen för resursen för vm-skalningsuppsättningen:

"extensionProfile": {
    "extensions":          {
        "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType0Name')]",
        "properties": {
            "settings": {
                "durabilityLevel": "Bronze"
            }
        }
    }
}

Den andra resursen finns under nodeTypes i resursen Microsoft.ServiceFabric/clusters:

"nodeTypes": [
    {
        "name": "[variables('vmNodeType0Name')]",
        "durabilityLevel": "Bronze"
    }
]

Nästa steg