Azure Load Balancer で MQTT を通してみる

ほぼ備忘録。

 

Azure Load Balancer は、Azure へのトラフィックを分散することができます。

docs.microsoft.com

 

この中で、TCP の任意のポートを分散できる機能を持っています。

 

docs.microsoft.com

docs.microsoft.com

 

それでは、一つ試してみましょう。

MQTT の分散

通常、 Azure で IoT といえば IoT Hub を使うことが一般的ですが、非対応デバイスや、そもそも IoT Hub から繋げない独自実装などにつなげる際に、MQTT サーバと立てて LB で分散したいというケースもあると思います。今回は、そのケースを試してみましょう。

Azure 側に Mosquitto を立てる。

まず、 Azure Load Balancer と、そこに配置される VM を Azure 側にデプロイし、 Mosquitto をインストールします。

Azure Load Balancer と バックエンドプールとしての VM のつくり方はこちらを参考に。今回は Standard Load Balancer で立てます。

docs.microsoft.com

上記文書での注意点は一点、今回は HTTP を分散するわけではないので、正常性プローブは TCP で 1883 を( MQTT のデフォルトポート ) 通す設定を、負荷分散規則も 1883 を通すように設定しました。

 正常性プローブ

f:id:minorun40:20200209161903p:plain

 負荷分散規則

f:id:minorun40:20200209162155p:plain

 また、サーバ上での Mosquitto のインストールや設定はこちらを参考に。

take6shin.blogspot.com

 

この際に、上述のリンクを参考に、Mosquitto を起動し、topic を立てておきます。この場合は、topicA というものを立てました。

 

今回、クライアント側に MQTT.fxというツールを入れて検証してみます。

mqttfx.jensd.de

Azure の Standard Load Balancer の フロントエンドのグローバル IP アドレスとポート番号を設定し、topicA にメッセージを送信。

MQTT.fx の設定

f:id:minorun40:20200224114323p:plain



topicAへメッセージ送信

f:id:minorun40:20200209162954p:plain

サブスクライブしているクライアントで取得

f:id:minorun40:20200209163120p:plain

Azure 側の VM にて、topicA をサブスクライブしているクライアント側でメッセージが表示されました。無事届いていることが確認できます。

このように、Azure Load balancer で HTTP/HTTPS ではない TCP のポートを使うアプリケーション通信を通すことができます。いろいろ使えそうですね。