Lastenausgleich für Service Fabric-Cluster
Der Clusterressourcen-Manager von Service Fabric unterstützt dynamische Laständerungen und reagiert auf hinzugefügte oder entfernte Knoten oder Dienste. Er korrigiert Einschränkungsverletzungen automatisch und gleicht die Last des Clusters proaktiv aus. Doch wie oft werden diese Aktionen ausgeführt, und was löst sie aus?
Es gibt drei verschiedene Kategorien von Aufgaben, die der Clusterressourcen-Manager ausführt:
- Platzierung – In dieser Phase erfolgt die Platzierung zustandsbehafteter Replikate und zustandsloser Instanzen, die ggf. fehlen. Dies umfasst sowohl neue Dienste als auch die Behandlung von zustandsbehafteten Replikaten oder zustandslosen Instanzen, die ausgefallen sind. Hier werden das Löschen und Verwerfen von Replikaten oder Instanzen behandelt.
- Einschränkungsüberprüfungen – In dieser Phase erfolgt eine Überprüfung auf und Korrektur bei Verstößen gegen verschiedene Platzierungseinschränkungen (Regeln) im System. Mit Regeln lässt sich beispielsweise sicherstellen, dass die Kapazität von Knoten nicht überschritten wird und dass die Platzierungseinschränkungen eines Diensts eingehalten werden.
- Ausgleich: In dieser Phase wird basierend auf dem gewünschten Maß an Ausgleich für verschiedene Metriken geprüft, ob ein erneuter Ausgleich erforderlich ist. Falls ja, wird versucht, eine ausgeglichenere Anordnung im Cluster zu finden.
Konfigurieren von Timern für den Clusterressourcen-Manager
Die ersten Steuerelemente im Zusammenhang mit dem Lastenausgleich sind eine Reihe von Timern. Diese Timer legen fest, wie oft der Clusterressourcen-Manager den Cluster überprüft und Korrekturmaßnahmen ergreift.
Jede dieser unterschiedlichen Korrekturarten, die der Clusterressourcen-Manager durchführen kann, wird durch einen anderen Timer gesteuert, um festzulegen, wie häufig die Vorgänge ausgeführt werden. Beim Auslösen der einzelnen Timer wird der Task geplant. Der Ressourcen-Manager führt standardmäßig folgende Schritte aus:
- Er überprüft seinen Zustand und wendet jede Zehntelsekunde Updates an (beispielsweise, um zu erfassen, dass ein Knoten inaktiv ist).
- Er legt jede Sekunde das Kennzeichen für die Platzierungsüberprüfung fest.
- Legt das Kennzeichen für die Einschränkungsüberprüfung sekündlich fest
- Er legt alle fünf Sekunden das Kennzeichen für den Ausgleich fest.
Beispiele der Konfiguration dieser Timer sind unten aufgeführt:
ClusterManifest.xml
<Section Name="PlacementAndLoadBalancing">
<Parameter Name="PLBRefreshGap" Value="0.1" />
<Parameter Name="MinPlacementInterval" Value="1.0" />
<Parameter Name="MinConstraintCheckInterval" Value="1.0" />
<Parameter Name="MinLoadBalancingInterval" Value="5.0" />
</Section>
Über „ClusterConfig.json“ für eigenständige Bereitstellungen bzw. über „Template.json“ für in Azure gehostete Cluster:
"fabricSettings": [
{
"name": "PlacementAndLoadBalancing",
"parameters": [
{
"name": "PLBRefreshGap",
"value": "0.10"
},
{
"name": "MinPlacementInterval",
"value": "1.0"
},
{
"name": "MinConstraintCheckInterval",
"value": "1.0"
},
{
"name": "MinLoadBalancingInterval",
"value": "5.0"
}
]
}
]
Derzeit werden die Aktionen des Clusterressourcen-Managers einzeln nacheinander ausgeführt. Die Timer werden daher als „Mindestintervalle“ und die Aktionen, die erfolgen, wenn die Timer ausgelöst werden, als „Festlegen von Kennzeichen“ bezeichnet. So verarbeitet der Clusterressourcen-Manager beispielsweise zunächst ausstehende Anforderungen für die Diensterstellung und gleicht erst dann den Cluster aus. Wie anhand der angegebenen Standardintervalle zu sehen ist, ermittelt der Clusterressourcen-Manager in kurzen Abständen, ob etwas zu tun ist. Normalerweise bedeutet dies, dass die Menge von Änderungen, die während der einzelnen Schritte erfolgt, klein ist. Durch geringfügige, häufige Änderungen kann der Clusterressourcen-Manager schnell auf Vorgänge im Cluster reagieren. Die Standardtimer ermöglichen eine gewisse Batchverarbeitung, da viele der gleichen Ereignisarten häufig gleichzeitig auftreten.
Wenn beispielsweise Knoten ausfallen, kann dies nacheinander für gesamte Fehlerdomänen erfolgen. Alle diese Fehler werden während der nächsten Zustandsaktualisierung nach PLBRefreshGap erfasst. Die Korrekturen werden während der folgenden Platzierung, Einschränkungsüberprüfung und Ausführung von Ausgleichsvorgängen bestimmt. Standardmäßig überprüft der Clusterressourcen-Manager nicht die Clusteränderungen mehrerer Stunden und versucht, alle gleichzeitig zu verarbeiten. Dies hätte immer wieder kurze Phasen mit hohem Änderungsaufkommen zur Folge.
Der Clusterressourcen-Manager benötigt außerdem einige zusätzliche Informationen, um zu ermitteln, ob der Cluster unausgeglichen ist. Hierfür gibt es zwei weitere Konfigurationseinstellungen: Ausgleichsschwellenwerte (BalancingThresholds) und Aktivitätsschwellenwerte (ActivityThresholds).
Ausgleichsschwellenwerte
Ein Ausgleichsschwellenwert ist das Hauptsteuerinstrument für das Auslösen eines erneuten Ausgleichs. Der Ausgleichsschwellenwert für eine Metrik ist ein Verhältnis. Wenn die Last für eine Metrik auf dem am stärksten ausgelasteten Knoten dividiert durch die Last auf dem am wenigsten ausgelasteten Knoten den Ausgleichsschwellenwert dieser Metrik überschreitet, ist der Cluster unausgeglichen. Bei der nächsten Ausführung des Clusterressourcen-Managers wird deshalb ein Ausgleich ausgelöst. Der MinLoadBalancingInterval-Timer bestimmt, wie oft der Clusterressourcen-Manager prüfen soll, ob ein erneuter Ausgleich erforderlich ist. Die Überprüfung bedeutet nicht, dass etwas passiert.
Ausgleichsschwellenwerte werden als Teil der Clusterdefinition metrikbezogen definiert. Weitere Informationen zu Metriken finden Sie in diesem Artikel zu Metriken.
ClusterManifest.xml
<Section Name="MetricBalancingThresholds">
<Parameter Name="MetricName1" Value="2"/>
<Parameter Name="MetricName2" Value="3.5"/>
</Section>
Über „ClusterConfig.json“ für eigenständige Bereitstellungen bzw. über „Template.json“ für in Azure gehostete Cluster:
"fabricSettings": [
{
"name": "MetricBalancingThresholds",
"parameters": [
{
"name": "MetricName1",
"value": "2"
},
{
"name": "MetricName2",
"value": "3.5"
}
]
}
]
In diesem Beispiel verbraucht jeder Dienst eine einzelne Einheit einer bestimmten Metrik. Im oberen Beispiel hat die maximale Auslastung auf einem Knoten den Wert „5“ und die minimale Auslastung den Wert „2“. Angenommen, der Ausgleichsschwellenwert für diese Metrik ist „3“. Da das Verhältnis des Clusters 5/2 (also 2,5) beträgt und damit kleiner als der angegebene Schwellenwert (3) ist, ist der Cluster ausgeglichen. Bei der Überprüfung durch den Clusterressourcen-Manager wird daher kein Ausgleich ausgelöst.
Im unteren Beispiel hat die maximale Auslastung auf einem Knoten den Wert „10“ und die minimale Auslastung den Wert „2“. Für das Verhältnis ergibt sich also der Wert „5“. Der Wert „5“ übersteigt den für die Metrik festgelegten Ausgleichsschwellenwert (3). Folglich wird beim nächsten Auslösen des Ausgleichstimers ein Ausgleich geplant. In einer derartigen Situation wird ein Teil der Last in der Regel an Knoten 3 verteilt. Da der Clusterressourcen-Manager von Service Fabric keinen „gierigen“ Ansatz verfolgt, wird ein Teil der Last möglicherweise auch an Knoten 2 verteilt.
Hinweis
Für den Ausgleich werden zwei verschiedene Strategien zum Bewältigen der Last in Ihrem Cluster befolgt. Die Standardstrategie, die der Clusterressourcen-Manager befolgt, ist das Verteilen der Last auf die Knoten im Cluster. Die anderen Strategie ist die Defragmentierung. Die Defragmentierung erfolgt während desselben Ausgleichsvorgangs. Die Strategien für Lastenausgleich und Defragmentierung können für verschiedene Metriken im Cluster verwendet werden. Ein Dienst kann sowohl Lastenausgleichs- als auch Defragmentierungsmetriken aufweisen. Bei Defragmentierungsmetriken löst das Verhältnis der Lasten im Cluster einen erneuten Ausgleich aus, wenn es unter dem Ausgleichsschwellenwert liegt.
Die Unterschreitung des Ausgleichsschwellenwerts ist kein explizites Ziel. Ausgleichsschwellenwerte sind lediglich ein Auslöser. Während des Ausgleichsvorgangs bestimmt der Clusterressourcen-Manager, ob und welche Verbesserungen erfolgen sollen. Nur weil eine Ausgleichssuche ausgelöst wird, heißt das nicht, dass etwas verschoben wird. Mitunter ist der Cluster unausgeglichenen, jedoch zu eingeschränkt, um Korrekturen vorzunehmen. Alternativ können Sie die Verbesserungen Verschiebevorgänge erfordern, die zu kostspielig sind.
Aktivitätsschwellenwerte
Mitunter ist die Gesamtlast des Clusters niedrig, obwohl Knoten relativ unausgeglichen sind. Dies kann auf einen vorübergehenden Rückgang zurückzuführen sein oder daran liegen, dass der Cluster neu ist und einem Bootstrapping-Vorgang unterzogen wird. In beiden Fällen empfiehlt es sich unter Umständen, von einem Ausgleich des Clusters abzusehen, da sich damit nur wenig erreichen lässt. Wenn der Cluster ausgeglichen wurde, würden Sie lediglich Netzwerk- und Computeressourcen beanspruchen, um Elemente zu verschieben, ohne jedoch einen großen absoluten Unterschied auszumachen. Diese unnötigen Verschiebevorgänge lassen sich durch so genannte Aktivitätsschwellenwerte vermeiden. Mithilfe von Aktivitätsschwellenwerten können Sie eine absolute Untergrenze für Aktivitäten angeben. Wird der Schwellenwert von keinem Knoten überschritten, wird auch bei Erreichen des Ausgleichsschwellenwerts kein Ausgleich ausgelöst.
Angenommen, wir behalten „3“ als Ausgleichsschwellenwert für diese Metrik bei. Außerdem nehmen wir an, dass es den Aktivitätsschwellenwert „1536“ gibt. Im ersten Fall ist der Cluster zwar laut Ausgleichsschwellenwert unausgeglichen, der Aktivitätsschwellenwert wird jedoch von keinem Knoten erreicht, sodass keine Maßnahmen ergriffen werden. Im unteren Beispiel überschreitet Knoten 1 den Aktivitätsschwellenwert. Da sowohl der Ausgleichsschwellenwert als auch der Aktivitätsschwellenwert für die Metrik überschritten werden, wird ein Ausgleich geplant. Sehen Sie sich zur Veranschaulichung das folgende Beispieldiagramm an:
Aktivitätsschwellenwerte werden wie Ausgleichsschwellenwerte metrikbezogen in der Clusterdefinition definiert:
ClusterManifest.xml
<Section Name="MetricActivityThresholds">
<Parameter Name="Memory" Value="1536"/>
</Section>
Über „ClusterConfig.json“ für eigenständige Bereitstellungen bzw. über „Template.json“ für in Azure gehostete Cluster:
"fabricSettings": [
{
"name": "MetricActivityThresholds",
"parameters": [
{
"name": "Memory",
"value": "1536"
}
]
}
]
Sowohl der Ausgleichs- als auch der Aktivitätsschwellenwert sind mit einer bestimmten Metrik verknüpft. Der Ausgleich wird nur ausgelöst, wenn sowohl der Ausgleichs- als auch der Aktivitätsschwellenwert für die gleiche Metrik überschritten werden.
Hinweis
Wenn nicht angegeben, ist der Ausgleichsschwellenwert für eine Metrik 1 und der Aktivitätsschwellenwert 0. Dies bedeutet, dass der Cluster Resource Manager versucht, diese Metrik für jede gegebene Auslastung perfekt im Ausgleich zu halten. Bei Verwendung benutzerdefinierter Metriken sollten Sie die Ausgleichs- und Aktivitätsschwellenwerte für Ihre Metriken explizit selbst definieren.
Gemeinsamer Lastenausgleich von Diensten
Ob der Cluster unausgeglichen ist oder nicht, ist eine Entscheidung für den gesamten Cluster. Wir beheben dies jedoch, indem wir einzelne Dienstreplikate und -instanzen verschieben. Das ist einleuchtend, nicht wahr? Wenn auf einem Knoten ein hoher Arbeitsspeicherwert erreicht wird, kann dies auf mehrere Replikate oder Instanzen zurückzuführen sein. Daher kann es erforderlich sein, zustandsbehaftete Replikate oder zustandslose Instanzen zu verschieben, die die betroffene, unausgeglichene Metrik nutzen.
Gelegentlich wird jedoch ein Dienst, der selbst nicht unausgeglichen war, verschoben (denken Sie an die vorherige Diskussion lokaler und globaler Gewichtungen). Warum sollte ein Dienst verschoben werden, wenn alle seine Metrik ausgeglichen sind? Sehen wir uns ein Beispiel an:
- Angenommen, es gibt vier Dienste: Dienst 1, Dienst 2, Dienst 3 und Dienst 4.
- Dienst 1 meldet Metrik 1 und Metrik 2.
- Dienst 2 meldet Metrik 2 und Metrik 3.
- Dienst 3 meldet Metrik 3 und Metrik 4.
- Dienst 4 meldet Metrik 99.
Wir verfügen nicht wirklich über vier unabhängige Dienste, sondern vielmehr über drei Dienste, die in Bezug zueinander stehen, sowie über einen weiteren unabhängigen Dienst.
Aufgrund dieser Kette ist es möglich, dass ein Ungleichgewicht bei den Metriken 1-4 bewirken kann, dass Replikate oder Instanzen, die zu den Diensten 1-3 gehören, verschoben werden. Wir wissen auch, dass ein Ungleichgewicht bei den Metriken 1, 2 oder 3 keine Verschiebungen in Dienst 4 bewirkt. Das wäre sinnlos, da das Verschieben von Replikaten oder Instanzen, die zu Dienst 4 gehören, keinerlei Auswirkung auf das Gleichgewicht der Metriken 1–3 hat.
Der Clusterressourcen-Manager ermittelt automatisch, welche Dienste verknüpft sind. Das Hinzufügen, Entfernen oder Ändern der Metriken dieser Dienste kann sich auf ihre Beziehungen auswirken. Es ist beispielsweise möglich, dass Dienst 2 zwischen zwei Ausgleichsvorgängen aktualisiert und Metrik 2 entfernt wurde. Dadurch wird die Kette zwischen Dienst 1 und Dienst 2 unterbrochen. Anstelle von zwei zusammenhängenden Diensten gibt es nun drei:
Lastenausgleich eines Clusters nach Knotentyp
Wie in den vorherigen Abschnitten beschrieben, sind Aktivitätsschwellenwerte, Ausgleichsschwellenwerte und Timer die wichtigsten Steuerelemente für das Auslösen eines erneuten Ausgleichs. Der Clusterressourcen-Manager von Service Fabric bietet eine präzisere Kontrolle über das Auslösen eines erneuten Ausgleichs, da Parameter pro Knotentyp angegeben und eine Verschiebung nur für nicht ausgeglichene Knotentypen erlaubt werden kann. Der wichtigste Vorteil eines Ausgleichs pro Knotentyp besteht darin, dass eine Leistungsverbesserung für Knotentypen möglich wird, die striktere Ausgleichsregeln erfordern, ohne dass die Leistung bei anderen Knotentypen beeinträchtigt wird. Das Feature besteht im Wesentlichen aus zwei Teilen:
- Die Erkennung von Ungleichgewicht erfolgt pro Knotentyp. Die bisherige globale Berechnung des Ungleichgewichts erfolgt jetzt für jeden Knotentyp. Wenn alle Knotentypen ausgeglichen sind, löst der Clusterressourcen-Manager keine Ausgleichsphase aus. Andernfalls ist eine Ausgleichsphase erforderlich, wenn mindestens ein Knotentyp nicht ausgeglichen ist.
- Beim Ausgleich werden Replikate nur für Knotentypen verschoben, die nicht ausgeglichen sind; andere Knotentypen sind von der Ausgleichsphase nicht betroffen.
Auswirkungen des Ausgleichs pro Knotentyp auf einen Cluster
Beim Ausgleichen eines Clusters pro Knotentyp berechnet der Clusterressourcen-Manager von Service Fabric den Zustand des Ungleichgewichts für jeden Knotentyp. Wenn mindestens ein Knotentyp nicht ausgeglichen ist, wird die Ausgleichsphase ausgelöst. Die Ausgleichsphase verschiebt keine Replikate auf Knotentypen, die nicht ausgeglichen sind, wenn der Ausgleich für diese Knotentypen vorübergehend angehalten ist (wenn beispielsweise das Mindestintervall zwischen Ausgleichsvorgängen seit einer vorherigen Ausgleichsphase noch nicht abgelaufen ist). Bei der Erkennung eines nicht ausgeglichenen Zustands werden gängige Mechanismen verwendet, die bereits für den klassischen Lastenausgleich in Clustern verfügbar sind, aber die Granularität und Flexibilität der Konfiguration ist verbessert. Die Mechanismen, die beim Ausgleichen pro Knotentyp verwendet werden, um Ungleichgewicht zu erkennen, sind in der folgenden Liste aufgeführt:
- Schwellenwerte für den Metrikausgleich pro Knotentyp sind Werte, die eine ähnliche Rolle spielen wie der global definierte Ausgleichsschwellenwert, der beim klassischen Ausgleich verwendet wird. Das Verhältnis zwischen minimaler und maximaler Metriklast wird für jeden Knotentyp berechnet. Wenn dieses Verhältnis bei einem Knotentyp höher ist als der definierte Ausgleichsschwellenwert für diesen Knotentyp, wird der Knotentyp als nicht ausgeglichen markiert. Weitere Informationen zur Konfiguration von Schwellenwerten für die Metrikaktivität pro Knotentyp finden Sie im Abschnitt Ausgleichsschwellenwerte pro Knotentyp.
- Schwellenwerte für die Metrikaktivität pro Knotentyp sind Werte, die eine ähnliche Rolle spielen wie der global definierte Aktivitätsschwellenwert, der beim klassischen Ausgleich verwendet wird. Die maximale Metriklast wird für jeden Knotentyp berechnet. Wenn die maximale Last bei einem Knotentyp höher ist als der definierte Aktivitätsschwellenwert für diesen Knotentyp, wird der Knotentyp als nicht ausgeglichen markiert. Weitere Informationen zur Konfiguration der Schwellenwerte für die Metrikaktivität pro Knotentyp finden Sie im Abschnitt Aktivitätsschwellenwerte pro Knotentyp.
- Das Mindestintervall zwischen Ausgleichsvorgängen pro Knotentyp ähnelt dem global definierten Mindestintervall zwischen Ausgleichsvorgängen. Der Clusterressourcen-Manager speichert für jeden Knotentyp den Zeitstempel des letzten Ausgleichs. Innerhalb des definierten Mindestintervalls zwischen Ausgleichsvorgängen können keine zwei aufeinanderfolgenden Ausgleichsphasen für einen Knotentyp ausgeführt werden. Weitere Informationen zur Konfiguration des Mindestintervalls zwischen Ausgleichsvorgängen pro Knotentyp finden Sie im Abschnitt Mindestintervall zwischen Ausgleichsvorgängen pro Knotentyp.
Beschreiben des Ausgleichs pro Knotentyp
Um einen Ausgleich pro Knotentyp zu aktivieren, muss der Parameter „SeparateBalancingStrategyPerNodeType“ in einem Clustermanifest aktiviert werden. Darüber hinaus muss auch das Subclustering-Feature aktiviert sein. Beispiel für den Abschnitt „PlacementAndLoadBalancing“ eines Clustermanifests zum Aktivieren des Features:
<Section Name="PlacementAndLoadBalancing">
<Parameter Name="SeparateBalancingStrategyPerNodeType" Value="true" />
<Parameter Name="SubclusteringEnabled" Value="true" />
<Parameter Name="SubclusteringReportingPolicy" Value="1" />
</Section>
ClusterConfig.json für eigenständige Bereitstellungen bzw. Template.json für in Azure gehostete Cluster:
"fabricSettings": [
{
"name": "PlacementAndLoadBalancing",
"parameters": [
{
"name": "SeparateBalancingStrategyPerNodeType",
"value": "true"
},
{
"name": "SubclusteringEnabled",
"value": "true"
},
{
"name": "SubclusteringReportingPolicy",
"value": "1"
},
]
}
]
Wie im vorherigen Abschnitt beschrieben, können Schwellenwerte und Intervalle pro Knotentyp angegeben werden. Weitere Informationen zum Aktualisieren bestimmter Parameter finden Sie in den folgenden Abschnitten:
- Schwellenwerte für den Metrikausgleich pro Knotentyp
- Schwellenwerte für die Metrikaktivität pro Knotentyp
- Mindestintervall zwischen Ausgleichsvorgängen pro Knotentyp
Ausgleichsschwellenwerte pro Knotentyp
Der Schwellenwert für den Metrikausgleich kann pro Knotentyp definiert werden, um die Granularität der Ausgleichskonfiguration zu erhöhen. Ausgleichsschwellenwerte sind vom Typ „floating point“, da sie den Schwellenwert für das Verhältnis zwischen maximaler und minimaler Last innerhalb eines bestimmten Knotentyps darstellen. Ausgleichsschwellenwerte werden im Abschnitt PlacementAndLoadBalancingOverrides für jeden Knotentyp definiert:
<NodeTypes>
<NodeType Name="NodeType1">
<PlacementAndLoadBalancingOverrides>
<MetricBalancingThresholdsPerNodeType>
<BalancingThreshold Name="Metric1" Value="2.5">
<BalancingThreshold Name="Metric2" Value="4">
<BalancingThreshold Name="Metric3" Value="3.25">
</MetricBalancingThresholdsPerNodeType>
</PlacementAndLoadBalancingOverrides>
</NodeType>
</NodeTypes>
Wenn der Ausgleichsschwellenwert für eine Metrik für einen Knotentyp nicht definiert ist, erbt der Schwellenwert den Wert des im Abschnitt PlacementAndLoadBalancing global definierten Schwellenwerts für den Metrikausgleich. Wenn der Ausgleichsschwellenwert für eine Metrik weder für einen Knotentyp noch global in einem PlacementAndLoadBalancing-Abschnitt definiert ist, hat der Schwellenwert den Standardwert 1.
Aktivitätsschwellenwerte pro Knotentyp
Der Schwellenwert für die Metrikaktivität kann pro Knotentyp definiert werden, um die Granularität der Ausgleichskonfiguration zu erhöhen. Aktivitätsschwellenwerte sind vom Typ „integer“, da sie den Schwellenwert für den maximalen Lastwert innerhalb eines bestimmten Knotentyps darstellen. Aktivitätsschwellenwerte werden im Abschnitt PlacementAndLoadBalancingOverrides für jeden Knotentyp definiert:
<NodeTypes>
<NodeType Name="NodeType1">
<PlacementAndLoadBalancingOverrides>
<MetricActivityThresholdsPerNodeType>
<ActivityThreshold Name="Metric1" Value="500">
<ActivityThreshold Name="Metric2" Value="40">
<ActivityThreshold Name="Metric3" Value="1000">
</MetricActivityThresholdsPerNodeType>
</PlacementAndLoadBalancingOverrides>
</NodeType>
</NodeTypes>
Wenn der Aktivitätsschwellenwert für eine Metrik für einen Knotentyp nicht definiert ist, erbt der Schwellenwert den Wert des im Abschnitt PlacementAndLoadBalancing global definierten Schwellenwerts für die Metrikaktivität. Wenn der Aktivitätsschwellenwert für eine Metrik weder für einen Knotentyp noch global in einem PlacementAndLoadBalancing-Abschnitt definiert ist, hat der Schwellenwert den Standardwert 0.
Mindestintervall zwischen Ausgleichsvorgängen pro Knotentyp
Das Mindestintervall zwischen Ausgleichsvorgängen kann pro Knotentyp definiert werden, um die Granularität der Ausgleichskonfiguration zu erhöhen. Das Mindestintervall zwischen Ausgleichsvorgängen ist vom Typ „integer“, da es die Zeitspanne darstellt, die zwischen zwei aufeinanderfolgenden Ausgleichsvorgängen auf ein und demselben Knotentyp mindestens vergehen muss. Das Mindestintervall zwischen Ausgleichsvorgängen wird im Abschnitt PlacementAndLoadBalancingOverrides für jeden Knotentyp definiert:
<NodeTypes>
<NodeType Name="NodeType1">
<PlacementAndLoadBalancingOverrides>
<MinLoadBalancingIntervalPerNodeType>100</MinLoadBalancingIntervalPerNodeType>
</PlacementAndLoadBalancingOverrides>
</NodeType>
</NodeTypes>
Wenn das Mindestintervall zwischen Ausgleichsvorgängen für einen Knotentyp nicht definiert ist, erbt das Intervall den Wert des Mindestintervalls zwischen Ausgleichsvorgängen, das im Abschnitt PlacementAndLoadBalancing globale definiert ist. Wenn das Mindestintervall weder für einen Knotentyp noch global in einem PlacementAndLoadBalancing-Abschnitt definiert ist, hat das minimale Intervall den Standardwert 0. Dies weist darauf hin, dass zwischen aufeinanderfolgenden Ausgleichsvorgängen keine Pause erforderlich ist.
Beispiele
Beispiel 1
Betrachten wir einen Fall, in dem ein Cluster zwei Knotentypen enthält: Knotentyp A und Knotentyp B. Alle Dienste melden dieselbe Metrik, und sie sind auf diese Knotentypen aufgeteilt, sodass sich die Laststatistiken für sie unterscheiden. Im Beispiel weist Knotentyp A eine maximale Last von 300 und eine Mindestlast von 100 auf, Knotentyp B hat eine maximale Last von 700 und eine Mindestlast von 500:
Der Kunde stellte fest, dass für Workloads mit zwei Knotentypen verschiedene Ausgleichsanforderungen gelten, und entschied sich dafür, unterschiedliche Ausgleichs- und Aktivitätsschwellenwerte pro Knotentyp festzulegen. Der Ausgleichsschwellenwert von Knotentyp A beträgt 2,5, der Aktivitätsschwellenwert ist 50. Für Knotentyp B legt der Kunde den Ausgleichsschwellenwert auf 1,2 und den Aktivitätsschwellenwert auf 400 fest.
Während der Erkennung von Ungleichgewicht im Cluster in diesem Beispiel verstoßen beide Knotentypen gegen den Aktivitätsschwellenwert. Der Wert 300 für die maximale Last von Knotentyp A liegt über dem definierten Aktivitätsschwellenwert 50. Der Wert 700 für die maximale Last von Knotentyp B liegt über dem definierten Aktivitätsschwellenwert 400. Knotentyp A verstößt gegen das Kriterium „Ausgleichsschwellenwert“, da das aktuelle Verhältnis zwischen maximaler und minimaler Last 3 beträgt und der Ausgleichsschwellenwert 2,5 lautet. Im Gegensatz dazu verstößt Knotentyp B nicht gegen das Kriterium „Ausgleichsschwellenwert“, da das aktuelle Verhältnis zwischen maximaler und minimaler Last für diesen Knotentyp 1,2 beträgt, aber der Ausgleichsschwellenwert 1,4 lautet. Ein Ausgleich ist nur für Replikate im Knotentyp A erforderlich, und die einzige Gruppe von Replikaten, die während der Ausgleichsphase für Verschiebungen berechtigt sind, sind Replikate, die im Knotentyp A platziert wurden.
Beispiel 2
Betrachten wir einen Fall, in dem ein Cluster drei Knotentypen enthält: Knotentyp A, Knotentyp B und Knotentyp C. Alle Dienste melden dieselbe Metrik, und sie sind auf diese Knotentypen aufgeteilt, sodass sich die Laststatistiken für sie unterscheiden. Im Beispiel hat Knotentyp A eine maximale Last von 600 und eine Mindestlast von 100, Knotentyp B eine maximale Last von 900 und eine Mindestlast von 100, und Knotentyp C eine maximale Last von 600 und eine Mindestlast von 300:
Der Kunde stellte fest, dass für Workloads mit drei Knotentypen verschiedene Ausgleichsanforderungen gelten, und entschied sich dafür, unterschiedliche Ausgleichs- und Aktivitätsschwellenwerte pro Knotentyp festzulegen. Der Ausgleichsschwellenwert von Knotentyp A beträgt 5, der Aktivitätsschwellenwert ist 700. Für Knotentyp B legt der Kunde den Ausgleichsschwellenwert auf 10 und den Aktivitätsschwellenwert auf 200 fest. Für Knotentyp C legt der Kunde den Ausgleichsschwellenwert auf 2 und den Aktivitätsschwellenwert auf 300 fest.
Der Wert 600 für die maximale Last von Knotentyp A liegt unter dem definierten Aktivitätsschwellenwert 700, sodass Knotentyp A nicht ausgeglichen wird. Der Wert 900 für die maximale Last von Knotentyp B liegt über dem definierten Aktivitätsschwellenwert 200. Knotentyp B verstößt gegen die Kriterien für den Aktivitätsschwellenwert. Der Wert 600 für die maximale Last von Knotentyp C liegt über dem definierten Aktivitätsschwellenwert 300. Knotentyp C verstößt gegen die Kriterien für den Aktivitätsschwellenwert. Knotentyp B verstößt nicht gegen das Kriterium „Ausgleichsschwellenwert“, da das aktuelle Verhältnis zwischen maximaler und minimaler Last für diesen Knotentyp 9 beträgt, aber der Ausgleichsschwellenwert 10 lautet. Knotentyp C verstößt gegen das Kriterium „Ausgleichsschwellenwert“, da das aktuelle Verhältnis zwischen maximaler und minimaler Last 2 beträgt und der Ausgleichsschwellenwert 2 lautet. Ein Ausgleich ist nur für Replikate im Knotentyp C erforderlich, und die einzige Gruppe von Replikaten, die während der Ausgleichsphase für Verschiebungen berechtigt sind, sind Replikate, die im Knotentyp C platziert wurden.
Nächste Schritte
- Metriken bestimmen, wie der Clusterressourcen-Manager von Service Fabric den Ressourcenverbrauch und die Kapazität im Cluster verwaltet. Weitere Informationen zu Metriken und deren Konfiguration finden Sie im Artikel zu Metriken.
- Bewegungskosten sind eine Möglichkeit, dem Clusterressourcen-Manager mitzuteilen, dass bestimmte Dienste teurer zu bewegen sind als andere. Weitere Informationen zu den Kosten für Verschiebungen finden Sie im Artikel zu Kosten für Verschiebungen
- Der Clusterressourcen-Manager bietet mehrere Drosselungen, die Sie konfigurieren können, um Änderungen im Cluster zu verlangsamen. Sie sind normalerweise nicht erforderlich, aber bei Bedarf finden Sie weitere Informationen im Artikel zur erweiterten Drosselung.
- Der Clusterressourcen-Manager kann Subclustering erkennen und verarbeiten. Subclustering kann auftreten, wenn Sie Platzierungseinschränkungen und Lastenausgleich verwenden. Informationen dazu, wie sich Subclustering auf den Lastenausgleich auswirken kann und wie Sie damit umgehen können, finden Sie im Artikel zum Subclustering.