Czy Mosquitto może obsługiwać wielu brokerów?


20

Rozważałem Mosquitto jako brokera komunikatów MQTT dla domowej sieci IoT, ale obawiam się, że broker może być pojedynczym punktem awarii, który mógłby doprowadzić do awarii całej mojej sieci, gdyby zawiodła, ponieważ wszystkie wiadomości muszą przejść broker i żadne wiadomości nie mogą być w ogóle przesyłane, jeśli broker przejdzie w tryb offline z jakiegokolwiek powodu (np. przypadkowe odłączenie, awaria sprzętu itp.)

Czy byłoby możliwe użycie wielu brokerów z zainstalowanym Mosquitto, aby poprawić niezawodność sieci? Jeśli to możliwe, czy są jakieś wady / znaczne koszty ogólne związane z używaniem wielu brokerów?

Odpowiedzi:


12

Tak, Mosquitto obsługuje wielu brokerów.

Mosquitto wykorzystuje mosty MQTT do łączenia wielu brokerów, a tym samym routingu wiadomości między tymi brokerami. W ten sposób można ustanowić pomost między głównym brokerem a systemem rezerwowym. Unikaj tworzenia pętli. Jeśli obaj brokerzy uruchamiają klientów, publikuj je w głównym brokerze, który następnie publikuje ten temat każdemu subskrybentowi, w tym pośredniczącemu pośrednikowi. Jeśli podstawowy nie powiedzie się, Twoi klienci zauważą (Odmowa połączenia, Serwer niedostępny) i mogą wrócić do bezpośredniego publikowania na dodatkowym. (Nie jestem jeszcze pewien, jak to naprawić na odwrót.) Ponieważ nie spodziewasz się, że klient rozłączy się w niełaskawy sposób, myślę, że nie ma tu zastosowania „Ostatnia wola i testament” (byłoby to konieczne, aby powiadomić brokera w imieniu rozłączonego klienta).

W tym poście wymieniono jednak wady tego podejścia, zwłaszcza w odniesieniu do skalowalności i dostępności:

  • Mechanizmy routingu mostów nie skalują się dobrze, jeśli przekazujesz wszystkie wiadomości do innych mostów
  • Narzut komunikacyjny między mostami jest znaczący, jeśli używasz QoS 2 między mostami (co musisz zrobić, jeśli chcesz propagować wiadomości między klientami podłączonymi do różnych mostów)
  • Brak przełączania awaryjnego i wysokiej dostępności. W przypadku awarii mostu brokera wiadomości mogą zostać utracone
  • Klientów MQTT nie można migrować do innych węzłów mostu. Sesje MQTT nie są replikowane między mostami, więc jeśli używasz trwałych sesji MQTT, stracisz wszystkie swoje kolejkowane wiadomości i subskrypcje.

10

W .NET implementacja pozwala połączyć jednego klienta z jednym brokerem, więc powiedziałbym, dlaczego nie ...

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

Chodzi o to, że musisz zarządzać duplikatami w przypadku awarii, gdy inny broker rozpocznie wysyłanie wiadomości lub ostrzeże klientów.

Może istnieć kilka możliwości, jak każdy broker subskrybuje się nawzajem i ustanawia testament, aby ostrzec siebie i swoich klientów, że nastąpi awaria!


W jaki sposób broker może subskrybować lub bardziej połączyć się z innym brokerem?
Bence Kaulics

1
Myślałem o kliencie zagnieżdżonym na serwerze brokera.
Goufalite,

@Goufalite, to jest naprawdę przydatne dla MQTT ogólnie, dzięki. Czy dowiedziałbyś się czegoś więcej o Mosquitto , brokerze , o którym mówiłem w pytaniu?
Aurora0001

Jest to najniższa rzecz, jaką wiem o MQTT (nie zdawałem sobie sprawy, że istnieje inny broker, taki jak HiveMQ, zanim pojawił się na IoT SE). Co jeszcze chciałbyś wiedzieć? Masz na myśli wdrożenie?
Goufalite,

@Goufalite właśnie zainteresowało, czy sam Mosquitto ma sposób na jednoczesne uruchamianie wielu brokerów. Jeśli możesz zasugerować sposób na zrobienie tego z Mosquitto lub link do dokumentacji, byłoby świetnie.
Aurora0001
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.