Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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