Kann Mosquitto mehrere Makler unterstützen?

20

Ich habe Mosquitto für einen MQTT-Nachrichtenbroker für ein IoT-Heimnetzwerk in Betracht gezogen , bin jedoch besorgt, dass der Broker ein einzelner Fehlerpunkt sein könnte, der bei einem Ausfall mein gesamtes Netzwerk zum Erliegen bringen könnte, da alle Nachrichten durchgehen müssen Der Broker und keine Nachrichten können überhaupt übertragen werden, wenn der Broker aus irgendeinem Grund offline geht (z. B. versehentliches Entfernen des Steckers, Hardwarefehler usw.).

Wäre es möglich, mehrere Broker mit Mosquitto zu verwenden, um die Zuverlässigkeit des Netzwerks zu verbessern? Wenn es möglich ist, gibt es Nachteile / erhebliche Gemeinkosten bei der Verwendung mehrerer Broker?

Aurora0001
quelle

Antworten:

12

Ja, Mosquitto unterstützt mehrere Broker.

Mosquitto verwendet MQTT Bridges , um mehrere Broker zu verbinden und Nachrichten zwischen diesen Brokern weiterzuleiten. Auf diese Weise kann eine Brücke zwischen Ihrem primären Broker und einem Fallback-System hergestellt werden. Vermeiden Sie es jedoch, Loops zu erstellen. Wenn beide Broker ausgeführt werden, veröffentlichen Ihre Kunden sie beim primären Broker, der das Thema dann für jeden Abonnenten einschließlich des überbrückten sekundären Brokers veröffentlicht. Wenn der primäre Server ausfällt, stellen Ihre Clients fest (Verbindung abgelehnt, Server nicht verfügbar) und können auf den sekundären Server zurückgreifen, um ihn direkt zu veröffentlichen. (Ich bin mir noch nicht sicher, wie ich es andersherum beheben soll.) Da Sie nicht erwarten, dass der Client die Verbindung unanständig trennt, denke ich, dass "Last Will and Testament" hier nicht zutrifft im Namen eines getrennten Clients).

In diesem Beitrag werden jedoch die Nachteile dieses Ansatzes aufgeführt, insbesondere in Bezug auf Skalierbarkeit und Verfügbarkeit:

  • Die Bridge-Routing-Mechanismen lassen sich nicht gut skalieren, wenn Sie alle Nachrichten an die anderen Bridges weiterleiten
  • Der Kommunikationsaufwand zwischen Bridges ist erheblich, wenn Sie QoS 2 zwischen Bridges verwenden (was Sie tun müssen, wenn Sie Nachrichten zwischen Clients verbreiten möchten, die mit verschiedenen Bridges verbunden sind).
  • Es gibt kein Failover und keine hohe Verfügbarkeit. Wenn eine Broker-Bridge abstürzt, können Nachrichten verloren gehen
  • MQTT-Clients können nicht auf andere Brückenknoten migriert werden. MQTT-Sitzungen werden nicht über Bridges repliziert, sodass Sie alle Nachrichten und Abonnements in der Warteschlange verlieren, wenn Sie persistente MQTT-Sitzungen verwenden.
Ghanima
quelle
10

In .NET erlaubt die Implementierung, einen Client mit einem Broker zu verbinden, also würde ich sagen, warum nicht ...

MqttClient mqtt;
string broker = ini.getData("MQTT", "hostname");
mqtt = new MqttClient(broker);
mqtt.MqttMsgPublishReceived += mqtt_received;
mqtt.Connect(Guid.NewGuid().ToString());

Das Ding ist, müssen Sie Duplikate verwalten im Fall einer Notlösung , wenn die anderen Broker Nachrichten beginnen zu senden, oder die Kunden warnen.

Es kann verschiedene Möglichkeiten geben, wie jeder Broker sich gegenseitig abonniert und ein Testament erstellt, um sich und seine Kunden vor einem Fallback zu warnen!

Goufalite
quelle
Wie kann ein Broker ein Abonnement abschließen oder sich mit einem anderen Broker verbinden?
Bence Kaulics
1
Ich dachte an einen Client, der auf dem Server des Brokers verschachtelt war.
Goufalite
@Goufalite, das ist wirklich nützlich für MQTT im Allgemeinen, danke. Würdest du zufällig mehr über Mosquitto erfahren , den Makler, über den ich in der Frage gesprochen habe?
Aurora0001
Dies ist das Niedrigste, was ich über MQTT weiß (ich wusste nicht, dass es andere Broker wie HiveMQ gibt, bevor ich zu IoT SE kam). Was möchten Sie noch wissen? Du meinst Umsetzung?
Goufalite
@Goufalite interessiert nur, ob Mosquitto selbst mehrere Broker gleichzeitig betreibt. Wenn Sie einen Weg vorschlagen könnten, dies mit Mosquitto zu tun, oder Dokumentation verlinken, wäre das großartig.
Aurora0001