Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Broker-Ressource ist die Hauptressource, die die allgemeinen Einstellungen für einen MQTT-Broker definiert. Sie bestimmt auch die Anzahl und den Typ der Pods, die die Broker-Konfiguration ausführen, z. B. die Front-Ends und die Back-Ends. Sie können auch die Brokerressource verwenden, um ihr Speicherprofil zu konfigurieren. In den Broker sind Self-healing-Mechanismen integriert, und er kann häufig automatisch nach Komponentenausfällen wiederhergestellt werden. Beispiel: Wenn ein Knoten in einem für Hochverfügbarkeit konfigurierten Kubernetes-Cluster ausfällt
Sie können den MQTT-Broker horizontal skalieren, indem Sie weitere Front-End-Replikate und Back-End-Partitionen hinzufügen. Die Front-End-Replikate sind für die Annahme von MQTT-Verbindungen von Clients und deren Weiterleitung an die Back-End-Partitionen zuständig. Die Back-End-Partitionen sind für das Speichern und Übermitteln von Nachrichten an die Clients verantwortlich. Die Front-End-Pods verteilen den Nachrichtendatenverkehr auf die Back-End-Pods. Der Back-End-Redundanzfaktor bestimmt die Anzahl der Datenkopien, um Resilienz gegenüber Knotenfehlern im Cluster zu ermöglichen.
Eine Liste der verfügbaren Einstellungen finden Sie in der API-Referenz zum Broker.
Konfigurieren von Skalierungseinstellungen
Wichtig
Für diese Einstellung müssen Sie die Brokerressource ändern. Sie ist nur bei der ersten Bereitstellung mithilfe der Azure CLI oder des Azure-Portals konfiguriert. Eine neue Bereitstellung ist erforderlich, wenn Änderungen an der Broker-Konfiguration erforderlich sind. Weitere Informationen finden Sie unter Anpassen des Standardbrokers.
Um die Skalierungseinstellungen des MQTT-Brokers zu konfigurieren, geben Sie die Kardinalitätsfelder in der Spezifikation der Broker-Ressource während der Azure IoT Einsatz-Bereitstellung an.
Kardinalität bei der automatischen Bereitstellung
Um die anfängliche Kardinalität während der Bereitstellung automatisch zu ermitteln, lassen Sie das Kardinalitätsfeld in der Broker-Ressource leer.
Die automatische Kardinalität wird noch nicht unterstützt, wenn Sie Azure IoT Einsatz über das Azure-Portal bereitstellen. Sie können den Clusterbereitstellungsmodus manuell als Einzelner Knoten oder Mehrere Knoten angeben. Weitere Informationen finden Sie unter Bereitstellen von Azure IoT-Vorgängen.
Der Operator für den MQTT-Broker stellt die entsprechende Anzahl von Pods basierend auf der Anzahl der Knoten automatisch bereit, die zur Bereitstellungszeit verfügbar sind. Diese Funktion ist nützlich für Nichtproduktionsszenarios, in denen Sie keine Hochverfügbarkeit oder Skalierung benötigen.
Diese Funktion ist keine automatische Skalierung. Der Operator skaliert die Anzahl der Pods basierend auf der Last nicht automatisch. Der Operator bestimmt nur die anfängliche Anzahl von Pods, die nur basierend auf der Clusterhardware bereitgestellt werden sollen. Wie bereits erwähnt, wird die Kardinalität nur zur Erstbereitstellungszeit festgelegt. Eine neue Bereitstellung ist erforderlich, wenn die Kardinalitätseinstellungen geändert werden müssen.
Direktes Konfigurieren der Kardinalität
Um die Kardinalitätseinstellungen direkt zu konfigurieren, geben Sie die einzelnen Kardinalitätsfelder an.
Wenn Sie den folgenden Leitfaden zum Bereitstellen von IoT Einsatz befolgen, sehen Sie im Abschnitt Konfiguration unter MQTT-Brokerkonfiguration nach. Hier können Sie die Anzahl der Front-End-Replikate, Back-End-Partitionen und Back-End-Worker angeben.
Grundlegendes zur Kardinalität
Kardinalität steht für die Anzahl von Instanzen einer bestimmten Entität in einer Gruppe. Im Kontext des MQTT-Brokers bezieht sich die Kardinalität auf die Anzahl der Front-End-Replikate, Back-End-Partitionen und Back-End-Worker, die bereitgestellt werden sollen. Die Kardinalitätseinstellungen werden verwendet, um den Broker horizontal zu skalieren und Hochverfügbarkeit zu verbessern, wenn Pod- oder Knotenfehler auftreten.
Das Kardinalitätsfeld ist ein geschachteltes Feld mit Unterfeldern für Front-End- und Back-End-Kette. Jedes dieser Unterfelder verfügt über eigene Einstellungen.
Front-End
Im Front-End-Unterfeld legen Sie die Einstellungen für die Front-End-Pods fest. Die beiden Haupteinstellungen sind:
- Replikate: Die Anzahl der bereitzustellenden Front-End-Replikate (Pods) Das Erhöhen der Anzahl der Front-End-Replikate bietet Hochverfügbarkeit, falls einer der Front-End-Pods ausfüllt.
- Worker: Die Anzahl der logischen Front-End-Worker pro Replikat Jeder Worker kann höchstens bis zu einem CPU-Kern verbrauchen.
Back-End-Kette
Das Unterfeld der Back-End-Kette definiert die Einstellungen für die Back-End-Partitionen. Die drei Haupteinstellungen sind:
- Partitionen: Die Anzahl der bereitzustellenden Partitionen. Durch einen Prozess namens Sharding ist jede Partition für einen Teil der Nachrichten verantwortlich, getrennt nach Themen-ID und Sitzungs-ID. Die Front-End-Pods verteilen den Nachrichtendatenverkehr auf die Partitionen. Durch das Erhöhen der Anzahl von Partitionen erhöht sich auch die Anzahl der Nachrichten, die der Broker verarbeiten kann.
- Redundanzfaktor: Die Anzahl der Back-End-Replikate (Pods), die pro Partition bereitgestellt werden sollen Durch das Erhöhen des Redundanzfaktors erhöht sich die Anzahl der Datenkopien, um Resilienz gegenüber Knotenfehlern im Cluster zu ermöglichen.
- Worker: Die Anzahl der bereitzustellenden Worker pro Back-End-Replikat Durch das Erhöhen der Anzahl der Worker pro Back-End-Replikat erhöht sich eventuell die Anzahl der Nachrichten, die der Back-End-Pod verarbeiten kann. Jeder Worker kann höchstens zwei CPU-Kerne nutzen. Achten Sie daher bei der Erhöhung der Anzahl der Worker pro Replikat darauf, dass die Anzahl der CPU-Kerne im Cluster nicht überschritten wird.
Überlegungen
Wenn Sie die Kardinalitätswerte erhöhen, verbessert sich im Allgemeinen die Fähigkeit des Brokers, mehr Verbindungen und Nachrichten zu verarbeiten, und es wird die Hochverfügbarkeit bei Pod- oder Knotenausfällen erhöht. Diese erhöhte Kapazität führt auch zu einem höheren Ressourcenverbrauch. Berücksichtigen Sie also beim Anpassen von Kardinalitätswerten die Speicherprofileinstellungen und die CPU-Ressourcenanforderungen des Brokers. Das Erhöhen der Anzahl der Worker pro Front-End-Replikat kann dazu beitragen, die Auslastung der CPU-Kerne zu erhöhen, wenn Sie feststellen, dass die Front-End-CPU-Auslastung einen Engpass darstellt. Das Erhöhen der Anzahl der Back-End-Worker kann den Nachrichtendurchsatz verbessern, wenn die Back-End-CPU ein Engpass ist.
Wenn Ihr Cluster beispielsweise drei Knoten mit acht CPU-Kernen aufweist, legen Sie die Anzahl der Front-End-Replikate so fest, dass sie mit der Anzahl der Knoten (3) übereinstimmt, und legen Sie die Anzahl der Worker auf 1 fest. Legen Sie die Anzahl der Back-End-Partitionen so fest, dass sie der Anzahl der Knoten (3) entspricht, und legen Sie Back-End-Worker auf 1 fest. Legen Sie den Redundanzfaktors nach Bedarf (2 oder 3) fest. Erhöhen Sie die Anzahl der Front-End-Worker, wenn Sie feststellen, dass die Nutzung der Front-End-CPU einen Engpass darstellt. Denken Sie daran, dass Back-End- und Front-End-Worker möglicherweise miteinander und mit anderen Pods um CPU-Ressourcen konkurrieren können.
Konfigurieren des Arbeitsspeicherprofils
Das Speicherprofil gibt die Speicherauslastung des Brokers für ressourcenbeschränkte Umgebungen an. Sie können aus vordefinierten Speicherprofilen wählen, die unterschiedliche Merkmale der Speicherauslastung aufweisen. Die Speicherprofileinstellung wird verwendet, um die Speicherauslastung der Frontend- und Back-End-Replikate zu konfigurieren. Das Speicherprofil interagiert mit den Kardinalitätseinstellungen, um die Gesamtspeicherauslastung des Brokers zu bestimmen.
Wichtig
Für diese Einstellung müssen Sie die Brokerressource ändern. Sie ist nur bei der ersten Bereitstellung mithilfe der Azure CLI oder des Azure-Portals konfiguriert. Eine neue Bereitstellung ist erforderlich, wenn Änderungen an der Broker-Konfiguration erforderlich sind. Weitere Informationen finden Sie unter Anpassen des Standardbrokers.
Um die Speicherprofileinstellungen für den MQTT-Broker zu konfigurieren, geben Sie die Speicherprofilfelder in der Spezifikation der Brokerressource während der Azure IoT Einsatz-Bereitstellung an.
Im folgenden Leitfaden zum Bereitstellen von Azure IoT Einsatz finden Sie im Abschnitt Konfiguration unter MQTT-Brokerkonfiguration die Einstellung für das Speicherprofil. Hier können Sie aus den verfügbaren Speicherprofilen in einer Dropdownliste auswählen.
Es gibt vordefinierte Speicherprofile mit unterschiedlichen Speicherauslastungsmerkmalen für die Veröffentlichung von Nachrichten. Es gibt keine Beschränkung für die Anzahl der Sitzungen oder Abonnements, die der Broker verarbeiten kann. Das Speicherprofil steuert nur die Speicherauslastung für PUBLISH-Datenverkehr.
Sehr klein
Verwenden Sie dieses Profil, wenn Sie begrenzte Speicherressourcen haben und der Veröffentlichungsdatenverkehr des Clients niedrig ist.
Wenn Sie dieses Profil verwenden, gilt Folgendes:
- Die maximale Speicherauslastung jedes Front-End-Replikats beträgt etwa 99 MiB, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Speicherauslastung jedes Back-End-Replikats beträgt etwa 102 MiB multipliziert mit der Anzahl der Back-End-Worker, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Nachrichtengröße beträgt 4 MB.
- Die maximale Größe des eingehenden Puffers für PUBLISH-Daten beträgt ca. 16 MiB pro Back-End-Worker. Die effektive Größe kann jedoch aufgrund von Rückdruckmechanismen niedriger sein, die aktiviert werden, wenn der Puffer 75% Kapazität erreicht, was zu einer Puffergröße von ca. 12 MiB führt. Abgelehnte Pakete haben eine PUBACK-Antwort mit einem Kontingent überschrittenen Fehlercode.
Empfehlungen bei Verwendung dieses Profils:
- Es sollte nur ein Front-End verwendet werden.
- Clients sollten keine großen Pakete senden. Sie sollten nur Pakete senden, die kleiner als 4 MiB sind.
Niedrig
Verwenden Sie dieses Profil, wenn Sie über begrenzte Speicherressourcen verfügen und Clients kleine Pakete veröffentlichen.
Wenn Sie dieses Profil verwenden, gilt Folgendes:
- Die maximale Speicherauslastung jedes Front-End-Replikats beträgt etwa 387 MiB, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Speicherauslastung jedes Back-End-Replikats beträgt etwa 390 MiB multipliziert mit der Anzahl der Back-End-Worker, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Nachrichtengröße beträgt 16 MB.
- Die maximale Größe des eingehenden Puffers für PUBLISH-Daten beträgt ca. 64 MiB pro Back-End-Worker. Die effektive Größe kann jedoch aufgrund von Rückdruckmechanismen niedriger sein, die aktiviert werden, wenn der Puffer 75% Kapazität erreicht, was zu einer Puffergröße von ca. 48 MiB führt. Abgelehnte Pakete haben eine PUBACK-Antwort mit einem Kontingent überschrittenen Fehlercode.
Empfehlungen bei Verwendung dieses Profils:
- Es sollten nur ein oder zwei Front-Ends verwendet werden.
- Clients sollten keine großen Pakete senden. Sie sollten nur Pakete senden, die kleiner als 16 MiB sind.
Mittelstufe
Verwenden Sie dieses Profil, wenn Sie eine moderate Anzahl von Clientnachrichten behandeln müssen.
„Mittel“ ist das Standardprofil.
- Die maximale Speicherauslastung jedes Front-End-Replikats beträgt etwa 1,9 GiB, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Speicherauslastung jedes Back-End-Replikats beträgt etwa 1,5 GiB multipliziert mit der Anzahl der Back-End-Worker, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Nachrichtengröße beträgt 64 MB.
- Die maximale Größe des eingehenden Puffers für PUBLISH-Daten beträgt ca. 576 MiB pro Back-End-Worker. Die effektive Größe kann jedoch aufgrund von Rückdruckmechanismen niedriger sein, die aktiviert werden, wenn der Puffer 75% Kapazität erreicht, was zu einer Puffergröße von ca. 432 MiB führt. Abgelehnte Pakete haben eine PUBACK-Antwort mit einem Kontingent überschrittenen Fehlercode.
Hoch
Verwenden Sie dieses Profil, wenn Sie eine große Anzahl von Clientnachrichten behandeln müssen.
- Die maximale Speicherauslastung jedes Front-End-Replikats beträgt etwa 4,9 GiB, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Speicherauslastung jedes Back-End-Replikats beträgt etwa 5,8 GiB multipliziert mit der Anzahl der Back-End-Worker, aber die tatsächliche maximale Speicherauslastung kann höher sein.
- Die maximale Nachrichtengröße beträgt 256 MB.
- Die maximale Größe des eingehenden Puffers für PUBLISH-Daten beträgt ca. 2 GiB pro Back-End-Worker. Die effektive Größe kann jedoch aufgrund von Rückdruckmechanismen niedriger sein, die aktiviert werden, wenn der Puffer 75% Kapazität erreicht, was zu einer Puffergröße von ca. 1,5 GiB führt. Abgelehnte Pakete haben eine PUBACK-Antwort mit einem Kontingent überschrittenen Fehlercode.
Berechnen der Gesamtspeicherauslastung
Die Speicherprofileinstellung gibt die Speicherauslastung für jedes Frontend- und Back-End-Replikat an und interagiert mit den Kardinalitätseinstellungen. Sie können die Gesamtspeicherauslastung mithilfe der Formel berechnen:
M_total = R_fe * M_fe + (P_be * RF_be) * M_be * W_be
Ort:
Variable | BESCHREIBUNG |
---|---|
M_total | Gesamtspeicherauslastung |
R_fe | Die Anzahl der Frontend-Replikate |
M_fe | Die Speicherauslastung der einzelnen Frontend-Replikate |
P_be | Die Anzahl der Backend-Partitionen |
RF_be | Back-End-Redundanzfaktor |
M_be | Die Speicherauslastung der einzelnen Back-End-Replikate |
W_be | Die Anzahl der Arbeitskräfte pro Backend-Replikat |
Wenn Sie z. B. das Profil für mittleren Arbeitsspeicher auswählen, hat das Profil eine Frontend-Speicherauslastung von 1,9 GB und eine Back-End-Speicherauslastung von 1,5 GB. Angenommen, die Brokerkonfiguration ist 2 Frontend-Replikate, 2 Back-End-Partitionen und ein Back-End-Redundanzfaktor von 2. Die Gesamtspeicherauslastung lautet:
2 * 1,9 GB + (2 * 2) * 1,5 GB * 2 = 15,8 GB
Im Vergleich dazu verfügt das Tiny-Speicherprofil über eine Frontend-Speicherauslastung von 99 MiB und Back-End-Speicherauslastung von 102 MiB. Wenn Sie die gleiche Brokerkonfiguration annehmen, lautet die Gesamtspeicherauslastung:
2 * 99 MB + (2 * 2) * 102 MB * 2 = 198 MB + 816 MB = 1,014 GB.
Wichtig
Der MQTT-Broker beginnt, Nachrichten abzulehnen, wenn der Speicher 75% voll ist.
Ressourcenbeschränkungen für Kardinalität und Kubernetes
Um Verhungern von Ressourcen im Cluster zu verhindern, wird der Broker standardmäßig so konfiguriert, dass Kubernetes CPU-Ressourcengrenzwerte angefordert werden. Durch die Skalierung der Anzahl von Replikaten oder Workern erhöht sich die Menge an erforderlichen CPU-Ressourcen proportional. Es wird ein Bereitstellungsfehler ausgegeben, wenn im Cluster nicht genügend CPU-Ressourcen verfügbar sind. Durch diese Benachrichtigung können Situationen vermieden werden, in denen die angeforderte Brokerkardinalität nicht über genügend Ressourcen für ein optimales Ausführungsverhalten verfügt. Es trägt auch zur Vermeidung potenzieller CPU-Konflikte und Pod-Räumungen bei.
Der MQTT-Broker fordert derzeit eine (1,0) CPU-Einheit pro Front-End-Worker und zwei (2,0) CPU-Einheiten pro Back-End-Worker an. Weitere Informationen finden Sie unter Kubernetes CPU-Ressourceneinheiten.
Die folgende Kardinalität würde beispielsweise die folgenden CPU-Ressourcen anfordern:
- Für Front-Ends: 2 CPU-Einheiten pro Front-End-Pod, insgesamt 6 CPU-Einheiten
- Für Back-Ends: 4 CPU-Einheiten pro Back-End-Pod (für zwei Back-End-Worker), multipliziert mit 2 (Redundanzfaktor), multipliziert mit 3 (Anzahl der Partitionen), insgesamt 24 CPU-Einheiten
{
"cardinality": {
"frontend": {
"replicas": 3,
"workers": 2
},
"backendChain": {
"partitions": 3,
"redundancyFactor": 2,
"workers": 2
}
}
}
Um diese Einstellung zu deaktivieren, legen Sie das Feld generateResourceLimits.cpu
in der Brokerressource auf Disabled
fest.
Das Feld generateResourceLimits
kann im Azure-Portal nicht geändert werden. Verwenden Sie die Azure CLI, um diese Einstellung zu deaktivieren.
Bereitstellung mit mehreren Knoten
Um Hochverfügbarkeit und Resilienz mit Bereitstellungen mit mehreren Knoten sicherzustellen, legt der MQTT-Broker von Azure IoT Einsatz automatisch Antiaffinitätsregeln für Back-End-Pods fest.
Diese Regeln sind vordefiniert und können nicht geändert werden.
Zweck von Antiaffinitätsregeln
Die Antiaffinitätsregeln stellen sicher, dass Back-End-Pods aus derselben Partition nicht auf demselben Knoten ausgeführt werden. Diese Funktion erleichtert das Verteilen der Last und bietet Resilienz bei Knotenfehlern. Insbesondere haben Back-End-Pods aus derselben Partition eine Antiaffinität zueinander.
Überprüfen von Antiaffinitätseinstellungen
Verwenden Sie den folgenden Befehl, um die Antiaffinitätseinstellungen für einen Back-End-Pod zu überprüfen:
kubectl get pod aio-broker-backend-1-0 -n azure-iot-operations -o yaml | grep affinity -A 15
Die Ausgabe zeigt die Antiaffinitätskonfiguration an, die dem folgenden Beispiel ähnelt:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchExpressions:
- key: chain-number
operator: In
values:
- "1"
topologyKey: kubernetes.io/hostname
weight: 100
Diese Regeln sind die einzigen Antiaffinitätsregeln, die für den Broker festgelegt werden.