Mosquitto (MQTT) - проблема в количестве подключений брокеров


#1

Настраиваю удаленные брокеры.

  1. добавляю cloudmqtt - работает.
  2. добавляю локальный сервер (с influx и grafana) - socket error. Причем то есть, то нет.

Погружаюсь в проблему, и выясняю, что mosquitto по умолчанию “тянет” какое-то количество брокеров. Но в самом WB к mosquitto, как я понял, подключаются и WB веб-сервер, и движок правил. А тут еще пара брокеров - и поведение становится плохо управляемым, - “кто первый встал, того и тапки” - работает подключение только тех нескольких брокеров, которые подключились первыми. Соответственно, либо я вижу свой сервер+облако, то тогда пропадает WB веб-сервер. Либо вижу WB веб-сервер и облако, но пропадает мой сервер. Либо я вижу облако, mosquitto_sub (для отладки, - он тоже занимает подключение?) - а все остальное socket error через раз.

Последние подключившиеся брокеры получают socket error.

При попытках задания доп.опций типа max_connection 10 - mosquitto не запускается, и WB перезагружается watchdog’ом.

Прочитал про Проблемы с MQTT bridge
Экспериментировать тяжело, только если отключать watchdog.

Как увеличить количество подключаемых брокеров? Или я что-то принципиально неправильно делаю, и подключаться несколькими брокерами к WB - плохая идея? Или для каждого брокера настроить отдельный порт?..


#2

Добрый день!

Не сталкивался с ограничением по количеству бриджей. А где вы прочитали про это ограничение?
Как вариант наврено можно попробовать настроить бридж с Wiren Board на ваш сервер, а уже с него - в CloudMQTT.


#3

В версии mosquitto 1.5 есть ограничение на 64 подключение. И то это для винды указано. 1.4 и Линукс не встречал ограничений


#4

А зачем вам несколько брокеров одновременно?!

А если протестировать работу с каждым из брокеров по-отдельности, нормально работает со всеми?


#5

Я уже здесь не понял, о чём вы говорите. Подробное описание того, что вы делаете в студию, все конфигурационные файлы тоже.

Это фраза совершенно не имеет смысла. mosquitto - это и есть брокер, что значит тянет количество брокеров? Если речь про количество клиентов у брокера mosquitto, то мне не известно про такое ограничение.

что значит “вижу”? Что значит “пропадает”?

ничего не понятно

смотрите логи mosquitto, он пишет всегда из-за чего не загружается

в чём проблема его отключить?


#6

Да, “дело было не в бобине”.

Это не про количество клиентов, это про то, на что я дал ссылку, а именно при некоторых настройках mosquitto опции:
keepalive_interval
restart_timeout
приводят к тому, что брокер сбрасывает подключение, при этом в логах появляется “socket error”.

Я пробую понять причину. Поведение mosquitto странное, при одних и тех же опциях и перезапуске mosquitto ошибки то есть, то нет.

Причем я “словил” socket error и disсonnect от mosquitto для сервисов WB:

1536745881: Socket error on client , disconnecting.
1536745882: Client has exceeded timeout, disconnecting.
1536745882: Socket error on client , disconnecting.
1536745883: Connecting bridge zeomon (192.168.0.190:1883)
1536745888: Socket error on client wb-modbus, disconnecting.
1536745889: New connection from 127.0.0.1 on port 1883.
1536745889: New client connected from 127.0.0.1 as wb-modbus (c1, k60).
1536745904: Connecting bridge zeomon (192.168.0.190:1883)

Там же, в логах, выше, многочисленные ошибки:
1536745880: Socket error on client , disconnecting.
1536745880: Socket error on client , disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Client has exceeded timeout, disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.
1536745881: Socket error on client , disconnecting.


#7

Вот bridge.conf, если закомментировать keepalive_interval и restart_timeout - все работает.
А в таком виде - пример логов выше. Причем отваливается не только zeomon, а через какое-то время начинают отваливаться и другие клиенты брокера, в том числе wb-клиенты. Как и когда кто отваливается - я понять не смог, поэтому первоначально и сделал неправильное предположение про число клиентов брокера.

connection zeomon
address 192.168.0.190
remote_username wirenboard
remote_password wirenboard
notifications true
notification_topic /client/arcmha5m/bridge_status
keepalive_interval 5
restart_timeout 5

topic /devices/# both 2 “” /client/arcmha5m
#topic /config/# both 2 “” /client/arcmha5m
#topic /rpc/# both 2 “” /client/arcmha5m


#8

Проверьте доступную память, на всякий случай… Очень похоже, что у вас в какой-то момент начинается свопинг, а он (на SDшку) зело медленный, и ведёт как раз к таким плавающим таймаутам и прочим глюкам.

P.S. Вообще, идея писать на Go (со статическим рантаймом) под такую платформу - не очень удачная…


Яндекс.Метрика