Dela via


Begränsa Service Fabric-klustrets Resource Manager

Även om du har konfigurerat klustret Resource Manager korrekt kan klustret störas. Det kan till exempel finnas samtidiga nod- och feldomänfel – vad skulle hända om det inträffade under en uppgradering? Klustrets Resource Manager försöker alltid åtgärda allt och använder klustrets resurser för att försöka organisera om och åtgärda klustret. Begränsningar hjälper till att tillhandahålla en backstop så att klustret kan använda resurser för att stabiliseras – noderna kommer tillbaka, nätverkspartitionerna repareras, korrigerade bitar distribueras.

För att hjälpa till med den här typen av situationer innehåller Service Fabric-klustret Resource Manager flera begränsningar. Dessa begränsningar är alla ganska stora hammare. I allmänhet bör de inte ändras utan noggrann planering och testning.

Om du ändrar begränsningarna för kluster Resource Manager bör du justera dem till den förväntade faktiska belastningen. Du kan fastställa att du behöver ha vissa begränsningar på plats, även om det innebär att klustret tar längre tid att stabiliseras i vissa situationer. Testning krävs för att fastställa rätt värden för begränsningar. Begränsningarna måste vara tillräckligt höga för att klustret ska kunna svara på ändringar inom rimlig tid och tillräckligt låga för att faktiskt förhindra för mycket resursförbrukning.

För det mesta har vi sett att kunder använder begränsningar eftersom de redan befann sig i en resursbegränsad miljö. Vissa exempel är begränsad nätverksbandbredd för enskilda noder eller diskar som inte kan skapa många tillståndskänsliga repliker parallellt på grund av dataflödesbegränsningar. Utan begränsningar kan åtgärderna överbelasta dessa resurser, vilket gör att åtgärder misslyckas eller är långsamma. I sådana fall använde kunderna begränsningar och visste att de skulle förlänga den tid det skulle ta för klustret att nå ett stabilt tillstånd. Kunderna förstod också att de kunde få lägre övergripande tillförlitlighet medan de begränsades.

Konfigurera begränsningarna

Service Fabric har två mekanismer för att begränsa antalet replikförflyttningar. Standardmekanismen som fanns före Service Fabric 5.7 representerar begränsning som ett absolut antal flyttningar som tillåts. Detta fungerar inte för kluster av alla storlekar. I synnerhet för stora kluster kan standardvärdet vara för litet, vilket avsevärt saktar ned utjämningen även när det är nödvändigt, samtidigt som det inte har någon effekt i mindre kluster. Den här tidigare mekanismen har ersatts av procentbaserad begränsning, som skalar bättre med dynamiska kluster där antalet tjänster och noder ändras regelbundet.

Begränsningarna baseras på en procentandel av antalet repliker i klustren. Procentbaserade begränsningar gör det möjligt att uttrycka regeln: "flytta inte mer än 10 % av replikerna inom ett 10-minutersintervall", till exempel.

Konfigurationsinställningarna för procentbaserad begränsning är:

  • GlobalMovementThrottleThresholdPercentage – Maximalt antal förflyttningar som tillåts i klustret när som helst, uttryckt som procentandel av det totala antalet repliker i klustret. 0 anger ingen gräns. Standardvärdet är 0. Om både den här inställningen och GlobalMovementThrottleThreshold anges används den mer konservativa gränsen.
  • GlobalMovementThrottleThresholdPercentageForPlacement – Maximalt antal förflyttningar som tillåts under placeringsfasen, uttryckt som procentandel av det totala antalet repliker i klustret. 0 anger ingen gräns. Standardvärdet är 0. Om både den här inställningen och GlobalMovementThrottleThresholdForPlacement anges används den mer konservativa gränsen.
  • GlobalMovementThrottleThresholdPercentageForBalancing – Maximalt antal förflyttningar som tillåts under utjämningsfasen, uttryckt som procentandel av det totala antalet repliker i klustret. 0 anger ingen gräns. Standardvärdet är 0. Om både den här inställningen och GlobalMovementThrottleThresholdForBalancing anges används den mer konservativa gränsen.

När du anger begränsningsprocenten anger du 5 % som 0,05. Intervallet där dessa begränsningar styrs är GlobalMovementThrottleCountingInterval, som anges i sekunder.

<Section Name="PlacementAndLoadBalancing">
     <Parameter Name="GlobalMovementThrottleThresholdPercentage" Value="0" />
     <Parameter Name="GlobalMovementThrottleThresholdPercentageForPlacement" Value="0" />
     <Parameter Name="GlobalMovementThrottleThresholdPercentageForBalancing" Value="0" />
     <Parameter Name="GlobalMovementThrottleCountingInterval" Value="600" />
</Section>

via ClusterConfig.json för fristående distributioner eller Template.json för Azure-värdbaserade kluster:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "GlobalMovementThrottleThresholdPercentage",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleThresholdPercentageForPlacement",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleThresholdPercentageForBalancing",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleCountingInterval",
          "value": "600"
      }
    ]
  }
]

Standardantalsbaserade begränsningar

Den här informationen tillhandahålls om du har äldre kluster eller fortfarande behåller dessa konfigurationer i kluster som sedan dess har uppgraderats. I allmänhet rekommenderar vi att dessa ersätts med de procentbaserade begränsningarna ovan. Eftersom procentbaserad begränsning är inaktiverad som standard förblir dessa begränsningar standardbegränsningarna för ett kluster tills de inaktiveras och ersätts med de procentbaserade begränsningarna.

  • GlobalMovementThrottleThreshold – den här inställningen styr det totala antalet förflyttningar i klustret under en viss tid. Tiden anges i sekunder som GlobalMovementThrottleCountingInterval. Standardvärdet för GlobalMovementThrottleThreshold är 1 000 och standardvärdet för GlobalMovementThrottleCountingInterval är 600.
  • MovementPerPartitionThrottleThreshold – den här inställningen styr det totala antalet förflyttningar för en tjänstpartition under en viss tid. Tiden anges i sekunder som MovementPerPartitionThrottleCountingInterval. Standardvärdet för MovementPerPartitionThrottleThreshold är 50 och standardvärdet för MovementPerPartitionThrottleCountingInterval är 600.

Konfigurationen för dessa begränsningar följer samma mönster som den procentbaserade begränsningen.

Nästa steg