Поделиться через


Развертывание кластера Azure Service Fabric с безгосударственными типами узлов

Типы узлов Service Fabric изначально предполагают, что в какой-то момент на узлах могут быть размещены службы с отслеживанием состояния. Типы узлов без отслеживания состояния меняют это предположение для типа узла, позволяя тем самым типу узла использовать другие функции, такие как более быстрые операции масштабирования, поддержку автоматического обновления ОС на бронзовом уровне устойчивости и масштабирование до более чем 100 узлов в одном масштабируемом наборе виртуальных машин.

  • Типы основных узлов не могут быть настроены как без отслеживания состояния
  • Типы узлов без отслеживания состояния поддерживаются только с бронзовыми уровнями устойчивости.
  • Типы узлов без отслеживания состояния поддерживаются только в среде выполнения Service Fabric версии 7.1.409 и выше.

Примеры шаблонов доступны: шаблон Service Fabric для безгосударственных типов узлов.

Включение типов узлов без отслеживания состояния в кластере Service Fabric

Чтобы задать один или несколько типов узлов как не сохраняющих состояние в ресурсе кластера, установите для свойства isStateless значение true. При развертывании кластера Service Fabric со статическими типами узлов не забывайте, что в ресурсе кластера должен быть как минимум один тип узла, выступающий в качестве основного.

  • Значением apiVersion для ресурса кластера Service Fabric должно быть "2020-12-01-preview" или выше.
{
    "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')]"
    }    
    ],
}

Настройка масштабируемого набора виртуальных машин для типов узлов без отслеживания состояния

Чтобы включить типы узлов без отслеживания состояния, необходимо настроить базовый ресурс масштабируемого набора виртуальных машин следующим образом.

  • Свойство singlePlacementGroup должно иметь значение false, если требуется масштабировать боле 100 виртуальных машин.
  • Для параметра upgradePolicy масштабируемого набора нужно установить значение Rolling.
  • Для режима обновления Rolling требуется настроить расширение для проверки работоспособности приложения или датчики работоспособности. Дополнительные сведения о настройке проб работоспособности или расширения состояния приложения можно найти в doc. Настройте пробы работоспособности с помощью стандартной конфигурации для типов узлов без состояния, как предложено ниже. После развертывания приложений для типа узла можно изменить порты расширения проб работоспособности для отслеживания фактического состояния приложения.

Примечание.

При использовании автомасштабирования с типами узлов без состояния состояние узла не очищается автоматически после уменьшения масштабирования. Для очистки состояния отключенных во время автомасштабирования узлов, рекомендуется использовать вспомогательное приложение для автомасштабирования 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"
            }
            }
        },
    ]
}

Настройка типов бездеятельных узлов с несколькими зонами доступности

Для конфигурации статического типа узла, охватывающего несколько зон доступности, следуйте этой документации, а также внесите следующие изменения:

  • Задайте singlePlacementGroup: false, если требуется включить несколько групп размещения.
  • Задайте политику обновления upgradePolicy как Rolling и добавьте расширение для мониторинга работоспособности приложения и проверки состояния, как упоминалось выше.
  • Задайте platformFaultDomainCount: 5 для масштабируемого набора виртуальных машин.

Для справки ознакомьтесь с шаблоном для настройки типов узлов без отслеживания состояния с несколькими Зонами доступности.

Требования к сети

Ресурс общедоступного IP-адреса и балансировщика нагрузки

Чтобы включить масштабирование до более 100 виртуальных машин в ресурсе масштабируемого набора виртуальных машин, как ресурс подсистемы балансировки нагрузки, так и ресурс IP-адреса, на которые ссылается этот масштабируемый набор виртуальных машин, должны использовать SKU категории Стандартный. Создание IP-ресурса без свойства SKU создаст SKU типа Basic, который не поддерживает масштабирование более чем до 100 виртуальных машин. Подсистема балансировки нагрузки SKU уровня "Стандартный" блокирует весь трафик извне по умолчанию; чтобы разрешить внешний трафик, необходимо развернуть группу безопасности сети в подсети.

{
    "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"
    }
}

Примечание.

Изменить SKU на месте в ресурсах общедоступного IP-адреса и подсистемы балансировки нагрузки невозможно.

Правила NAT для масштабируемого набора виртуальных машин

Правила NAT для входящего трафика подсистемы балансировки нагрузки должны соответствовать пулам NAT из масштабируемого набора виртуальных машин. Каждый масштабируемый набор виртуальных машин должен иметь уникальный пул NAT для входящего трафика.

{
"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"
        }
    }
    ]
}

Правила Load Balancer для исходящего трафика со стандартным SKU

Общедоступный IP-адрес уровня "Стандартный" предоставляет новые возможности и различное поведение для исходящих подключений по сравнению с использованием SKU уровня "Базовый". Если вам требуется исходящее подключение при работе со стандартными SKU, вы должны явно задать его с использованием стандартных общедоступных IP-адресов или стандартного общедоступного балансировщика нагрузки. Для получения дополнительной информации см. Исходящие подключения и Стандартный балансировщик нагрузки Azure.

Примечание.

Стандартный шаблон ссылается на группу безопасности сети (NSG), которая по умолчанию разрешает весь исходящий трафик. Входящий трафик ограничен портами, необходимыми для операций управления Service Fabric. Правила группы безопасности сети можно изменить в соответствии с вашими требованиями.

Примечание.

Любой кластер Service Fabric, использующий SLB с SKU категории "Стандартный", должен обеспечить для каждого типа узла правило, разрешающее исходящий трафик на порт 443. Это необходимо для завершения установки кластера, и любое развертывание без такого правила завершится неудачей.

Переход на использование типов узлов, которые не хранят состояние, в кластере

Для всех сценариев миграции необходимо добавить новый тип узла без отслеживания состояния. Существующий тип узла не может быть преобразован в безсостоянии.

Чтобы перенести кластер, который использовал IP-адрес с базовым номером SKU, необходимо сначала создать полностью новый IP-ресурс с помощью стандартного SKU. Обновить эти ресурсы на месте невозможно.

Ссылки на новые Load Balancer и IP-адрес должны содержаться в новых типах узлов без отслеживания состояния, которые планируется использовать. В приведенном выше примере добавляются новые ресурсы масштабируемого набора виртуальных машин, которые будут использоваться для типов узлов без отслеживания состояния. Эти масштабируемые наборы виртуальных машин ссылаются на новый балансировщик нагрузки и новый IP-адрес и помечены как статические типы узлов в ресурсе кластера Service Fabric.

Для начала необходимо будет добавить новые ресурсы в существующий шаблон Resource Manager. К этим ресурсам относятся:

  • Ресурс общедоступного IP-адреса с использованием SKU категории "Стандартный".
  • Ресурс Load Balancer с использованием SKU категории "Стандартный".
  • Группа безопасности сети, на которую ссылается подсеть, где развертываются масштабируемые наборы виртуальных машин.

После завершения развертывания ресурсов можно приступить к отключению узлов в типе узла, который необходимо удалить из исходного кластера.

Следующие шаги