Partilhar via


Limitando a modulação das réplicas do InBuild por cada nó

As réplicas de serviços stateful passam por várias fases durante o seu ciclo de vida: estados InBuild, Ready, Closing e Dropped. Somente réplicas nos estados Pronto e Fechamento podem declarar carga padrão ou dinâmica. As réplicas no estado Descartadas são irrelevantes em termos de utilização de recursos. A utilização de recursos de réplicas do InBuild (IB) é específica, portanto, o Cluster Resource Manager fornece mais suporte para lidar com essa utilização. Como as réplicas IB não podem relatar carga dinâmica e a sua utilização de recursos pode ser maior do que a das réplicas menos utilizadas no estado Pronto, especialmente para métricas relacionadas à E/S e à memória, o CRM permite limitar o número de compilações simultâneas por nó.

O CRM fornece suporte para limitar o número de réplicas de IB que pode haver por nó. Os limites podem ser definidos de duas formas:

  • Por tipo de nós
  • Para todos os nós que satisfazem a restrição de posicionamento

Dependendo da prioridade de restrição, de acordo com as regras gerais sobre priorização de restrição, o CRM interrompe movimentos e criações de réplicas em um nó se as ações violarem o limite de IB definido para esse nó. A restrição bloqueia apenas operações que podem causar alto consumo de E/S e memória durante a fase InBuild, especialmente ao replicar extensivamente o contexto de outras réplicas ativas.

Movimentos de qualquer tipo e promoção de réplicas StandBy são operações restritas que causam replicação de estado e utilização extensa de recursos durante a fase InBuild. Por outro lado, a promoção de uma réplica secundária ativa para réplica primária não é uma operação problemática, portanto, a restrição bloqueia essas operações. Durante a promoção de uma réplica secundária, o estado da réplica é up-tocom a réplica primária, eliminando a necessidade de replicação extra.

Observação

A promoção de réplicas em espera pode ser bloqueada devido à limitação de réplicas do InBuild por nó. A transição de réplicas em espera para réplicas prontas pode causar uma utilização extensiva de E/S e memória, dependendo da quantidade de contexto que precisa ser replicada a partir de réplicas ativas. Assim, ignorar as promoções de réplicas em espera pode causar problemas que a restrição de limitação de réplicas do InBuild por nó visa resolver.

Configurando as réplicas do InBuild por limitação de nó

Habilitar réplicas do InBuild por limitação de nó para ação

Há três categorias diferentes de ações que o Gerenciador de Recursos de Cluster executa:

  • Posicionamento: controla o posicionamento de réplicas ausentes, orquestra trocas durante upgrades e remove réplicas extras.
  • Verificação de restrição: impõe regras.
  • Balanceamento: executa ações que reduzem o desequilíbrio da utilização total do nó em um cluster.

O Cluster Resource Manager permite ativar/desativar a limitação de réplicas IB por nó para cada categoria. As configurações que controlam se a limitação está ativa para ações específicas são ThrottlePlacementPhase, ThrottleConstraintCheckPhase e ThrottleBalancingPhase, respectivamente. O valor especificado para essas configurações é booleano. A seção de manifesto do cluster que define explicitamente essas configurações é fornecida:

<Section Name="PlacementAndLoadBalancing">
    <Parameter Name="ThrottlePlacementPhase" Value="true">
    <Parameter Name="ThrottleConstraintCheckPhase" Value="true">
    <Parameter Name="ThrottleBalancingPhase" Value="true">
</Section>

Veja um exemplo de configurações que habilitam a limitação de réplicas IB por nó, definidas por meio de ClusterConfig.json para implantações autônomas ou Template.json para clusters hospedados no Azure:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "ThrottlePlacementPhase",
          "value": "true"
      },
      {
          "name": "ThrottleConstraintCheckPhase",
          "value": "true"
      },
      {
          "name": "ThrottleBalancingPhase",
          "value": "true"
      }
    ]
  }
]

Configurar réplicas do InBuild por limites de nó

O Cluster Resource Manager permite definir limites de IB globalmente e para cada categoria de ações:

  • MaximumInBuildReplicasPerNode: define limites de IB globalmente. Estes limites são utilizados para avaliar o limite final de IB para cada categoria.
  • MaximumInBuildReplicasPerNodePlacementThrottle: define limites de IB para a categoria de posicionamento. Esses limites são usados para avaliar o limite final de IB apenas para a categoria de colocação.
  • MaximumInBuildReplicasPerNodeConstraintCheckThrottle: define limites de IB para a categoria de verificação de restrição. Estes limites são utilizados apenas para avaliar o limite final de IB na categoria de verificação de restrição.
  • MaximumInBuildReplicasPerNodeBalancingThrottle: define limites de IB para a categoria de balanceamento. Estes limites são utilizados para avaliar o limite final do IB apenas para a categoria de compensação.

Para cada opção, o Cluster Resource Manager fornece duas opções para definir o limite de réplicas IB:

  • Estabeleça o limite de IB para todos os nós de um único tipo de nó.
  • Defina o limite de IB para todos os nós com uma restrição de posicionamento correspondente.

Essas regras permitem que você defina vários valores para uma única categoria, e o CRM sempre respeita o limite mais estrito que você forneceu. O limite para cada nó em uma fase específica é o menor valor de acordo com o tipo de nó ou qualquer propriedade de posicionamento que corresponda a esse nó, tanto para limites globais quanto para limites de categoria. Se o limite para uma categoria de ação para um nó específico não estiver definido, o CRM assume que não há um limite superior para a contagem de réplicas IB de um nó.

As seções de manifesto do cluster que definem explicitamente os limites para cada fase são fornecidas:

<Section Name="MaximumInBuildReplicasPerNode">
    <Parameter Name="NodeTypeA" Value="10" />
    <Parameter Name="NodeTypeB" Value="20" />
    <Parameter Name="NodeTypeName == NodeTypeA || NodeTypeName == NodeTypeC" Value="15" />
</Section>

<Section Name="MaximumInBuildReplicasPerNodePlacementThrottle">
    <Parameter Name="NodeTypeC" Value="20" />
</Section>

<Section Name="MaximumInBuildReplicasPerNodeConstraintCheckThrottle">
    <Parameter Name="NodeTypeD" Value="10" />
    <Parameter Name="Color == Blue" Value="8" />
</Section>

<Section Name="MaximumInBuildReplicasPerNodeBalancingThrottle">
    <Parameter Name="Color == Red" Value="25" />
</Section>

Aqui está um exemplo dos mesmos limites de IB definidos via ClusterConfig.json para implantações autônomas ou Template.json para clusters hospedados no Azure:

"fabricSettings": [
  {
    "name": "MaximumInBuildReplicasPerNode",
    "parameters": [
      {
          "name": "NodeTypeA",
          "value": "10"
      },
      {
          "name": "NodeTypeB",
          "value": "20"
      },
      {
          "name": "NodeTypeName == NodeTypeA || NodeTypeName == NodeTypeC",
          "value": "15"
      }
    ]
  },
  {
    "name": "MaximumInBuildReplicasPerNodePlacementThrottle",
    "parameters": [
      {
          "name": "NodeTypeC",
          "value": "20"
      }
    ]
  },
  {
    "name": "MaximumInBuildReplicasPerNodeConstraintCheckThrottle",
    "parameters": [
      {
          "name": "NodeTypeD",
          "value": "10"
      },
      {
          "name": "Color == Blue",
          "value": "8"
      }
    ]
  },
  {
    "name": "MaximumInBuildReplicasPerNodeBalancingThrottle",
    "parameters": [
      {
          "name": "Color == Red",
          "value": "25"
      }
    ]
  }
]

Próximos passos