Delen via


Plannen en schalen van capaciteiten voor Azure Service Fabric

Voordat u een Azure Service Fabric-cluster maakt of rekenresources schaalt die als host fungeren voor uw cluster, is het belangrijk om capaciteit te plannen. Zie De Capaciteit van het Service Fabric-cluster plannen voor meer informatie over het plannen van capaciteit. Zie Service Fabric-schaalbaarheidsoverwegingen voor verdere aanbevolen procedures voor schaalbaarheid van clusters.

Naast het overwegen van knooppunttypen en clusterkenmerken, moet u verwachten dat schaalbewerkingen langer dan een uur duren voordat een productieomgeving is voltooid. Deze overweging geldt ongeacht het aantal virtuele machines dat u toevoegt.

Automatisch schalen

U moet schaalbewerkingen uitvoeren via Azure Resource Manager-sjablonen, omdat het de aanbevolen procedure is om resourceconfiguraties als code te behandelen.

Als u automatisch schalen via virtuele-machineschaalsets gebruikt, wordt uw resourcebeheersjabloon met een versie onjuist gedefinieerd voor het aantal exemplaren voor virtuele-machineschaalsets. Onjuiste definitie verhoogt het risico dat toekomstige implementaties onbedoelde schaalbewerkingen veroorzaken. Over het algemeen moet u automatisch schalen gebruiken als:

  • Het implementeren van uw Resource Manager-sjablonen met de juiste capaciteit gedeclareerd biedt geen ondersteuning voor uw use-case.

    Naast handmatig schalen kunt u een pijplijn voor continue integratie en levering configureren in Azure DevOps Services met behulp van azure-resourcegroepimplementatieprojecten. Deze pijplijn wordt meestal geactiveerd door een logische app die gebruikmaakt van metrische gegevens over de prestaties van virtuele machines die worden opgevraagd vanuit de Rest API van Azure Monitor. De pijplijn wordt automatisch geschaald op basis van de gewenste metrische gegevens, terwijl de pijplijn wordt geoptimaliseerd voor Resource Manager-sjablonen.

  • U moet slechts één knooppunt voor virtuele-machineschaalset tegelijk horizontaal schalen.

    Als u wilt uitschalen met drie of meer knooppunten tegelijk, moet u een Service Fabric-cluster uitschalen door een virtuele-machineschaalset toe te voegen. Het is veilig om virtuele-machineschaalsets horizontaal in te schalen en uit te schalen, één knooppunt tegelijk.

  • U hebt silver-betrouwbaarheid of hoger voor uw Service Fabric-cluster en duurzaamheid van Silver of hoger op elke schaal waarop u regels voor automatisch schalen configureert.

    De minimale capaciteit voor regels voor automatisch schalen moet gelijk zijn aan of groter zijn dan vijf exemplaren van virtuele machines. Het moet ook gelijk zijn aan of groter zijn dan de minimale betrouwbaarheidslaag voor uw primaire knooppunttype.

Notitie

De stateful Service Fabric-service fabric:/System/InfrastructureService/<NODE_TYPE_NAME> wordt uitgevoerd op elk knooppunttype met Silver of een hogere duurzaamheid. Het is de enige systeemservice die wordt ondersteund voor uitvoering in Azure op een van uw clusterknooppunttypen.

Belangrijk

Automatische schaalaanpassing van Service Fabric ondersteunt Default en NewestVM schaalsetconfiguraties voor virtuele machines.

Overwegingen voor verticale schaalaanpassing

Voor verticaal schalen van een knooppunttype in Azure Service Fabric zijn een aantal stappen en overwegingen vereist. Voorbeeld:

  • Het cluster moet in orde zijn voordat u schaalt. Anders wordt het cluster verder gedestabiliseerd.
  • Silver-duurzaamheidsniveau of hoger is vereist voor alle Service Fabric-clusterknooppunttypen die stateful services hosten.

Notitie

Het primaire knooppunttype dat als host fungeert voor stateful Service Fabric-systeemservices, moet het duurzaamheidsniveau silver of hoger zijn. Nadat u Silver-duurzaamheid hebt ingeschakeld, zijn clusterbewerkingen zoals upgrades, het toevoegen of verwijderen van knooppunten langzamer, omdat het systeem optimaliseert voor gegevensveiligheid ten opzichte van de snelheid van bewerkingen.

Verticaal schalen van een virtuele-machineschaalset door simpelweg de resource-SKU te wijzigen, is een destructieve bewerking, omdat uw hosts uw hosts zo alle lokaal persistente status verwijderen. In plaats daarvan wilt u uw cluster horizontaal schalen door een nieuwe schaalset met de gewenste SKU toe te voegen en vervolgens uw services te migreren naar de nieuwe schaalset om een veilige verticale schaalbewerking te voltooien.

Uw cluster maakt gebruik van eigenschappen en plaatsingsbeperkingen voor Service Fabric-knooppunten om te bepalen waar de services van uw toepassing moeten worden gehost. Wanneer u een primair knooppunttype verticaal schaalt, implementeert u een tweede primair knooppunttype en stelt u ("isPrimary": false) in op het oorspronkelijke primaire knooppunttype en schakelt u de knooppunten uit en verwijdert u de schaalset en de bijbehorende resources. Zie Het primaire knooppunttype van een Service Fabric-cluster omhoog schalen voor meer informatie.

Notitie

Valideer altijd bewerkingen in testomgevingen voordat u wijzigingen in de productieomgeving probeert aan te brengen. Service Fabric-clustersysteemservices hebben standaard een plaatsingsbeperking tot alleen het primaire doelknooppunttype.

Wanneer de knooppunteigenschappen en plaatsingsbeperkingen zijn gedeclareerd, voert u de volgende stappen uit op één VM-exemplaar tegelijk. Hierdoor kunnen de systeemservices (en uw stateful services) probleemloos worden afgesloten op het VM-exemplaar dat u verwijdert wanneer er elders nieuwe replica's worden gemaakt.

  1. Voer Disable-ServiceFabricNode vanuit PowerShell uit met de intentie RemoveNode om het knooppunt uit te schakelen dat u wilt verwijderen. Verwijder het knooppunttype met het hoogste getal. Als u bijvoorbeeld een cluster met zes knooppunten hebt, verwijdert u het exemplaar van de virtuele machine 'MyNodeType_5'.
  2. Voer Get-ServiceFabricNode deze opdracht uit om ervoor te zorgen dat het knooppunt is overgezet naar uitgeschakeld. Zo niet, wacht u totdat het knooppunt is uitgeschakeld. Dit kan enkele uren duren voor elk knooppunt. Ga pas verder als het knooppunt is overgezet naar uitgeschakeld.
  3. Verminder het aantal VIRTUELE machines met één in dat knooppunttype. Het hoogste VM-exemplaar wordt nu verwijderd.
  4. Herhaal stap 1 tot en met 3 indien nodig, maar schaal nooit het aantal exemplaren in de primaire knooppunttypen kleiner op dan wat de betrouwbaarheidslaag rechtvaardigt. Zie De Capaciteit van het Service Fabric-cluster plannen voor een lijst met aanbevolen exemplaren.
  5. Zodra alle VM's zijn verdwenen (weergegeven als 'Omlaag') wordt de infrastructuur:/System/InfrastructureService/[naam van het knooppunt] een foutstatus weergegeven. Vervolgens kunt u de clusterresource bijwerken om het knooppunttype te verwijderen. U kunt de ARM-sjabloonimplementatie gebruiken of de clusterresource bewerken via Azure Resource Manager. Hiermee start u een clusterupgrade waarmee de service fabric:/System/InfrastructureService/[node type] wordt verwijderd die de foutstatus heeft.
  6. Daarna kunt u de VMScaleSet desgewenst verwijderen, maar u ziet nog steeds de knooppunten als 'Omlaag' in de Service Fabric Explorer-weergave. De laatste stap is om ze op te schonen met Remove-ServiceFabricNodeState de opdracht.

Horizontale schaalaanpassing

U kunt horizontaal schalen handmatig of programmatisch uitvoeren.

Notitie

Als u een knooppunttype schaalt met duurzaamheid van Silver of Gold, is schalen traag.

Uitschalen

Schaal een Service Fabric-cluster uit door het aantal exemplaren voor een bepaalde virtuele-machineschaalset te verhogen. U kunt programmatisch uitschalen met behulp van AzureClient de id voor de gewenste schaalset om de capaciteit te vergroten.

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

Als u handmatig wilt uitschalen, werkt u de capaciteit in de SKU-eigenschap van de gewenste virtuele-machineschaalsetresource bij.

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

Inschalen

Inschalen vereist meer overweging dan uitschalen. Bijvoorbeeld:

  • Service Fabric-systeemservices worden uitgevoerd in het primaire knooppunttype in uw cluster. Sluit het aantal exemplaren voor dat knooppunttype nooit af of schaal deze in, zodat u minder exemplaren hebt dan wat de betrouwbaarheidslaag rechtvaardigt.
  • Voor een stateful service hebt u een bepaald aantal knooppunten nodig die altijd de beschikbaarheid behouden en de status van uw service behouden. U hebt minimaal een aantal knooppunten nodig die gelijk zijn aan het aantal doelreplica's van de partitie of service.

Voer de volgende stappen uit om handmatig in te schalen:

  1. Voer Disable-ServiceFabricNode vanuit PowerShell uit met de intentie RemoveNode om het knooppunt uit te schakelen dat u wilt verwijderen. Verwijder het knooppunttype met het hoogste getal. Als u bijvoorbeeld een cluster met zes knooppunten hebt, verwijdert u het exemplaar van de virtuele machine 'MyNodeType_5'.
  2. Voer Get-ServiceFabricNode deze opdracht uit om ervoor te zorgen dat het knooppunt is overgezet naar uitgeschakeld. Zo niet, wacht u totdat het knooppunt is uitgeschakeld. Dit kan enkele uren duren voor elk knooppunt. Ga pas verder als het knooppunt is overgezet naar uitgeschakeld.
  3. Verminder het aantal VIRTUELE machines met één in dat knooppunttype. Het hoogste VM-exemplaar wordt nu verwijderd.
  4. Herhaal stap 1 tot en met 3 zo nodig totdat u de gewenste capaciteit inricht. Schaal niet in het aantal exemplaren in de primaire knooppunttypen naar minder dan wat de betrouwbaarheidslaag rechtvaardigt. Zie De Capaciteit van het Service Fabric-cluster plannen voor een lijst met aanbevolen exemplaren.

Als u handmatig wilt inschalen, werkt u de capaciteit in de SKU-eigenschap van de gewenste virtuele-machineschaalsetresource bij.

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

U moet het knooppunt voorbereiden voor afsluiten om programmatisch in te schalen. Zoek het knooppunt dat moet worden verwijderd (het hoogste exemplaarknooppunt). Voorbeeld:

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();

Het knooppunt deactiveren en verwijderen met behulp van hetzelfde FabricClient exemplaar (client in dit geval) en het knooppuntexemplaren (instanceIdString in dit geval) dat u in de vorige code hebt gebruikt:

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();

Notitie

Wanneer u inschaalt in een cluster, ziet u dat het verwijderde knooppunt-/VM-exemplaar wordt weergegeven met een slechte status in Service Fabric Explorer. Zie Gedrag dat u in Service Fabric Explorer kunt bekijken voor een uitleg van dit gedrag. U kunt:

Betrouwbaarheidsniveaus

Het betrouwbaarheidsniveau is een eigenschap van uw Service Fabric-clusterresource. Het kan niet anders worden geconfigureerd voor afzonderlijke knooppunttypen. Het bepaalt de replicatiefactor van de systeemservices voor het cluster en is een instelling op clusterresourceniveau.

Het betrouwbaarheidsniveau bepaalt het minimale aantal knooppunten dat uw primaire knooppunttype moet hebben. De betrouwbaarheidslaag kan de volgende waarden aannemen:

  • Platinum: voert de systeemservices uit met een doelreplicaset van zeven en negen seed-knooppunten.
  • Gold: voert de systeemservices uit met een doelreplicaset van zeven en zeven seed-knooppunten.
  • Zilver: voert de systeemservices uit met een doelreplicasetaantal van vijf en vijf seed-knooppunten.
  • Brons: voert de systeemservices uit met een doelreplicaset van drie en drie seed-knooppunten.

Het minimale aanbevolen betrouwbaarheidsniveau is Silver.

Het betrouwbaarheidsniveau wordt ingesteld in de eigenschappensectie van de resource Microsoft.ServiceFabric/clusters, zoals deze:

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

Duurzaamheidsniveaus

Waarschuwing

Knooppunttypen die worden uitgevoerd met bronzen duurzaamheid krijgen geen bevoegdheden. Infrastructuurtaken die van invloed zijn op uw staatloze workloads, worden niet gestopt of vertraagd, wat van invloed kan zijn op uw workloads.

Gebruik alleen de duurzaamheid van brons voor knooppunttypen waarop staatloze workloads worden uitgevoerd. Voor productieworkloads voert u Silver of hoger uit om statusconsistentie te garanderen. Kies de juiste betrouwbaarheid op basis van de richtlijnen in de documentatie voor capaciteitsplanning.

Het duurzaamheidsniveau moet worden ingesteld in twee resources. Een is het extensieprofiel van de virtuele-machineschaalsetresource:

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

De andere resource bevindt zich in nodeTypes de resource Microsoft.ServiceFabric/clusters:

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

Volgende stappen