Compartilhar via


Implantar um cluster do Microsoft Azure Service Fabric com tipos de nós sem estado

Os tipos de nó do Service Fabric vêm com a pressuposição inerente que, em algum momento, os serviços com estado poderão ser colocados em nós. Os tipos de nó sem estado alteram essa suposição para um tipo de nó, permitindo que o tipo de nó use outros recursos, como operações de escalar horizontalmente mais rápidas, suporte para atualizações automáticas do sistema operacional na durabilidade Bronze e colocação em escala para mais de 100 nós em um único conjunto de dimensionamento de máquinas virtuais.

  • Os tipos de nó primário não podem ser configurados para serem sem estado
  • Os tipos de nó sem estado têm suporte apenas com níveis de durabilidade Bronze
  • Os tipos de nó sem estado têm suporte apenas no Service Fabric Runtime versão 7.1.409 ou superior.

Modelos de exemplo estão disponíveis: Modelos de Tipos de Nó Sem Estado do Service Fabric

Habilitando tipos de nó sem estado no cluster do Service Fabric

Para definir um ou mais tipos de nó como sem estado em um recurso de cluster, defina a propriedade isStateless como true. Ao implantar um cluster do Service Fabric com tipos de nó sem estado, lembre-se de ter pelo menos um tipo de nó primário no recurso de cluster.

  • A apiVersion do recurso de cluster do Service Fabric deve ter a “versão prévia de 01-12-2020” ou superior.
{
    "nodeTypes": [
    {
        "name": "[parameters('vmNodeType0Name')]",
        "applicationPorts": {
            "endPort": "[parameters('nt0applicationEndPort')]",
            "startPort": "[parameters('nt0applicationStartPort')]"
        },
        "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]",
        "durabilityLevel": "Silver",
        "ephemeralPorts": {
            "endPort": "[parameters('nt0ephemeralEndPort')]",
            "startPort": "[parameters('nt0ephemeralStartPort')]"
        },
        "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]",
        "isPrimary": true,
        "isStateless": false, // Primary Node Types cannot be stateless
        "vmInstanceCount": "[parameters('nt0InstanceCount')]"
    },
    {
        "name": "[parameters('vmNodeType1Name')]",
        "applicationPorts": {
            "endPort": "[parameters('nt1applicationEndPort')]",
            "startPort": "[parameters('nt1applicationStartPort')]"
        },
        "clientConnectionEndpointPort": "[parameters('nt1fabricTcpGatewayPort')]",
        "durabilityLevel": "Bronze",
        "ephemeralPorts": {
            "endPort": "[parameters('nt1ephemeralEndPort')]",
            "startPort": "[parameters('nt1ephemeralStartPort')]"
        },
        "httpGatewayEndpointPort": "[parameters('nt1fabricHttpGatewayPort')]",
        "isPrimary": false,
        "isStateless": true,
        "vmInstanceCount": "[parameters('nt1InstanceCount')]"
    }    
    ],
}

Configurando conjunto de dimensionamento de máquinas virtuais para tipos de nó sem estado

Para habilitar tipos de nó sem estado, você deve configurar o recurso de conjunto de dimensionamento de máquinas virtuais subjacente da seguinte maneira:

  • A propriedade de valor singlePlacementGroup precisa ser definida como false, caso você precise escalar sua solução para mais de 100 VMs.
  • O conjunto de dimensionamento do upgradePolicy deve ser definido como Sem interrupção.
  • O modo de atualização sem interrupção requer a extensão de integridade do aplicativo ou investigações de integridade configuradas. Para obter mais detalhes sobre como configurar as investigações de integridade ou a extensão de integridade do aplicativo, consulte estedocumento. Configure a investigação de integridade com a configuração padrão para tipos de nó sem estado, conforme sugerido abaixo. Depois que os aplicativos são implantados no tipo de nó, as portas de extensão de integridade/investigação de integridade podem ser alteradas para monitorar a integridade real do aplicativo.

Observação

Ao usar o dimensionamento automático com tipos de nós Sem Estado, após a operação de reduzir verticalmente, o estado do nó não é limpo automaticamente. Para limpar o NodeState de nós inferiores durante o dimensionamento automático, é recomendável usar o Auxiliar de dimensionamento automático do Service Fabric.

{
    "apiVersion": "2019-03-01",
    "type": "Microsoft.Compute/virtualMachineScaleSets",
    "name": "[parameters('vmNodeType1Name')]",
    "location": "[parameters('computeLocation')]",
    "properties": {
        "overprovision": "[variables('overProvision')]",
        "upgradePolicy": {
          "mode": "Rolling",
          "automaticOSUpgradePolicy": {
            "enableAutomaticOSUpgrade": true
          }
        },
        "platformFaultDomainCount": 5
    },
    "virtualMachineProfile": {
    "extensionProfile": {
    "extensions": [
    {
    "name": "[concat(parameters('vmNodeType1Name'),'_ServiceFabricNode')]",
    "properties": {
        "type": "ServiceFabricNode",
        "autoUpgradeMinorVersion": false,
        "publisher": "Microsoft.Azure.ServiceFabric",
        "settings": {
            "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
            "nodeTypeRef": "[parameters('vmNodeType1Name')]",
            "dataPath": "D:\\\\SvcFab",
            "durabilityLevel": "Bronze",
            "certificate": {
                "thumbprint": "[parameters('certificateThumbprint')]",
                "x509StoreName": "[parameters('certificateStoreValue')]"
            },
            "systemLogUploadSettings": {
                "Enabled": true
            },
        },
        "typeHandlerVersion": "1.1"
    }
    },
    {
        "type": "extensions",
        "name": "HealthExtension",
        "properties": {
            "publisher": "Microsoft.ManagedServices",
            "type": "ApplicationHealthWindows",
            "autoUpgradeMinorVersion": true,
            "typeHandlerVersion": "1.0",
            "settings": {
            "protocol": "tcp",
            "port": "19000"
            }
            }
        },
    ]
}

Configurando tipos de nó sem estado com várias Zonas de Disponibilidade

Para configurar a distribuição de tipos de nó Sem Estado em várias zonas de disponibilidade, siga a documentação aqui, em conjunto com algumas alterações da seguinte maneira:

  • Defina singlePlacementGroup : false se for necessário habilitar vários grupos de posicionamento.
  • Defina upgradePolicy : Sem interrupção e adicione investigações de integridade/extensão de integridade do aplicativo, conforme mencionado acima.
  • Defina platformFaultDomainCount : 5 para o conjunto de dimensionamento de máquinas virtuais.

Para referência, examine o modelo para configurar tipos de nó sem estado com várias Zonas de Disponibilidade

Requisitos de rede

IP público e recurso do Load Balancer

Para habilitar o dimensionamento para mais de 100 VMs em um recurso de conjunto de dimensionamento de máquinas virtuais, o balanceador de carga e o recurso de IP referenciado por esse conjunto de dimensionamento de máquinas virtuais devem estar usando um SKU Standard. Criar um recurso de IP sem a propriedade SKU criará um SKU Básico, que não oferece suporte a dimensionamento para mais de 100 VMs. Um balanceador de carga SKU Standard bloqueará todo o tráfego de fora por padrão; para permitir o tráfego externo, um NSG deve ser implantado na sub-rede.

{
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Network/publicIPAddresses",
    "name": "[concat('LB','-', parameters('clusterName')]",
    "location": "[parameters('computeLocation')]",
    "sku": {
        "name": "Standard"
    }
}
{
    "apiVersion": "2018-11-01",
    "type": "Microsoft.Network/loadBalancers",
    "name": "[concat('LB','-', parameters('clusterName')]", 
    "location": "[parameters('computeLocation')]",
    "dependsOn": [
        "[concat('Microsoft.Network/networkSecurityGroups/', concat('nsg', parameters('subnet0Name')))]"
    ],
    "properties": {
        "addressSpace": {
            "addressPrefixes": [
                "[parameters('addressPrefix')]"
            ]
        },
        "subnets": [
        {
            "name": "[parameters('subnet0Name')]",
            "properties": {
                "addressPrefix": "[parameters('subnet0Prefix')]",
                "networkSecurityGroup": {
                "id": "[resourceId('Microsoft.Network/networkSecurityGroups', concat('nsg', parameters('subnet0Name')))]"
              }
            }
          }
        ]
    },
    "sku": {
        "name": "Standard"
    }
}

Observação

Não é possível fazer uma alteração in-loco do SKU nos recursos de IP público e do balanceador de carga.

Regras NAT dos conjuntos de dimensionamento de máquinas virtuais

As regras nat de entrada do balanceador de carga devem corresponder aos pools NAT do conjunto de dimensionamento de máquinas virtuais. Cada conjunto de dimensionamento de máquinas virtuais deve ter um pool NAT de entrada exclusivo.

{
"inboundNatPools": [
    {
        "name": "LoadBalancerBEAddressNatPool0",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "50999",
            "frontendPortRangeStart": "50000",
            "protocol": "tcp"
        }
    },
    {
        "name": "LoadBalancerBEAddressNatPool1",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "51999",
            "frontendPortRangeStart": "51000",
            "protocol": "tcp"
        }
    },
    {
        "name": "LoadBalancerBEAddressNatPool2",
        "properties": {
            "backendPort": "3389",
            "frontendIPConfiguration": {
                "id": "[variables('lbIPConfig0')]"
            },
            "frontendPortRangeEnd": "52999",
            "frontendPortRangeStart": "52000",
            "protocol": "tcp"
        }
    }
    ]
}

Regras de saída do Standard Load Balancer do SKU

O IP Standard apresenta novas habilidades e comportamentos diferentes para conectividade de saída em comparação com o uso do SKU Básico. Se quiser ter conectividade de saída ao trabalhar com SKUs Standard, você precisará defini-la explicitamente com endereços IP públicos Standard ou com o Load Balancer Standard público. Para obter mais informações, confira Conexões de saída e Standard Load Balancer do Azure.

Observação

O modelo padrão faz referência a um NSG que permite todo o tráfego de saída por padrão. O tráfego de entrada é limitado às portas necessárias para operações de gerenciamento do Service Fabric. As regras do NSG podem ser modificadas para atender às suas necessidades.

Observação

Qualquer cluster do Service Fabric que faz uso de um SLB SKU Standard precisa garantir que cada tipo de nó tenha uma regra que permita o tráfego de saída na porta 443. Isso é necessário para concluir a configuração do cluster e qualquer implantação sem essa regra falhará.

Migrar para usar tipos de nó sem estado em um cluster

Para todos os cenários de migração, um novo tipo de nó somente sem estado precisa ser adicionado. O tipo de nó existente não pode ser migrado para ser apenas sem estado.

Para migrar um cluster que estava usando um IP com um SKU Básico, primeiro você deve criar um recurso de IP totalmente novo usando o SKU Standard. Não é possível atualizar esses recursos in-loco.

O novo LB e o IP devem ser referenciados nos novos tipos de nó sem estado que você gostaria de usar. No exemplo acima, um novo recurso de conjunto de dimensionamento de máquinas virtuais é adicionado para ser usado para tipos de nó sem estado. Esses conjuntos de dimensionamento de máquinas virtuais referenciam o LB e o IP recém-criados e são marcados como tipos de nó sem estado no recurso de cluster do Service Fabric.

Para começar, será necessário adicionar os novos recursos ao modelo do Resource Manager existente. Esses recursos incluem:

  • Um recurso de IP público usando SKU Standard.
  • Um recurso de Load Balancer público usando SKU Standard.
  • Um NSG referenciado pela sub-rede na qual você implanta seus conjuntos de dimensionamento de máquinas virtuais.

Depois que os recursos terminarem de implantar, você poderá começar a desabilitar os nós no tipo de nó que deseja remover do cluster original.

Próximas etapas