Partilhar via


Planeamento de capacidade e dimensionamento no Azure Service Fabric

Antes de criar qualquer cluster do Azure Service Fabric ou dimensionar recursos de computação que hospedam seu cluster, é importante planejar a capacidade. Para obter mais informações sobre como planejar a capacidade, consulte Planejando a capacidade do cluster do Service Fabric. Para obter mais orientações de práticas recomendadas para escalabilidade de cluster, consulte Considerações sobre escalabilidade do Service Fabric.

Além de considerar o tipo de nó e as características do cluster, você deve esperar que as operações de dimensionamento levem mais de uma hora para serem concluídas em um ambiente de produção. Essa consideração é verdadeira independentemente do número de VMs que você está adicionando.

Dimensionamento automático

Você deve executar operações de dimensionamento por meio de modelos do Azure Resource Manager, porque é a prática recomendada tratar as configurações de recursos como código.

O uso do dimensionamento automático por meio de conjuntos de dimensionamento de máquina virtual fará com que seu modelo do Gerenciador de Recursos versionado defina incorretamente suas contagens de instâncias para conjuntos de dimensionamento de máquina virtual. A definição imprecisa aumenta o risco de que implantações futuras causem operações de dimensionamento não intencionais. Em geral, você deve usar o dimensionamento automático se:

  • A implantação de seus modelos do Gerenciador de Recursos com a capacidade apropriada declarada não oferece suporte ao seu caso de uso.

    Além do dimensionamento manual, você pode configurar um pipeline de integração e entrega contínua nos Serviços de DevOps do Azure usando projetos de implantação de grupo de recursos do Azure. Esse pipeline geralmente é acionado por um aplicativo lógico que usa métricas de desempenho de máquina virtual consultadas da API REST do Azure Monitor. O pipeline é dimensionado automaticamente com base em quaisquer métricas desejadas, enquanto otimiza para modelos do Resource Manager.

  • Você precisa dimensionar horizontalmente apenas um nó de conjunto de escala de máquina virtual de cada vez.

    Para expandir em três ou mais nós de cada vez, você deve expandir um cluster do Service Fabric adicionando um conjunto de dimensionamento de máquina virtual. É mais seguro dimensionar e dimensionar conjuntos de dimensionamento de máquinas virtuais horizontalmente, um nó de cada vez.

  • Você tem confiabilidade Silver ou superior para seu cluster do Service Fabric e durabilidade Silver ou superior em qualquer escala em que configure regras de dimensionamento automático.

    A capacidade mínima para regras de dimensionamento automático deve ser igual ou maior que cinco instâncias de máquina virtual. Ele também deve ser igual ou maior do que o seu nível de confiabilidade mínimo para o tipo de nó principal.

Nota

A malha de serviço com estado do Service Fabric:/System/InfrastructureService/<NODE_TYPE_NAME> é executada em todos os tipos de nó com durabilidade Silver ou superior. É o único serviço do sistema com suporte para execução no Azure em qualquer um dos tipos de nó de clusters.

Importante

O dimensionamento automático do Service Fabric oferece suporte Default e NewestVM as configurações de dimensionamento do conjunto de dimensionamento da máquina virtual.

Considerações sobre dimensionamento vertical

O dimensionamento vertical de um tipo de nó no Azure Service Fabric requer várias etapas e considerações. Por exemplo:

  • O cluster deve estar íntegro antes do dimensionamento. Caso contrário, você desestabilizará ainda mais o cluster.
  • O nível de durabilidade prata ou superior é necessário para todos os tipos de nó de cluster do Service Fabric que hospedam serviços com monitoração de estado.

Nota

O tipo de nó principal que hospeda serviços do sistema Service Fabric com monitoração de estado deve ter um nível de durabilidade Silver ou superior. Depois de habilitar a durabilidade Silver, as operações de cluster, como atualizações, adição ou remoção de nós e assim por diante, serão mais lentas porque o sistema otimiza a segurança dos dados em relação à velocidade das operações.

O dimensionamento vertical de uma escala de máquina virtual definida simplesmente alterando sua SKU de recurso é uma operação destrutiva, porque recria imagens de seus hosts, removendo assim todo o estado persistente localmente. Em vez disso, você desejará dimensionar horizontalmente seu cluster adicionando um novo conjunto de escala com a SKU desejada e, em seguida, migrar seus serviços para o novo conjunto de escala para concluir uma operação segura de dimensionamento vertical.

Seu cluster usa propriedades de nó do Service Fabric e restrições de posicionamento para decidir onde hospedar os serviços do aplicativo. Ao dimensionar verticalmente um tipo de nó primário, você implantará um segundo tipo de nó primário e, em seguida, definirá ("isPrimary": false) no tipo de nó primário original e prosseguirá para desabilitar seus nós e remover seu conjunto de escala e seus recursos relacionados. Para obter detalhes, consulte Dimensionar um tipo de nó primário de cluster do Service Fabric.

Nota

Sempre valide operações em ambientes de teste antes de tentar alterações no ambiente de produção. Por padrão, os serviços do sistema de cluster do Service Fabric têm uma restrição de posicionamento apenas para o tipo de nó primário de destino.

Com as propriedades do nó e as restrições de posicionamento declaradas, execute as etapas a seguir uma instância de VM de cada vez. Isso permite que os serviços do sistema (e seus serviços com monitoração de estado) sejam desligados normalmente na instância da VM que você está removendo à medida que novas réplicas são criadas em outro lugar.

  1. No PowerShell, execute Disable-ServiceFabricNode com a intenção RemoveNode de desabilitar o nó que você vai remover. Remova o tipo de nó que tem o número mais alto. Por exemplo, se você tiver um cluster de seis nós, remova a instância de máquina virtual "MyNodeType_5".
  2. Execute Get-ServiceFabricNode para certificar-se de que o nó transitou para desativado. Caso contrário, aguarde até que o nó seja desativado. Isso pode levar algumas horas para cada nó. Não prossiga até que o nó tenha transitado para desativado.
  3. Diminua o número de VMs em uma nesse tipo de nó. A instância de VM mais alta será removida.
  4. Repita as etapas 1 a 3 conforme necessário, mas nunca dimensione o número de instâncias nos tipos de nó primário abaixo do que a camada de confiabilidade garante. Consulte Planejando a capacidade de cluster do Service Fabric para obter uma lista de instâncias recomendadas.
  5. Quando todas as VMs desaparecerem (representadas como "Inativas"), a malha:/System/InfrastructureService/[nome do nó] mostrará um estado de erro. Em seguida, você pode atualizar o recurso de cluster para remover o tipo de nó. Você pode usar a implantação do modelo ARM ou editar o recurso de cluster por meio do gerenciador de recursos do Azure. Isso iniciará uma atualização de cluster que removerá o serviço mal:/System/InfrastructureService/[node type] que está em estado de erro.
  6. Depois disso, você pode, opcionalmente, excluir o VMScaleSet, você ainda verá os nós como "Inativos" da exibição do Service Fabric Explorer. O último passo seria limpá-los com Remove-ServiceFabricNodeState comando.

Dimensionamento horizontal

Você pode fazer o dimensionamento horizontal manualmente ou programaticamente.

Nota

Se você estiver dimensionando um tipo de nó com durabilidade Silver ou Gold, o dimensionamento será lento.

Aumentar horizontalmente

Dimensione um cluster do Service Fabric aumentando a contagem de instâncias para um determinado conjunto de dimensionamento de máquina virtual. Você pode expandir programaticamente usando AzureClient e o ID para a escala desejada definido para aumentar a capacidade.

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

Para dimensionar manualmente, atualize a capacidade na propriedade SKU do recurso de conjunto de escala de máquina virtual desejado.

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

Escalonamento em

A expansão requer mais consideração do que a expansão. Por exemplo:

  • Os serviços do sistema Service Fabric são executados no tipo de nó primário do cluster. Nunca desligue ou dimensione o número de instâncias para esse tipo de nó para que você tenha menos instâncias do que o que a camada de confiabilidade garante.
  • Para um serviço com monitoração de estado, você precisa de um certo número de nós que estão sempre ativos para manter a disponibilidade e preservar o estado do seu serviço. No mínimo, você precisa de um número de nós igual à contagem do conjunto de réplicas de destino da partição ou serviço.

Para dimensionar manualmente, siga estas etapas:

  1. No PowerShell, execute Disable-ServiceFabricNode com a intenção RemoveNode de desabilitar o nó que você vai remover. Remova o tipo de nó que tem o número mais alto. Por exemplo, se você tiver um cluster de seis nós, remova a instância de máquina virtual "MyNodeType_5".
  2. Execute Get-ServiceFabricNode para certificar-se de que o nó transitou para desativado. Caso contrário, aguarde até que o nó seja desativado. Isso pode levar algumas horas para cada nó. Não prossiga até que o nó tenha transitado para desativado.
  3. Diminua o número de VMs em uma nesse tipo de nó. A instância de VM mais alta será removida.
  4. Repita as etapas 1 a 3, conforme necessário, até provisionar a capacidade desejada. Não dimensione o número de instâncias nos tipos de nó primário para menos do que o nível de confiabilidade garante. Consulte Planejando a capacidade de cluster do Service Fabric para obter uma lista de instâncias recomendadas.

Para dimensionar manualmente, atualize a capacidade na propriedade SKU do recurso de conjunto de escala de máquina virtual desejado.

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

Você deve preparar o nó para o desligamento para ser dimensionado programaticamente. Encontre o nó a ser removido (o nó de instância mais alta). Por exemplo:

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

Desative e remova o nó usando a mesma FabricClient instância (client neste caso) e a mesma instância do nó (instanceIdString neste caso) que você usou no código anterior:

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

Ao dimensionar em um cluster, você verá a instância de nó/VM removida exibida em um estado não íntegro no Service Fabric Explorer. Para obter uma explicação desse comportamento, consulte Comportamentos que você pode observar no Service Fabric Explorer. Pode:

  • Chame o comando Remove-ServiceFabricNodeState com o nome do nó apropriado.
  • Implante o aplicativo auxiliar de dimensionamento automático do Service Fabric em seu cluster. Esse aplicativo garante que os nós reduzidos sejam limpos do Service Fabric Explorer.

Níveis de fiabilidade

O nível de confiabilidade é uma propriedade do seu recurso de cluster do Service Fabric. Ele não pode ser configurado de forma diferente para tipos de nó individuais. Ele controla o fator de replicação dos serviços do sistema para o cluster e é uma configuração no nível de recurso do cluster.

O nível de confiabilidade determinará o número mínimo de nós que seu tipo de nó principal deve ter. A camada de confiabilidade pode ter os seguintes valores:

  • Platinum: Executa os serviços do sistema com uma contagem de conjuntos de réplicas de destino de sete e nove nós semente.
  • Gold: Executa os serviços do sistema com uma contagem de conjuntos de réplicas de destino de sete e sete nós semente.
  • Prata: executa os serviços do sistema com uma contagem de conjuntos de réplicas de destino de cinco e cinco nós semente.
  • Bronze: Executa os serviços do sistema com uma contagem de conjuntos de réplicas de destino de três e três nós semente.

O nível mínimo de fiabilidade recomendado é Silver.

O nível de confiabilidade é definido na seção de propriedades do recurso Microsoft.ServiceFabric/clusters, da seguinte forma:

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

Níveis de durabilidade

Aviso

Os tipos de nós executados com durabilidade Bronze não obtêm privilégios. Os trabalhos de infraestrutura que afetam suas cargas de trabalho sem monitoração de estado não serão interrompidos ou atrasados, o que pode afetar suas cargas de trabalho.

Use a durabilidade Bronze apenas para tipos de nó que executam cargas de trabalho sem monitoração de estado. Para cargas de trabalho de produção, execute Silver ou superior para garantir a consistência do estado. Escolha a confiabilidade certa com base nas orientações na documentação de planejamento de capacidade.

O nível de durabilidade deve ser fixado em dois recursos. Um é o perfil de extensão do recurso de conjunto de escala de máquina virtual:

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

O outro recurso está no nodeTypesrecurso Microsoft.ServiceFabric/clusters:

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

Próximos passos