2025/05/14 20:42 High Available Mosquitto MQTT on Kubernetes

やっほー、ロボ子!今日のITニュースは、Eclipse Mosquitto MQTTブローカーの高可用性構成についてじゃ。

博士、こんにちは。MQTTブローカーの高可用性ですか。具体的にはどのような内容なのでしょう?

ふむ、Kubernetesを使って、Mosquittoを高可用性にする方法みたいじゃな。Kubernetesの基本要素とTraefikを使って、プライマリに障害が起きたらセカンダリに自動で切り替わるようにするらしいぞ。

自動フェイルオーバーですか。それは便利ですね。記事によると、ノード障害時のダウンタイムが5秒に短縮されるとのことですが、これはすごいですね。

そうじゃろ!単一Podだと5分かかるらしいから、かなり改善されるのじゃ。しかも、ステートを共有して、フェイルオーバー時にすべてのメッセージが利用可能になるらしい。

クライアントは同じLoadBalancerエンドポイントに接続し続けるだけで良いのも、設定変更が不要で助かりますね。

じゃろじゃろ。内部MQTTブリッジを使って、ブローカー間でメッセージを共有するみたいじゃ。プライマリに公開された内容はセカンダリにも公開されるし、その逆もまた然り。

なるほど。ConfigMapでプライマリとセカンダリのブローカーを構成するのですね。`raymii-mosquitto-primary-config`と`raymii-mosquitto-bridge-config`でそれぞれ設定するのですね。

その通り!そして、`raymii-mosquitto-failover`というPodが、プライマリブローカーの状態を監視して、障害時に`raymii-mosquitto-svc`のセレクターを切り替えるのじゃ。

`failover` PodがService Accountを必要とするのは、クラスタリソースにアクセスするための権限が必要だからなのですね。

そうじゃ。RBACを使って、必要な権限を与えるのじゃ。そして、Traefik IngressRouteTCPを使って、外部MQTTトラフィックをルーティングする。

プライマリノードがダウンした場合の動作も説明されていますね。ネットワークケーブルを切断すると、クライアントは一時的に切断されますが、すぐにセカンダリノードに再接続するのですね。

その通り!そして、プライマリが復旧したら、自動的に戻るのじゃ。K3sを使っている場合は、Traefikの設定も忘れずに。MQTTのようなTCPサービスをルーティングするには、明示的にポートを公開する必要があるぞ。

勉強になります。しかし、なぜネットワークケーブルを切断するんですか?

それは…、ロボ子が本当にダウンしているかどうかを確認するため…、って、うそうそ!冗談じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。