Condividi tramite


Pianificazione della capacità e scalabilità per Azure Service Fabric

Prima di creare un cluster di Azure Service Fabric o ridimensionare le risorse di calcolo che ospitano il cluster, è importante pianificare la capacità. Per altre informazioni sulla pianificazione della capacità, vedere Pianificazione della capacità del cluster di Service Fabric. Per altre indicazioni sulle procedure consigliate per la scalabilità dei cluster, vedere Considerazioni sulla scalabilità di Service Fabric.

Oltre a considerare le caratteristiche del tipo di nodo e del cluster, è necessario prevedere che le operazioni di ridimensionamento richiedono più di un'ora per il completamento di un ambiente di produzione. Questa considerazione è vera indipendentemente dal numero di macchine virtuali da aggiungere.

Scalabilità automatica

È consigliabile eseguire operazioni di ridimensionamento tramite modelli di Azure Resource Manager, perché è consigliabile considerare le configurazioni delle risorse come codice.

Usando il ridimensionamento automatico tramite set di scalabilità di macchine virtuali, il modello di Resource Manager con controllo delle versioni definirà in modo non accurato i conteggi delle istanze per i set di scalabilità di macchine virtuali. La definizione imprecisa aumenta il rischio che le distribuzioni future provocheranno operazioni di ridimensionamento impreviste. In generale, è consigliabile usare la scalabilità automatica se:

  • La distribuzione di modelli di Resource Manager con un'opportuna capacità dichiarata non è adatta al proprio caso.

    Oltre al ridimensionamento manuale, è possibile configurare una pipeline di integrazione e distribuzione continua in Azure DevOps Services usando i progetti di distribuzione del gruppo di risorse di Azure. Questa pipeline viene in genere attivata da un'app per la logica che usa le metriche delle prestazioni delle macchine virtuali sottoposte a query dall'API REST di Monitoraggio di Azure. La pipeline esegue in modo efficace la scalabilità automatica in base alle metriche desiderate, ottimizzando al tempo stesso i modelli di Resource Manager.

  • È necessario ridimensionare orizzontalmente un solo nodo del set di scalabilità di macchine virtuali alla volta.

    Per aumentare il numero di istanze di tre o più nodi alla volta, è necessario aumentare il numero di istanze di un cluster di Service Fabric aggiungendo un set di scalabilità di macchine virtuali. È più sicuro ridimensionare e aumentare il numero di istanze dei set di scalabilità di macchine virtuali orizzontalmente, un nodo alla volta.

  • Si dispone di affidabilità Silver o superiore per il cluster di Service Fabric e durabilità Silver o superiore su qualsiasi scala in cui si configurano le regole di scalabilità automatica.

    La capacità minima per le regole di scalabilità automatica deve essere uguale o maggiore di cinque istanze di macchina virtuale. Deve anche essere uguale o maggiore del livello di affidabilità minimo per il tipo di nodo primario.

Nota

Service Fabric con stato:/System/InfrastructureService/<NODE_TYPE_NAME> viene eseguito in ogni tipo di nodo con durabilità Silver o superiore. È l'unico servizio di sistema supportato per l'esecuzione in Azure in uno dei tipi di nodo dei cluster.

Importante

La scalabilità automatica di Service Fabric supporta Default le NewestVM configurazioni di scalabilità dei set di scalabilità di macchine virtuali.

Considerazioni sul ridimensionamento verticale

Il ridimensionamento verticale di un tipo di nodo in Azure Service Fabric richiede diversi passaggi e considerazioni. Ad esempio:

  • Prima del ridimensionamento, il cluster deve essere integro, In caso contrario, si destabiliterà ulteriormente il cluster.
  • Il livello di durabilità Silver o superiore è necessario per tutti i tipi di nodo del cluster di Service Fabric che ospitano servizi con stato.

Nota

Il tipo di nodo primario che ospita i servizi di sistema di Service Fabric con stato deve essere di livello di durabilità Silver o superiore. Dopo aver abilitato la durabilità Silver, le operazioni del cluster come gli aggiornamenti, l'aggiunta o la rimozione di nodi e così via saranno più lente perché il sistema ottimizza la sicurezza dei dati rispetto alla velocità delle operazioni.

Il ridimensionamento verticale di un set di scalabilità di macchine virtuali modificando semplicemente lo SKU della risorsa è un'operazione distruttiva, perché ricrea le immagini degli host rimuovendo così tutto lo stato persistente in locale. È invece necessario ridimensionare orizzontalmente il cluster aggiungendo un nuovo set di scalabilità con lo SKU desiderato e quindi eseguire la migrazione dei servizi al nuovo set di scalabilità per completare un'operazione di ridimensionamento verticale sicura.

Il cluster usa le proprietà dei nodi di Service Fabric e i vincoli di posizionamento per decidere dove ospitare i servizi dell'applicazione. Quando si ridimensiona verticalmente un tipo di nodo primario, si distribuirà un secondo tipo di nodo primario e quindi si imposta ("isPrimary": false) nel tipo di nodo primario originale e si procederà a disabilitare i nodi e rimuovere il set di scalabilità e le relative risorse. Per informazioni dettagliate, vedere Aumentare le prestazioni di un tipo di nodo primario del cluster di Service Fabric.

Nota

Convalidare sempre le operazioni negli ambienti di test prima di tentare di modificare l'ambiente di produzione. Per impostazione predefinita, i servizi di sistema del cluster di Service Fabric hanno un vincolo di posizionamento solo per il tipo di nodo primario di destinazione.

Con le proprietà dei nodi e i vincoli di posizionamento dichiarati, eseguire i passaggi seguenti in un'istanza di macchina virtuale alla volta. In questo modo i servizi di sistema (e i servizi con stato) vengono arrestati normalmente nell'istanza della macchina virtuale che si sta rimuovendo man mano che vengono create nuove repliche altrove.

  1. Da PowerShell eseguire Disable-ServiceFabricNode con la finalità RemoveNode di disabilitare il nodo che si intende rimuovere. Rimuovere il tipo di nodo con il numero più alto. Ad esempio, se si dispone di un cluster a sei nodi, rimuovere l'istanza della macchina virtuale "MyNodeType_5".
  2. Eseguire Get-ServiceFabricNode per assicurarsi che il nodo sia disabilitato. In caso contrario, attendere la disabilitazione del nodo. L'operazione potrebbe richiedere un paio di ore per ogni nodo. Non continuare finché il nodo non risulta disabilitato.
  3. Ridurre il numero di macchine virtuali di uno in tale tipo di nodo. L'istanza di macchina virtuale con il numero più alto verrà rimossa.
  4. Ripetere i passaggi da 1 a 3 in base alle esigenze, ma non ridimensionare mai il numero di istanze nei tipi di nodi primari meno di quello che il livello di affidabilità garantisce. Per un elenco di istanze consigliate, vedere Pianificazione della capacità del cluster di Service Fabric.
  5. Quando tutte le macchine virtuali non sono più presenti (rappresentate come "Inattivo") l'infrastruttura:/System/InfrastructureService/[nome nodo] mostrerà lo stato Errore. È quindi possibile aggiornare la risorsa cluster per rimuovere il tipo di nodo. È possibile usare la distribuzione del modello di Resource Manager o modificare la risorsa cluster tramite Azure Resource Manager. Verrà avviato un aggiornamento del cluster che rimuoverà il servizio fabric:/System/InfrastructureService/[node type] in stato di errore.
  6. Dopo di che è possibile eliminare facoltativamente VMScaleSet, i nodi verranno comunque visualizzati come "Inattivi" dalla visualizzazione service fabric Explorer. L'ultimo passaggio consiste nel pulirli con Remove-ServiceFabricNodeState il comando .

Scalabilità orizzontale

È possibile eseguire il ridimensionamento orizzontale manualmente o a livello di codice.

Nota

Se si ridimensiona un tipo di nodo con durabilità Silver o Gold, il ridimensionamento sarà lento.

Aumento del numero di istanze

Aumentare il numero di istanze di un cluster di Service Fabric aumentando il numero di istanze per un set di scalabilità di macchine virtuali specifico. È possibile aumentare il numero di istanze a livello di codice usando AzureClient e l'ID per il set di scalabilità desiderato per aumentare la capacità.

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

Per aumentare il numero di istanze manualmente, aggiornare la capacità nella proprietà SKU della risorsa del set di scalabilità di macchine virtuali desiderata.

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

Riduzione

La scalabilità in richiede una maggiore considerazione rispetto all'aumento del numero di istanze. Per esempio:

  • I servizi di sistema di Service Fabric vengono eseguiti nel tipo di nodo primario del cluster. Non arrestare o ridurre mai il numero di istanze per il tipo di nodo in modo che siano presenti meno istanze rispetto a quanto richiesto dal livello di affidabilità.
  • Per un servizio con stato, è necessario un certo numero di nodi sempre in grado di mantenere la disponibilità e mantenere lo stato del servizio. È necessario almeno un numero di nodi uguale al numero di set di repliche di destinazione della partizione o del servizio.

Per ridurre il numero di istanze, seguire questi passaggi:

  1. Da PowerShell eseguire Disable-ServiceFabricNode con la finalità RemoveNode di disabilitare il nodo che si intende rimuovere. Rimuovere il tipo di nodo con il numero più alto. Ad esempio, se si dispone di un cluster a sei nodi, rimuovere l'istanza della macchina virtuale "MyNodeType_5".
  2. Eseguire Get-ServiceFabricNode per assicurarsi che il nodo sia disabilitato. In caso contrario, attendere la disabilitazione del nodo. L'operazione potrebbe richiedere un paio di ore per ogni nodo. Non continuare finché il nodo non risulta disabilitato.
  3. Ridurre il numero di macchine virtuali di uno in tale tipo di nodo. L'istanza di macchina virtuale con il numero più alto verrà rimossa.
  4. Ripetere i passaggi da 1 a 3 in base alle esigenze fino a quando non si effettua il provisioning della capacità desiderata. Non ridimensionare il numero di istanze nei tipi di nodo primario a meno di quello che il livello di affidabilità garantisce. Per un elenco di istanze consigliate, vedere Pianificazione della capacità del cluster di Service Fabric.

Per ridimensionare manualmente, aggiornare la capacità nella proprietà SKU della risorsa del set di scalabilità di macchine virtuali desiderata.

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

È necessario preparare il nodo affinché l'arresto venga ridimensionato a livello di codice. Trovare il nodo da rimuovere (il nodo dell'istanza più alta). Ad esempio:

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

Disattivare e rimuovere il nodo usando la stessa FabricClient istanza (client in questo caso) e l'istanza del nodo (instanceIdString in questo caso) usata nel codice precedente:

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

Nota

Quando si esegue la scalabilità in un cluster, viene visualizzata l'istanza del nodo o della macchina virtuale rimossa in uno stato non integro in Service Fabric Explorer. Per una spiegazione di questo comportamento, vedere Comportamenti che è possibile osservare in Service Fabric Explorer. È possibile:

  • Chiamare il comando Remove-ServiceFabricNodeState con il nome del nodo appropriato.
  • Distribuire l'applicazione helper di scalabilità automatica di Service Fabric nel cluster. Questa applicazione garantisce che i nodi ridimensionati vengano cancellati da Service Fabric Explorer.

Livelli di affidabilità

Il livello di affidabilità è una proprietà della risorsa cluster di Service Fabric. Non può essere configurato in modo diverso per i singoli tipi di nodo. Questo livello controlla il fattore di replica dei servizi di sistema per il cluster ed è definito tramite un'impostazione a livello di risorsa cluster.

Il livello di affidabilità determina il numero minimo di nodi che deve avere il tipo di nodo primario. Il livello di affidabilità può avere i valori seguenti:

  • Platinum: esegue i servizi di sistema con un numero di set di repliche di destinazione di sette e nove nodi di inizializzazione.
  • Gold: esegue i servizi di sistema con un numero di set di repliche di destinazione di sette e sette nodi di inizializzazione.
  • Silver: esegue i servizi di sistema con un numero di set di repliche di destinazione di cinque e cinque nodi di inizializzazione.
  • Bronze: esegue i servizi di sistema con un numero di set di repliche di destinazione di tre e tre nodi di inizializzazione.

Il livello minimo di affidabilità consigliato è Silver.

Il livello di affidabilità è impostato nella sezione delle proprietà della risorsa Microsoft.ServiceFabric/clusters, come in questo esempio:

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

Livelli di durabilità

Avviso

I tipi di nodo in esecuzione con durabilità Bronze non ottengono privilegi. I processi di infrastruttura che influiscono sui carichi di lavoro senza stato non verranno arrestati o posticipati, che potrebbero influire sui carichi di lavoro.

Usare il livello di durabilità Bronze solo per i tipi di nodo che eseguono carichi di lavoro senza stato. Per i carichi di lavoro di produzione, eseguire Silver o versione successiva per garantire la coerenza dello stato. Scegliere il livello di affidabilità appropriato seguendo le indicazioni riportate nella documentazione sulla pianificazione della capacità.

Il livello di durabilità deve essere impostato in due risorse: Uno è il profilo di estensione della risorsa del set di scalabilità di macchine virtuali:

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

L'altra risorsa si trova nodeTypes nella risorsa Microsoft.ServiceFabric/clusters:

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

Passaggi successivi