Partilhar via


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

Os tipos de nó do Service Fabric vêm com a suposição inerente de que, em algum momento, os serviços com monitoração de estado podem ser colocados nos 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 expansão mais rápidas, suporte para atualizações automáticas do sistema operacional na durabilidade Bronze e dimensionamento para mais de 100 nós em um único conjunto de escala de máquina virtual.

  • Os tipos de nó primário não podem ser configurados para serem sem monitoração de estado
  • Os tipos de nó sem estado só são suportados com Níveis de Durabilidade Bronze
  • Os tipos de nó sem estado só são suportados no Service Fabric Runtime versão 7.1.409 ou superior.

Modelos de exemplo estão disponíveis: modelo 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 stateless em um recurso de cluster, defina a propriedade isStateless como true. Ao implantar um cluster do Service Fabric com tipos de nó sem monitoração de estado, lembre-se de ter pelo menos um tipo de nó primário no recurso de cluster.

  • O recurso de cluster do Service Fabric apiVersion deve ser "2020-12-01-preview" 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 o conjunto de dimensionamento de máquina virtual para tipos de nó sem estado

Para habilitar tipos de nó sem monitoração de estado, você deve configurar o recurso de conjunto de escala de máquina virtual subjacente da seguinte maneira:

  • O valor propriedade singlePlacementGroup , que deve ser definido como false se você precisar dimensionar para mais de 100 VMs.
  • A upgradePolicy do conjunto de escala deve ser definida como Rolling.
  • O Modo de Atualização Contínua requer a Extensão de Integridade do Aplicativo ou sondas de Integridade configuradas. Para obter mais detalhes sobre como configurar os testes de integridade ou a extensão de integridade do aplicativo, consulte este documento. 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 Health Probe/Health podem ser alteradas para monitorar a integridade real do aplicativo.

Nota

Ao usar o AutoScaling com tipos de nó sem estado, após a operação de redução de escala, o estado do nó não é limpo automaticamente. Para limpar o NodeState dos nós inativos durante o AutoScale, é aconselhável usar o Service Fabric AutoScale Helper .

{
    "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 o tipo de nó sem estado abrangendo várias zonas de disponibilidade, siga a documentação aqui, juntamente com as poucas alterações da seguinte maneira:

  • Definir singlePlacementGroup : false se for necessário habilitar vários grupos de posicionamento.
  • Definir upgradePolicy : Rolando e adicionando Application Health Extension/Health Probes como mencionado acima.
  • Defina platformFaultDomainCount : 5 para o conjunto de escala da máquina virtual.

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 de balanceador de carga

Para habilitar o dimensionamento para mais de 100 VMs em um recurso de conjunto de escala de máquina virtual, o balanceador de carga e o recurso IP referenciado por esse conjunto de escala de máquina virtual devem estar usando uma SKU Padrão . Criar um recurso IP sem a propriedade SKU criará uma SKU básica, que não suporta dimensionamento para mais de 100 VMs. Um balanceador de carga SKU padrão bloqueia todo o tráfego externo 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"
    }
}

Nota

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

Dimensionamento de máquina virtual definir regras NAT

As regras NAT de entrada do balanceador de carga devem corresponder aos pools de NAT do conjunto de escala da máquina virtual. Cada conjunto de escala de máquina virtual deve ter um pool de 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 padrão do SKU Load Balancer

O IP público padrão introduz novas habilidades e comportamentos diferentes para a conectividade de saída quando comparado ao uso do SKU básico. Se desejar conectividade de saída ao trabalhar com SKUs padrão, você deve defini-la explicitamente com endereços IP públicos padrão ou com o balanceador de carga público padrão. Para obter mais informações, consulte Conexões de saída e Azure Standard Load Balancer.

Nota

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 as operações de gerenciamento do Service Fabric. As regras do NSG podem ser modificadas para atender às suas necessidades.

Nota

Qualquer cluster do Service Fabric que use um SLB de SKU padrão 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 o uso de 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 somente sem estado.

Para migrar um cluster, que estava usando um IP com uma SKU básica, você deve primeiro criar um recurso IP totalmente novo usando a SKU padrão. Não é possível atualizar estes recursos no local.

O novo LB e IP devem ser referenciados nos novos tipos de nó sem estado que você gostaria de usar. No exemplo acima, um novo conjunto de recursos de escala de máquina virtual é adicionado para ser usado para tipos de nó sem estado. Esses conjuntos de dimensionamento de máquina virtual fazem referência ao LB e ao IP recém-criados e são marcados como tipos de nó sem estado no Recurso de Cluster do Service Fabric.

Para começar, você precisará adicionar os novos recursos ao seu modelo existente do Gerenciador de Recursos. Esses recursos incluem:

  • Um recurso IP público usando SKU padrão.
  • Um recurso de balanceador de carga usando SKU padrão.
  • Um NSG referenciado pela sub-rede na qual você implanta seus conjuntos de dimensionamento de máquina virtual.

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

Próximos passos