Может ли Mosquitto поддерживать нескольких брокеров?


20

Я рассматривал Mosquitto для брокера сообщений MQTT для домашней сети IoT, но я обеспокоен тем, что этот брокер может быть единственной точкой отказа, которая может привести к выходу из строя всей моей сети, если произойдет сбой, поскольку все сообщения должны пройти брокер и никакие сообщения не могут быть переданы вообще, если брокер по какой-либо причине переходит в автономный режим (например, случайное отключение, аппаратный сбой и т. д.)

Можно ли использовать несколько брокеров с установленным Mosquitto для повышения надежности сети? Если это возможно, есть ли какие-либо недостатки / значительные накладные расходы на использование нескольких брокеров?

Ответы:


12

Да, Mosquitto поддерживает несколько брокеров.

Mosquitto использует MQTT Bridges для соединения нескольких брокеров, таким образом, маршрутизируя сообщения между этими брокерами Mosquitto. Таким образом, можно установить мост между вашим основным брокером и резервной системой. Избегайте создания петель, хотя. Если оба брокера запускают ваши клиенты, публикуйте их у основного брокера, который затем публикует тему для каждого подписчика, включая вторичного брокера с мостовым соединением. Если первичный отказывает, ваши клиенты заметят (Соединение отказано, Сервер недоступен) и могут вернуться к прямой публикации на вторичный сервер. (Я пока не уверен, как это исправить, наоборот.) Поскольку вы не ожидаете, что клиент беззастенчиво отключится, я думаю, что «Последняя воля и Завет» здесь не применимы (это будет использоваться для уведомления брокера. от имени отключенного клиента).

Однако в этом посте перечислены недостатки этого подхода, особенно в отношении масштабируемости и доступности:

  • Механизмы маршрутизации мостов плохо масштабируются, если вы перенаправляете все сообщения на другие мосты
  • Затраты на связь между мостами значительны, если вы используете QoS 2 между мостами (что вам нужно сделать, если вы хотите распространять сообщения между клиентами, подключенными к разным мостам)
  • Нет аварийного переключения и высокой доступности. В случае сбоя посреднического моста сообщения могут потеряться
  • Клиенты MQTT не могут быть перенесены на другие узлы моста. Сеансы MQTT не реплицируются между мостами, поэтому вы потеряете все ваши сообщения и подписки в очереди, если вы используете постоянные сеансы MQTT.

10

В .NET реализация позволяет подключить одного клиента к одному брокеру, поэтому я бы сказал, почему нет ...

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

Дело в том, что вы должны управлять дубликатами в случае отказа, когда другой брокер начнет отправлять сообщения или предупреждать клиентов.

Там может быть несколько возможностей, как каждый брокер подписывается друг на друга и устанавливает Last Will и Завет, чтобы предупредить себя и своих клиентов, что произойдет отступление!


Как брокер может подписаться или как подключиться к другому брокеру?
Бенс Кауликс

1
Я думал о клиенте, размещенном на сервере брокера.
Гуфалит

@Goufalite, это действительно полезно для MQTT в целом, спасибо. Вы случайно не узнали о Москитто , брокере , о котором я говорил в этом вопросе?
Аврора0001

Это самая низкая вещь, которую я знаю о MQTT (я не знал, что были другие брокеры, такие как HiveMQ, до того, как я пришел на IoT SE). Что еще вы хотели бы знать? Вы имеете в виду реализацию?
Гуфалит

@Goufalite просто интересовался, есть ли у самого Mosquitto способ запустить несколько брокеров параллельно. Если бы вы могли предложить способ сделать это с помощью Mosquitto или связать документацию, это было бы здорово.
Аврора0001
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.