ADC

MQTT負荷分散

メッセージキューテレメトリトランスポート(MQTT)は、モノのインターネット(IoT)用のOASIS標準メッセージングプロトコルです。MQTTは、IoTシステム内で効果的な通信を提供する柔軟で使いやすいテクノロジーです。MQTTはブローカーベースのプロトコルであり、クライアントとブローカー間のメッセージ交換を容易にするために広く使用されています。

MQTTの次の主な利点により、MQTTはIoTデバイスに最適なオプションになります。

  • 信頼性
  • 速い応答時間
  • 無制限のデバイスをサポートする機能
  • Publish/subscribe 多対多のコミュニケーションに最適なメッセージング

IoTは、センサー、ソフトウェア、ネットワーク接続、および必要な電子機器が組み込まれた相互接続されたデバイスのネットワークです。組み込みコンポーネントにより、IoTデバイスはデータを収集および交換できます。IoTデバイスの使用の増加は、ネットワークインフラストラクチャに複数の課題をもたらし、スケールが目立ったものです。IoTデバイスの大規模な展開では、各IoTデバイスによって生成されたデータを迅速に分析する必要があります。スケール要件とリソースの効率的な使用を実現するには、ブローカープールの負荷を均等に分散する必要があります。MQTTプロトコルのサポートにより、IoT展開でCitrix ADCアプライアンスを使用して、MQTTトラフィックの負荷分散を行うことができます。

次の図は、Citrix ADCアプライアンスを使用してMQTTトラフィックの負荷を分散するMQTTアーキテクチャを示しています。

MQTTシステム

MQTTプロトコルを使用したIoTデプロイメントには、次のコンポーネントがあります。

  • MQTTブローカー。クライアントからすべてのメッセージを受信し、メッセージを適切な宛先クライアントにルーティングするサーバー。ブローカーは、すべてのメッセージの受信、メッセージのフィルタリング、各メッセージのサブスクライブ者の決定、およびこれらのサブスクライブされたクライアントへのメッセージの送信を担当します。ブローカーは、すべてのメッセージが通過する必要のある中央ハブです。
  • MQTTクライアント。マイクロコントローラーから本格的なサーバーまで、MQTTライブラリを実行し、ネットワーク経由でMQTTブローカーに接続するすべてのデバイス。パブリッシャーとサブスクライバーはどちらもMQTTクライアントです。パブリッシャーとサブスクライバーのラベルは、クライアントがメッセージを公開しているか、メッセージを受信するようにサブスクライブしているかを示します。
  • MQTTロードバランサー。Citrix ADCアプライアンスは、MQTTトラフィックを負荷分散するためにMQTT負荷分散仮想サーバーで構成されています。

一般的な IoT 展開では、ブローカー(サーバーのクラスタ)が IoT デバイスのグループ(IoT クライアント)を管理します。Citrix ADCアプライアンスは、クライアントID、トピック、ユーザー名などのさまざまなパラメーターに基づいて、ブローカーへのMQTTトラフィックの負荷を分散します。

MQTTトラフィックの負荷分散を構成する

Citrix ADCアプライアンスでMQTTトラフィックの負荷を分散するには、次の構成タスクを実行します。

  1. 構成、設定 MQTT/MQTT_TLS サービスまたはサービスグループ。
  2. 構成、設定 MQTT/MQTT_TLS 仮想サーバーの負荷分散。
  3. バインドする MQTT/MQTT_TLS へのサービス MQTT/MQTT_TLS 仮想サーバーの負荷分散。
  4. 構成、設定 MQTT/MQTT_TLS コンテンツスイッチング仮想サーバー。
  5. ターゲットの負荷分散仮想サーバーを指定するコンテンツスイッチングアクションを構成します
  6. コンテンツスイッチングポリシーを構成します。
  7. コンテンツスイッチングポリシーを、特定の負荷分散仮想サーバーにリダイレクトするように既に構成されているコンテンツスイッチング仮想サーバーにバインドします。
  8. 構成を保存します。

CLIを使用してMQTTトラフィックのロードバランシングを設定するには

構成、設定 MQTT/MQTT_TLS サービスまたはサービスグループ。

add service <name> <IP> <protocol> <port>
add servicegroup <ServiceGroupName> <Protocol>
bind servicegroup <serviceGroupName> <IP> <port>
<!--NeedCopy-->

例:

add service srvc1 10.106.163.3 MQTT 1883
add servicegroup srvcg1 MQTT
bind servicegroup srvcg1 10.106.163.3 1883
<!--NeedCopy-->

構成、設定 MQTT/MQTT_TLS 仮想サーバーの負荷分散。

add lb vserver <name> <protocol> <IPAddress> <port>
<!--NeedCopy-->

例:

add lb vserver lb1 MQTT 10.106.163.9 1883
<!--NeedCopy-->

バインドする MQTT/MQTT_TLS MQTT負荷分散仮想サーバーへのサービスまたはサービスグループ。

bind lb vserver <name> <serviceName>
bind lb vserver <name> <servicegroupName>
<!--NeedCopy-->

例:

bind lb vserver lb1 srvc1
bind lb vserver lb1 srvcg1
<!--NeedCopy-->

構成、設定 MQTT/MQTT_TLS コンテンツスイッチング仮想サーバー。

add cs vserver <name> <protocol> <IPAddress> <port>
<!--NeedCopy-->

例:

add cs vserver cs1 MQTT 10.106.163.13 1883
<!--NeedCopy-->

ターゲットの負荷分散仮想サーバーを指定するコンテンツスイッチングアクションを構成します。

add cs action <name> -targetLBVserver <string> [-comment <string>]
<!--NeedCopy-->

例:

add cs action act1 -targetlbvserver lbv1
<!--NeedCopy-->

コンテンツスイッチングポリシーを構成します。

add cs policy <policyName> [-url <string> | -rule <expression>] –action <actName>
<!--NeedCopy-->

例:

add cs policy cspol1  -rule  “MQTT.COMMAND.EQ(CONNECT) && MQTT.CONNECT.FLAGS.QOS.eq(2)” -action act1
<!--NeedCopy-->

コンテンツスイッチングポリシーを、特定の負荷分散仮想サーバーにリダイレクトするように既に構成されているコンテンツスイッチング仮想サーバーにバインドします。

bind cs vserver <virtualServerName> -policyName <policyName> -priority <positiveInteger>
<!--NeedCopy-->

例:

bind cs vserver cs1 –policyName cspol1 -priority 20
<!--NeedCopy-->

構成を保存します。

save ns config
<!--NeedCopy-->

GUIを使用してMQTTトラフィックの負荷分散を構成するには

  1. トラフィック管理に移動します > 負荷分散 > 仮想サーバー、およびタイプMQTTまたはの負荷分散仮想サーバーを作成します MQTT_TLS 。**
  2. タイプMQTTのサービスまたはサービスグループを作成します。
  3. サービスをMQTT仮想サーバーにバインドします。
  4. [保存] をクリックします。

MQTTメッセージの長さの制限

Citrix ADCアプライアンスは、メッセージ長が65536バイトを超えるメッセージをジャンボパケットとして扱い、デフォルトで破棄します。dropmqttjumbomessage lbパラメーターは、ジャンボパケットを処理するかどうかを決定します。このパラメーターはデフォルトで YESに設定されています。これは、ジャンボMQTTパケットがデフォルトでドロップされることを意味します。このパラメータが NOに設定されている場合、ADCアプライアンスはメッセージ長が65536バイトを超えるパケットも処理します。

CLIを使用してジャンボパケットを処理するようにADCアプライアンスを構成するには:

Set lb parameter –dropMqttJumboMessage [YES | NO]
<!--NeedCopy-->

例:

set lb parameter –dropMqttJumboMessage no
<!--NeedCopy-->
MQTT負荷分散