Como remover um tipo de nó do Service Fabric

Este artigo descreve como dimensionar um cluster do Azure Service Fabric ao remover um tipo de nó existente de um cluster. Um cluster do Service Fabric é um conjunto ligado à rede de máquinas virtuais ou físicas no qual os seus microsserviços são implementados e geridos. Uma máquina ou VM que faz parte de um cluster é denominada nó. Os conjuntos de dimensionamento de máquinas virtuais são um recurso de computação do Azure que utiliza para implementar e gerir uma coleção de máquinas virtuais como um conjunto. Cada tipo de nó definido num cluster do Azure é configurado como um conjunto de dimensionamento separado. Em seguida, cada tipo de nó pode ser gerido separadamente. Depois de criar um cluster do Service Fabric, pode dimensionar um cluster horizontalmente ao remover um tipo de nó (conjunto de dimensionamento de máquinas virtuais) e todos os nós. Pode dimensionar o cluster em qualquer altura, mesmo quando as cargas de trabalho estão em execução no cluster. À medida que o cluster é dimensionado, as suas aplicações também são dimensionadas automaticamente.

Aviso

A utilização desta abordagem para remover um tipo de nó de um cluster de produção não é recomendada para ser utilizada com frequência. É um comando perigoso, uma vez que elimina o recurso do conjunto de dimensionamento de máquinas virtuais por trás do tipo de nó.

Características de durabilidade

A segurança é priorizada em comparação com a velocidade ao utilizar Remove-AzServiceFabricNodeType. O tipo de nó tem de ser o nível de durabilidade Silver ou Gold, porque:

  • O Bronze não lhe dá quaisquer garantias sobre como guardar informações de estado.
  • A durabilidade Silver e Gold intercetam quaisquer alterações ao conjunto de dimensionamento.
  • O Gold também lhe dá controlo sobre as atualizações do Azure por baixo do conjunto de dimensionamento.

O Service Fabric "orquestra" as alterações e atualizações subjacentes para que os dados não sejam perdidos. No entanto, quando remove um tipo de nó com durabilidade Bronze, pode perder informações de estado. Se estiver a remover um tipo de nó primário e a sua aplicação não tiver monitorização de estado, o Bronze é aceitável. Quando executa cargas de trabalho com monitorização de estado na produção, a configuração mínima deve ser Silver. Da mesma forma, para cenários de produção, o tipo de nó principal deve ser sempre Silver ou Gold.

Mais sobre durabilidade de Bronze

Ao remover um tipo de nó que seja Bronze, todos os nós no tipo de nó ficam imediatamente inativos. O Service Fabric não interceta quaisquer atualizações do conjunto de dimensionamento de nós Bronze, pelo que todas as VMs ficam imediatamente inativas. Se tiver algo com monitorização de estado nesses nós, os dados serão perdidos. Agora, mesmo que não tenha estado, todos os nós do Service Fabric participam no anel, pelo que um bairro inteiro pode perder-se, o que pode desestabilizar o próprio cluster.

Remover um tipo de nó

  1. Trate destes pré-requisitos antes de iniciar o processo.

    • O cluster está em bom estado de funcionamento.
    • Continuará a existir capacidade suficiente depois de o tipo de nó ser removido, por exemplo, número de nós para colocar a contagem de réplicas necessária.
  2. Mova todos os serviços com restrições de colocação para utilizar o tipo de nó fora do tipo de nó.

    • Modifique o Manifesto de Aplicação/Serviço para deixar de referenciar o tipo de nó.
    • Implemente a alteração.

    Em seguida, valide que:

    • Todos os serviços modificados acima já não estão em execução no Nó pertencente ao tipo de nó.
    • Todos os serviços estão em bom estado de funcionamento.
  3. Desmarcar o tipo de nó como não primário (Ignorar para tipos de nós não primários)

    • Localize o modelo de Resource Manager do Azure utilizado para a implementação.
    • Localize a secção relacionada com o tipo de nó na secção Service Fabric.
    • Altere a propriedade éPrimary para false. ** Não remova a secção relacionada com o tipo de nó nesta tarefa.
    • Implemente o modelo de Resource Manager do Azure modificado. ** Consoante a configuração do cluster, este passo pode demorar algum tempo.

    Em seguida, valide que:

    • A Secção do Service Fabric no Portal indica que o cluster está pronto.
    • O cluster está em bom estado de funcionamento.
    • Nenhum dos nós pertencentes ao tipo de nó está marcado como Nó de Seed.
  4. Desative cada nó no tipo de nó.

    Ligue-se ao cluster com o PowerShell e, em seguida, execute o passo seguinte.

    $nodeType = "" # specify the name of node type
    $nodes = Get-ServiceFabricNode
    
    foreach($node in $nodes)
    {
      if ($node.NodeType -eq $nodeType)
      {
        $node.NodeName
    
        Disable-ServiceFabricNode -Intent RemoveNode -NodeName $node.NodeName -Force
      }
    }
    
    • Para a durabilidade bronze, aguarde que todos os nós entrem no estado desativado
    • Para durabilidade de prata e ouro, alguns nós entram para desativado e o resto estará em estado de desativação. Verifique o separador de detalhes dos nós no estado de desativação. Se estiverem todos bloqueados para garantir o quórum para partições do serviço Infraestrutura, é seguro continuar.
  5. Pare os dados do tipo de nó.

    Ligue-se ao cluster com o PowerShell e, em seguida, execute o passo seguinte.

    foreach($node in $nodes)
    {
      if ($node.NodeType -eq $nodeType)
      {
        $node.NodeName
    
        Start-ServiceFabricNodeTransition -Stop -OperationId (New-Guid) -NodeInstanceId $node.NodeInstanceId -NodeName $node.NodeName -StopDurationInSeconds 10000
      }
    }
    

    Aguarde até que todos os nós do tipo de nó estejam marcados como Baixo.

  6. Desalocar nós no Conjunto de Dimensionamento de Máquinas Virtuais original

    Inicie sessão na subscrição do Azure onde o conjunto de dimensionamento foi implementado e remova o Conjunto de Dimensionamento de Máquinas Virtuais.

    $scaleSetName="myscaleset"
    $scaleSetResourceType="Microsoft.Compute/virtualMachineScaleSets"
    
    Remove-AzResource -ResourceName $scaleSetName -ResourceType $scaleSetResourceType -ResourceGroupName $resourceGroupName -Force
    
  7. Remova os dados do tipo de nó.

    Ligue-se ao cluster com o PowerShell e, em seguida, execute o passo seguinte.

    foreach($node in $nodes)
    {
      if ($node.NodeType -eq $nodeType)
      {
        $node.NodeName
    
        Remove-ServiceFabricNodeState -NodeName $node.NodeName -Force
      }
    }
    

    Aguarde até que todos os nós sejam removidos do cluster. Os nós não devem ser apresentados no SFX.

  8. Remova o tipo de nó da secção Do Service Fabric.

    • Localize o modelo de Resource Manager do Azure utilizado para a implementação.
    • Localize a secção relacionada com o tipo de nó na secção Service Fabric.
    • Remova a secção correspondente ao tipo de nó.
    • Apenas para clusters silver e de maior durabilidade, atualize o recurso do cluster no modelo e configure políticas de estado de funcionamento para ignorar recursos de infraestrutura:/Estado de funcionamento da aplicação do sistema ao adicionar applicationDeltaHealthPolicies em recurso properties de cluster, conforme indicado abaixo. A política abaixo deve ignorar erros existentes, mas não permitir novos erros de estado de funcionamento.
    "upgradeDescription":  
    { 
     "forceRestart": false, 
     "upgradeReplicaSetCheckTimeout": "10675199.02:48:05.4775807", 
     "healthCheckWaitDuration": "00:05:00", 
     "healthCheckStableDuration": "00:05:00", 
     "healthCheckRetryTimeout": "00:45:00", 
     "upgradeTimeout": "12:00:00", 
     "upgradeDomainTimeout": "02:00:00", 
     "healthPolicy": { 
       "maxPercentUnhealthyNodes": 100, 
       "maxPercentUnhealthyApplications": 100 
     }, 
     "deltaHealthPolicy":  
     { 
       "maxPercentDeltaUnhealthyNodes": 0, 
       "maxPercentUpgradeDomainDeltaUnhealthyNodes": 0, 
       "maxPercentDeltaUnhealthyApplications": 0, 
       "applicationDeltaHealthPolicies":  
       { 
           "fabric:/System":  
           { 
               "defaultServiceTypeDeltaHealthPolicy":  
               { 
                       "maxPercentDeltaUnhealthyServices": 0 
               } 
           } 
       } 
     } 
    },
    
    • Implemente o modelo de Resource Manager do Azure modificado. ** Este passo demora um pouco, normalmente, até duas horas. Esta atualização altera as definições para InfrastructureService, pelo que é necessário reiniciar o nó. Neste caso, forceRestart é ignorado. O parâmetro upgradeReplicaSetCheckTimeout especifica o tempo máximo durante o qual o Service Fabric aguarda que uma partição esteja num estado seguro, se ainda não estiver num estado seguro. Assim que as verificações de segurança passarem para todas as partições num nó, o Service Fabric avança com a atualização nesse nó. O valor do parâmetro upgradeTimeout pode ser reduzido para 6 horas, mas, para uma segurança máxima, devem ser utilizadas 12 horas.

    Em seguida, valide que:

    • O Recurso do Service Fabric no portal mostra pronto.
  9. Remova todas as referências aos recursos relacionados com o tipo de nó do modelo do ARM.

    • Localize o modelo de Resource Manager do Azure utilizado para a implementação.
    • Remova o conjunto de dimensionamento de máquinas virtuais e outros recursos relacionados com o tipo de nó do modelo.
    • Implemente as alterações.

    Em seguida:

    • Aguarde pela conclusão da implementação.
  10. Remova os recursos relacionados com o tipo de nó que já não estão a ser utilizados. Exemplo Balanceador de Carga e IP Público.

    • Para remover estes recursos, pode utilizar o mesmo comando do PowerShell utilizado no passo 6, especificando o tipo de recurso específico e a versão da API.
    • Para a durabilidade silver e gold, qualquer tarefa de reparação deixada no cluster, que tem como destino qualquer um dos nós que estavam presentes no tipo de nó que foi removido, deve ser concluída com o comando :
       Complete-ServiceFabricRepairTask -TaskId <repair task name>
    

Nota

Este passo é opcional se o mesmo Balanceador de Carga e o IP for reutilizado entre tipos de nós.

Passos seguintes