모기가 여러 브로커를 지원할 수 있습니까?


20

홈 IoT 네트워크 용 MQTT 메시지 브로커로 Mosquitto 를 고려 하고 있었지만 브로커가 단일 메시지 지점 일 수 있기 때문에 모든 메시지를 통과해야하므로 실패하면 전체 네트워크를 중단시킬 수 있습니다. 브로커가 어떤 이유로 든 오프라인 상태가되면 (예 : 실수로 플러그를 뽑거나 하드웨어 고장 등) 메시지를 전송할 수 없습니다.

네트워크 안정성을 향상시키기 위해 Mosquitto가 설치된 여러 브로커를 사용할 수 있습니까? 가능한 경우 여러 브로커를 사용하는 데 단점이 있거나 상당한 오버 헤드가 있습니까?

답변:


12

예, 모스키토는 여러 브로커를 지원합니다.

Mosquitto는 MQTT Bridge 를 사용하여 여러 브로커를 연결하므로 이러한 모기 브로커간에 메시지를 라우팅합니다. 이 방법으로 기본 브로커와 폴백 시스템 간의 브리지를 설정할 수 있습니다. 그래도 루프를 만들지 마십시오. 두 브로커가 모두 클라이언트를 실행하면 기본 브로커에 공개 한 후 브릿지 된 보조 브로커를 포함하여 각 가입자 및 각 가입자에게 주제를 공개합니다. 기본에 장애가 발생하면 클라이언트는 (연결 거부, 서버를 사용할 수 없음)을 기록하고 보조에 직접 게시하도록 폴백 할 수 있습니다. (반대로 다른 방법으로 문제를 해결하는 방법을 잘 모르겠습니다.) 클라이언트가 비정상적으로 연결을 끊을 것으로 예상하지 않으므로 "마지막 유언장"은 여기에 적용되지 않는다고 생각합니다 (브로커에게 알리는 데 사용됨) 연결이 끊긴 클라이언트를 대신하여).

포스트는 그러나 특히 확장 성 및 가용성에 대한이 방법의 단점을 나열

  • 모든 메시지를 다른 브리지로 전달하면 브리지 라우팅 메커니즘이 제대로 확장되지 않습니다.
  • 브리지간에 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());

것이며, 당신은 중복 관리해야 다른 브로커가 메시지를 보내기 시작하거나 클라이언트를 경고합니다 때 대체의 경우를.

각 중개인이 서로를 구독하고 자신과 고객에게 경고가 발생하도록 마지막 유언장을 설정하는 것과 같은 여러 가지 가능성이있을 수 있습니다!


브로커가 어떻게 가입하거나 다른 브로커에 연결할 수 있습니까?
Bence Kaulics

1
클라이언트가 브로커의 서버에 중첩되어 있다고 생각했습니다.
Goufalite

@ Goufalite, 이것은 일반적으로 MQTT에 정말 유용합니다. 제가 질문에서 논의한 중개인 인 모스키토 에 대해 더 알고 싶으십니까 ?
Aurora0001

이것은 MQTT에 대해 내가 아는 가장 낮은 것입니다 (IoT SE에 오기 전에 HiveMQ와 같은 다른 브로커가 있다는 것을 알지 못했습니다). 다른 무엇을 알고 싶으십니까? 구현을 의미합니까?
Goufalite

@Goufalite는 Mosquitto 자체가 여러 브로커를 병렬로 실행할 수 있는지 여부에 관심이있었습니다. 당신이 모스키토로 그것을 할 수있는 방법을 제안하거나 훌륭한 문서를 링크 할 수 있다면.
Aurora0001
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.