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


Удаление типа узла Service Fabric

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

Предупреждение

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

Характеристики устойчивости

При использовании команды Remove-AzServiceFabricNodeType безопасность считается более важной, чем скорость. Тип узла должен иметь уровень устойчивости Silver или Gold по следующим причинам:

  • Уровень Bronze не дает никаких гарантий в отношении сохранении сведений о состоянии.
  • В рамках устойчивости уровня Silver и Gold перехватываются любые изменения в масштабируемом наборе.
  • Уровень Gold также позволяет контролировать обновления Azure для нижестоящего масштабируемого набора.

Service Fabric "координирует" базовые изменения и обновления, поэтому данные не теряются. Тем не менее при удалении типа узла с устойчивостью уровня Bronze вы можете потерять сведения о состоянии. Если вы удаляете тип первичного узла и используете приложение без отслеживания состояния, уровень Bronze приемлем. При выполнении рабочих нагрузок с отслеживанием состояния в рабочей среде минимальной конфигурацией должен быть уровень Silver. Аналогичным образом для рабочих сценариев тип первичного узла всегда должен быть уровня Silver или Gold.

Сведения об устойчивости Bronze

При удалении типа узла Bronze все узлы этого типа сразу же выходят из строя. Service Fabric не перехватывает обновления масштабируемого набора для узлов Bronze, поэтому все виртуальные машины сразу же выходят из строя. Если у вас есть какой-либо объект с отслеживанием состояния на этих узлах, данные будут потеряны. Теперь, даже если вы использовали объекты без отслеживания состояния, все узлы в Service Fabric входят в кольцевую топологию, поэтому все окружение может быть потеряно, что может нарушить работу самого кластера.

Удаление типа узла

  1. Перед началом процесса следуйте этим предварительным требованиям.

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

    • Измените манифест приложения или службы так, чтобы исключить из него ссылки на этот тип узла.
    • Разверните изменения.

    Затем проверьте следующее.

    • Все измененные выше службы больше не выполняются на узле, относящемся к этому типу узла.
    • Все службы работоспособны.
  3. Снимите для типа узла пометку, определяющую его как первичный (для типов узлов, не являющихся первичными, пропустите этот шаг)

    • Найдите шаблон Azure Resource Manager, используемый для развертывания.
    • Найдите раздел, относящийся к этому типу узла, в разделе Service Fabric.
    • Измените свойство isPrimary на false. ** В рамках этой задачи не удаляйте раздел, относящийся к этому типу узла.
    • Разверните измененный шаблон Azure Resource Manager. ** В зависимости от конфигурации кластера выполнение этого шага может занять некоторое время.

    Затем проверьте следующее.

    • В разделе Service Fabric на портале будет указано, что кластер готов.
    • Кластер находится в работоспособном состоянии.
    • Ни один из узлов, относящихся к этому типу узла, не помечен как начальный узел.
  4. Отключите каждый узел, относящийся к этому типу узла.

    Подключитесь к кластеру с помощью PowerShell, после чего выполните следующий шаг.

    $nodeType = "" # specify the name of node type
    $nodes = Get-ServiceFabricNode
    
    foreach($node in $nodes)
    {
      if ($node.NodeType -eq $nodeType)
      {
        $node.NodeName
    
        Disable-ServiceFabricNode -Intent RemoveNode -NodeName $node.NodeName -Force
      }
    }
    
    • Для уровня устойчивости Bronze дождитесь, пока все узлы перейдут в отключенное состояние.
    • Для устойчивости серебра и золота некоторые узлы переходят к отключенным, а остальные будут находиться в состоянии отключения. Проверьте вкладку "Сведения" для узлов в состоянии отключения. Если все они заблокированы для обеспечения кворума для секций службы инфраструктуры, можно продолжать работу.
  5. Остановите обработку данных для этого типа узла.

    Подключитесь к кластеру с помощью PowerShell, после чего выполните следующий шаг.

    foreach($node in $nodes)
    {
      if ($node.NodeType -eq $nodeType)
      {
        $node.NodeName
    
        Start-ServiceFabricNodeTransition -Stop -OperationId (New-Guid) -NodeInstanceId $node.NodeInstanceId -NodeName $node.NodeName -StopDurationInSeconds 10000
      }
    }
    

    Дождитесь, пока все узлы, относящиеся к этому типу узла, будут отмечены как отключенные.

  6. Отмените выделение узлов в исходном масштабируемом наборе виртуальных машин.

    Войдите в подписку Azure, в которой был развернут масштабируемый набор, и удалите масштабируемый набор виртуальных машин.

    $scaleSetName="myscaleset"
    $scaleSetResourceType="Microsoft.Compute/virtualMachineScaleSets"
    
    Remove-AzResource -ResourceName $scaleSetName -ResourceType $scaleSetResourceType -ResourceGroupName $resourceGroupName -Force
    
  7. Удалите данные для этого типа узла.

    Подключитесь к кластеру с помощью PowerShell, после чего выполните следующий шаг.

    foreach($node in $nodes)
    {
      if ($node.NodeType -eq $nodeType)
      {
        $node.NodeName
    
        Remove-ServiceFabricNodeState -NodeName $node.NodeName -Force
      }
    }
    

    Дождитесь, пока все узлы будут удалены из кластера. Узлы не должны отображаться в SFX.

  8. Удалите тип узла из раздела Service Fabric.

    • Найдите шаблон Azure Resource Manager, используемый для развертывания.
    • Найдите раздел, относящийся к этому типу узла, в разделе Service Fabric.
    • Удалите раздел, соответствующий типу узла.
    • Только для кластеров с уровнем устойчивости Silver и выше: обновите ресурс кластера в шаблоне и настройте политики работоспособности так, чтобы игнорировать работоспособность приложения fabric:/System, добавив applicationDeltaHealthPolicies в раздел properties ресурса кластера, как показано ниже. Приведенная ниже политика должна игнорировать существующие ошибки, но при этом не допускать новых ошибок работоспособности.
    "upgradeDescription":  
    { 
     "forceRestart": false, 
     "upgradeReplicaSetCheckTimeout": "10675199.02:48:05.4775807", 
     "healthCheckWaitDuration": "00:05:00", 
     "healthCheckStableDuration": "00:05:00", 
     "healthCheckRetryTimeout": "00:45:00", 
     "upgradeTimeout": "12:00:00", 
     "upgradeDomainTimeout": "02:00:00", 
     "healthPolicy": { 
       "maxPercentUnhealthyNodes": 100, 
       "maxPercentUnhealthyApplications": 100 
     }, 
     "deltaHealthPolicy":  
     { 
       "maxPercentDeltaUnhealthyNodes": 0, 
       "maxPercentUpgradeDomainDeltaUnhealthyNodes": 0, 
       "maxPercentDeltaUnhealthyApplications": 0, 
       "applicationDeltaHealthPolicies":  
       { 
           "fabric:/System":  
           { 
               "defaultServiceTypeDeltaHealthPolicy":  
               { 
                       "maxPercentDeltaUnhealthyServices": 0 
               } 
           } 
       } 
     } 
    },
    
    • Разверните измененный шаблон Azure Resource Manager. ** Этот шаг занимает некоторое время, как правило, до двух часов. Это изменение параметров обновления в InfrastructureService, поэтому требуется перезагрузка узла. В этом случае forceRestart игнорируется. Параметр upgradeReplicaSetCheckTimeout задает максимальное время, в течение которого Service Fabric ожидает перехода секции в безопасное состояние, если она еще не находится в нем. После завершения проверок безопасности для всех секций на узле Service Fabric начинает обновление на этом узле. Значение параметра upgradeTimeout можно уменьшить до 6 часов, однако для максимальной безопасности следует использовать значение 12 часов.

    Затем проверьте следующее.

    • Для ресурса Service Fabric на портале отображается состояние готовности.
  9. Удалите все ссылки на ресурсы, относящиеся к этому типу узла, из шаблона ARM.

    • Найдите шаблон Azure Resource Manager, используемый для развертывания.
    • Удалите из шаблона масштабируемый набор виртуальных машин и другие ресурсы, относящиеся к этому типу узла.
    • Разверните изменения.

    Затем:

    • Дождитесь завершения развертывания.
  10. Удалите относящиеся к этому типу узла ресурсы, которые больше не используются. Например, это могут быть подсистема балансировки нагрузки и общедоступные IP-адреса.

    • Чтобы удалить эти ресурсы, можно использовать ту же команду PowerShell, что и в шаге 6, указывающую конкретный тип ресурса и версию API.
    • Для обеспечения устойчивости silver и gold любой задачи восстановления, оставленной в кластере, которая предназначена для любого из узлов, присутствующих в удаленном типе узла, должна быть завершена с помощью команды:
       Complete-ServiceFabricRepairTask -TaskId <repair task name>
    

Примечание.

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

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