Partilhar via


Introdução às tags de nó dinâmico

As tags de nó permitem adicionar e remover dinamicamente tags de nós para influenciar o posicionamento dos serviços. A marcação de nó é muito flexível e permite alterações no posicionamento do serviço sem atualizações de aplicativos ou clusters. As tags podem ser adicionadas ou removidas dos nós a qualquer momento, e os serviços podem especificar requisitos para determinadas tags quando elas são criadas. Um serviço também pode ter seus requisitos de tag atualizados dinamicamente enquanto está em execução.

A marcação de nó é semelhante às restrições de posicionamento e normalmente é usada para controlar em quais nós um serviço é executado. Cada serviço do Service Fabric pode ser configurado para exigir que a tag seja colocada ou continue em execução.

A marcação de nó é suportada para todos os tipos de serviço hospedados do Service Fabric (Serviços Confiáveis, Executáveis Convidados e Contêineres). Para usar a marcação de nó, você precisa estar executando a versão 8.0 ou superior do tempo de execução do Service Fabric.

O restante deste artigo descreve maneiras de habilitar ou desabilitar a marcação de nó e fornece exemplos sobre como usar esse recurso.

Descrevendo tags de nó dinâmico

Os serviços podem especificar as tags necessárias. Existem dois tipos de tags:

  • As tags necessárias para o posicionamento descrevem um conjunto de tags, que são necessárias apenas para o posicionamento do serviço. Depois que a réplica é colocada, essas tags podem ser removidas sem interromper o serviço. Se qualquer uma dessas tags for removida do nó, a réplica do serviço continuará funcionando e o Service Fabric não removerá o serviço

  • As tags necessárias para serem executadas descrevem um conjunto de tags, que são necessárias tanto para o posicionamento quanto para a execução do serviço. Se qualquer uma das tags em execução necessárias for removida, o Service Fabric moverá o serviço para outro nó que tenha essas tags especificadas.

Exemplo: As tags de posicionamento necessárias podem ser utilizadas quando você usa algum tipo de serviço de ativador de contêiner, e você precisa desse serviço para que seu contêiner seja colocado e, assim que o contêiner for ativado, você não precisará mais do ativador e poderá remover a tag associada a ele, mas o contêiner deve continuar em execução. As tags necessárias para a execução podem ser usadas quando você tem um serviço de cobrança, que é útil para ser colocado com o serviço voltado para o usuário. Quando o serviço de cobrança falha no nó, você remove a tag associada a ele e o serviço voltado para o usuário é movido para outro nó, que tem o serviço de cobrança e sua tag presentes.

Uma marca ou um conjunto de tags pode ser adicionado, atualizado ou removido de um único nó usando mecanismos de interface padrão do Service Fabric, como APIs C#, APIs REST ou comandos do PowerShell.

Nota

O Service Fabric não mantém distribuições UD/FD ao usar marcas de nó. Por favor, gerencie as tags de nó adequadamente, para que você não obtenha violações FD/UD devido à má distribuição de tags entre domínios.

Ativando tags de nó dinâmico

Para que esse recurso funcione, você precisará habilitar a configuração NodeTaggingEnabled na seção PlacementAndLoadBalancing do manifesto do cluster usando XML ou JSON:

<Section Name="PlacementAndLoadBalancing">
     <Parameter Name="NodeTaggingEnabled" Value="true" />
</Section>

via ClusterConfig.json para implantações autônomas ou Template.json para clusters hospedados do Azure:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "NodeTaggingEnabled",
          "value": "true"
      }
    ]
  }
]

Definindo tags de nó dinâmico

Através do PowerShell

Adicionando tags de nó ao nó:

Add-ServiceFabricNodeTags -NodeName "DB.1" -NodeTags @("SampleTag1", "SampleTag2")

Este comando adicionará tags "SampleTag1" e "SampleTag2" no nó DB.1.

Remova as tags de nó do nó:

Remove-ServiceFabricNodeTags -NodeName "DB.1" -NodeTags @("SampleTag1", "SampleTag2")

Este comando removerá as tags "SampleTag1" e "SampleTag2" no nó DB.1.

Usando APIs C#

Adicionando tags de nó ao nó:

FabricClient fabricClient = new FabricClient();
List<string> nodeTagsList = new List<string>();
nodeTagsList.Add("SampleTag1");
nodeTagsList.Add("SampleTag2");
await fabricClient.ClusterManager.AddNodeTagsAsync("DB.1", nodeTagsList);

Remova as tags de nó do nó:

FabricClient fabricClient = new FabricClient();
List<string> nodeTagsList = new List<string>();
nodeTagsList.Add("SampleTag1");
nodeTagsList.Add("SampleTag2");
await fabricClient.ClusterManager.RemoveNodeTagsAsync("DB.1", nodeTagsList);

Definindo tags necessárias para serviços

Através do PowerShell

Criação de novo serviço:

New-ServiceFabricService -ApplicationName fabric:/HelloWorld -ServiceName fabric:/HelloWorld/svc1 -ServiceTypeName HelloWorldStateful -Stateful -PartitionSchemeSingleton -TargetReplicaSetSize 5 -MinReplicaSetSize 3 -TagsRequiredToRun @("SampleTag1") - TagsRequiredToPlace @("SampleTag2")

Este comando cria um serviço, que requer que "SampleTag2" esteja presente em um nó para que o serviço seja colocado lá, e "SampleTag1" esteja presente para que o serviço continue em execução nesse nó.

Atualizando o serviço existente:

Update-ServiceFabricService -Stateful -ServiceName fabric:/myapp/test -TagsRequiredToRun @("SampleTag1") -TagsRequiredToPlace @("SampleTag2")

Este comando atualiza um serviço, que requer que "SampleTag2" esteja presente em um nó para que o serviço seja colocado lá, e "SampleTag1" esteja presente para que o serviço continue em execução nesse nó.

Usando APIs C#

Criação de novo serviço:

FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
//set up the rest of the ServiceDescription
ServiceTags serviceTags = new ServiceTags();
serviceTags.TagsRequiredToPlace.Add("SampleTag1");
serviceTags.TagsRequiredToRun.Add("SampleTag2");
serviceDescription.ServiceTags = serviceTags;
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

Atualizando o serviço existente:

FabricClient fabricClient = new FabricClient();
StatefulServiceUpdateDescription serviceUpdate = new StatefulServiceUpdateDescription();
ServiceTags serviceTags = new ServiceTags();
serviceTags.TagsRequiredToPlace.Add("SampleTag1");
serviceTags.TagsRequiredToRun.Add("SampleTag2");
serviceUpdate.ServiceTags = serviceTags;
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri("fabric:/AppName/ServiceName"), serviceUpdate);

Todos esses comandos se aplicam igualmente a serviços sem monitoração de estado.

Próximos passos

Saiba mais sobre restrições de posicionamento