Jak usunąć typ węzła usługi Service Fabric

W tym artykule opisano sposób skalowania klastra usługi Azure Service Fabric przez usunięcie istniejącego typu węzła z klastra. Klaster usługi Service Fabric to połączony z siecią zestaw maszyn wirtualnych lub fizycznych, w którym są wdrażane mikrousługi i zarządzane. Maszyna lub maszyna wirtualna, która jest częścią klastra, jest nazywana węzłem. Zestawy skalowania maszyn wirtualnych to zasób obliczeniowy platformy Azure, który służy do wdrażania kolekcji maszyn wirtualnych i zarządzania nią jako zestawu. Każdy typ węzła zdefiniowany w klastrze platformy Azure jest konfigurowany jako oddzielny zestaw skalowania. Każdy typ węzła może być zarządzany oddzielnie. Po utworzeniu klastra usługi Service Fabric można skalować klaster w poziomie, usuwając typ węzła (zestaw skalowania maszyn wirtualnych) i wszystkie jego węzły. Klaster można skalować w dowolnym momencie, nawet wtedy, gdy obciążenia są uruchomione w klastrze. W miarę skalowania klastra aplikacje są również automatycznie skalowane.

Ostrzeżenie

Użycie tego podejścia do usuwania typu węzła z klastra produkcyjnego nie jest zalecane do częstego używania. Jest to niebezpieczne polecenie, ponieważ usuwa zasób zestawu skalowania maszyn wirtualnych za typem węzła.

Charakterystyka trwałości

Podczas używania polecenia Remove-AzServiceFabricNodeType bezpieczeństwo ma wyższy priorytet niż szybkość. Typ węzła musi mieć poziom trwałości Silver lub Gold, ponieważ:

  • Brąz nie daje żadnych gwarancji dotyczących zapisywania informacji o stanie.
  • Trwałość srebra i złota — wszelkie zmiany w zestawie skalowania.
  • Gold zapewnia również kontrolę nad aktualizacjami platformy Azure poniżej zestawu skalowania.

Usługa Service Fabric "organizuje" podstawowe zmiany i aktualizacje, dzięki czemu dane nie zostaną utracone. Jednak usunięcie typu węzła z trwałością z brązu może spowodować utratę informacji o stanie. Jeśli usuwasz typ węzła podstawowego, a aplikacja jest bezstanowa, brąz jest akceptowalny. Po uruchomieniu obciążeń stanowych w środowisku produkcyjnym minimalna konfiguracja powinna mieć wartość Silver. Podobnie w przypadku scenariuszy produkcyjnych typ węzła podstawowego powinien zawsze mieć wartość Silver lub Gold.

Więcej informacji o trwałości brązu

Usunięcie typu węzła o nazwie Bronze oznacza natychmiastowe wyłączenie wszystkich węzłów typu węzła. Usługa Service Fabric nie wychwytuje żadnych aktualizacji zestawu skalowania węzłów z brązu, dlatego wszystkie maszyny wirtualne zostaną natychmiast wyłączone. Jeśli w tych węzłach znajduje się coś stanowego, dane zostaną utracone. Teraz, nawet jeśli jesteś bezstanowy, wszystkie węzły w usłudze Service Fabric uczestniczą w pierścieniu, więc cała okolica może zostać utracona, co może zdestabilizować sam klaster.

Usuwanie typu węzła

  1. Przed rozpoczęciem procesu należy uwzględnić te wymagania wstępne.

    • Klaster jest w dobrej kondycji.
    • Po usunięciu typu węzła nadal będzie wystarczająca pojemność, na przykład liczba węzłów do umieszczenia wymaganej liczby replik.
  2. Przenieś wszystkie usługi z ograniczeniami umieszczania, aby użyć typu węzła poza typem węzła.

    • Zmodyfikuj manifest aplikacji/usługi, aby nie odwoływać się do typu węzła.
    • Wdróż zmianę.

    Następnie sprawdź, czy:

    • Wszystkie usługi zmodyfikowane powyżej nie są już uruchomione w węźle należącym do typu węzła.
    • Wszystkie usługi są w dobrej kondycji.
  3. Usuń oznaczenie typu węzła jako innego niż podstawowy (pomiń dla typów węzłów innych niż podstawowe)

    • Znajdź szablon usługi Azure Resource Manager używany do wdrożenia.
    • Znajdź sekcję powiązaną z typem węzła w sekcji Service Fabric.
    • Zmień właściwość isPrimary na false. ** Nie usuwaj sekcji powiązanej z typem węzła w tym zadaniu.
    • Wdróż zmodyfikowany szablon usługi Azure Resource Manager. ** W zależności od konfiguracji klastra ten krok może trochę potrwać.

    Następnie sprawdź, czy:

    • Sekcja usługi Service Fabric w portalu wskazuje, że klaster jest gotowy.
    • Klaster jest w dobrej kondycji.
    • Żaden z węzłów należących do typu węzła nie jest oznaczony jako węzeł inicjatora.
  4. Wyłącz każdy węzeł w typie węzła.

    Połącz się z klastrem przy użyciu programu PowerShell, a następnie uruchom następujący krok.

    $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
      }
    }
    
    • Aby zapewnić trwałość z brązu, poczekaj na wyłączenie wszystkich węzłów
    • W przypadku trwałości srebrnej i złotej niektóre węzły przechodzą do wyłączenia, a pozostałe zostaną wyłączone. Sprawdź kartę szczegółów węzłów w stanie wyłączania, jeśli wszystkie są zablokowane podczas zapewniania kworum dla partycji usługi infrastruktury, można bezpiecznie kontynuować.
  5. Zatrzymaj dane dla typu węzła.

    Połącz się z klastrem przy użyciu programu PowerShell, a następnie uruchom następujący krok.

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

    Zaczekaj na oznaczenie wszystkich węzłów dla typu węzła w dół.

  6. Cofanie przydziału węzłów w oryginalnym zestawie skalowania maszyn wirtualnych

    Zaloguj się do subskrypcji platformy Azure, w której wdrożono zestaw skalowania, i usuń zestaw skalowania maszyn wirtualnych.

    $scaleSetName="myscaleset"
    $scaleSetResourceType="Microsoft.Compute/virtualMachineScaleSets"
    
    Remove-AzResource -ResourceName $scaleSetName -ResourceType $scaleSetResourceType -ResourceGroupName $resourceGroupName -Force
    
  7. Usuń dane dla typu węzła.

    Połącz się z klastrem przy użyciu programu PowerShell, a następnie uruchom następujący krok.

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

    Zaczekaj na usunięcie wszystkich węzłów z klastra. Węzły nie powinny być wyświetlane w systemie SFX.

  8. Usuń typ węzła z sekcji Service Fabric.

    • Znajdź szablon usługi Azure Resource Manager używany do wdrożenia.
    • Znajdź sekcję powiązaną z typem węzła w sekcji Service Fabric.
    • Usuń sekcję odpowiadającą typowi węzła.
    • Tylko w przypadku klastrów Silver i wyższej trwałości zaktualizuj zasób klastra w szablonie i skonfiguruj zasady kondycji tak, aby ignorowały kondycję sieci szkieletowej:/System application health, dodając applicationDeltaHealthPolicies w obszarze zasób properties klastra, jak pokazano poniżej. Poniższe zasady powinny ignorować istniejące błędy, ale nie zezwalać na nowe błędy kondycji.
    "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 
               } 
           } 
       } 
     } 
    },
    
    • Wdróż zmodyfikowany szablon usługi Azure Resource Manager. ** Ten krok zajmuje trochę czasu, zwykle do dwóch godzin. To uaktualnienie powoduje zmianę ustawień usługi InfrastructureService, dlatego jest wymagane ponowne uruchomienie węzła. W takim przypadku forceRestart jest ignorowany. Parametr upgradeReplicaSetCheckTimeout określa maksymalny czas oczekiwania usługi Service Fabric na partycję w bezpiecznym stanie, jeśli jeszcze nie jest w stanie bezpiecznym. Po sprawdzeniu bezpieczeństwa wszystkich partycji w węźle usługa Service Fabric przejdzie do uaktualnienia w tym węźle. Wartość parametru upgradeTimeout można zmniejszyć do 6 godzin, ale dla maksymalnego bezpieczeństwa należy użyć 12 godzin.

    Następnie sprawdź, czy:

    • Zasób usługi Service Fabric w portalu jest wyświetlany jako gotowy.
  9. Usuń wszystkie odwołania do zasobów związanych z typem węzła z szablonu usługi ARM.

    • Znajdź szablon usługi Azure Resource Manager używany do wdrożenia.
    • Usuń zestaw skalowania maszyn wirtualnych i inne zasoby związane z typem węzła z szablonu.
    • Wdróż zmiany.

    Następnie:

    • Poczekaj na zakończenie wdrażania.
  10. Usuń zasoby dotyczące typu węzła, które nie są już używane. Przykład Load Balancer i publiczny adres IP.

    • Aby usunąć te zasoby, możesz użyć tego samego polecenia programu PowerShell, które zostało użyte w kroku 6, określając określony typ zasobu i wersję interfejsu API.
    • W przypadku trwałości srebrnej i złotej wszystkie zadania naprawy pozostawione w klastrze, które są przeznaczone dla dowolnych węzłów, które znajdowały się w usuniętym typie węzła, należy wykonać za pomocą polecenia :
       Complete-ServiceFabricRepairTask -TaskId <repair task name>
    

Uwaga

Ten krok jest opcjonalny, jeśli ten sam Load Balancer, a adres IP jest ponownie używany między typami węzłów.

Następne kroki