Skip to content

ロードバランサーの設定

ロードバランサー(LB)は複数のネットワークコンポーネント間で負荷を分散し、リソースの使用を最適化して過負荷によるシステム障害を回避します。LBはEMQXにおいて必須のコンポーネントではありませんが、以下のような明確なシステム上の利点をもたらします。

  • EMQXの負荷を分散し、単一ノードの過負荷を回避する。
  • クライアントの設定を簡素化し、クライアントはLBにのみ接続すればよく、クラスター内のスケーリングを気にする必要がない。
  • TLS/SSL終端によりEMQXクラスターの負荷を軽減する。
  • クラスターの前面にLBを配置することで不要なトラフィックを遮断し、悪意ある攻撃からEMQXクラスターを保護してセキュリティを向上させる。

本節では、EMQXにおけるLBの設定方法について解説します。

デプロイメントアーキテクチャ

ここでは、3つの異なるロードバランサーのデプロイメントアーキテクチャを紹介します。

TCPロードバランサー

LBを構成したEMQXクラスターでは、LBが受信したTCPトラフィックを処理し、受け取ったMQTT接続要求やメッセージを異なるEMQXノードに分配します。典型的なデプロイメントアーキテクチャは以下の通りです。

TLS終端

TLS終端とロードバランサー

SSL/TLSが有効な場合、SSL/TLS接続をLBで終端することを推奨します。つまり、クライアントとLB間はSSL/TLSで保護し、LBとEMQXノード間はTCP接続を使用することで、EMQXクラスターのパフォーマンスを最大化します。アーキテクチャは以下の通りです。

image

ハイブリッドデプロイメント

クラウドサービスプロバイダーのLBを接続および負荷分散層として利用したいが、TLS終端をサポートしていない、またはプロキシプロトコルなどのTLS機能が不足している場合は、ハイブリッドデプロイメントを選択できます。EMQXの前にHAProxyやNGINXを配置してSSL/TLS接続を終端します。

EMQXで直接TLS接続を処理する場合と比べて、より高いパフォーマンス効果が期待できます。デプロイメントアーキテクチャは以下の通りです。

EMQXロードバランシングハイブリッドデプロイメント

負荷分散デプロイクラスターのほかに、DNSラウンドロビンを利用してEMQXクラスターに直接接続する方法もあります。これはすべてのノードをDNSラウンドロビンリストに追加し、デバイスがドメイン名またはIPアドレスリストを介してクラスターにアクセスする方法です。ただし、本番環境でのDNSラウンドロビンの利用は一般的に推奨されません。

実IPおよびTLS証明書情報の取得

LBをデプロイした後、EMQXは通常クライアントの実際の送信元IPやTLS証明書情報を取得する必要があります。これにはLBでプロキシプロトコルの設定を有効にするか、実IPを取得するための関連設定を有効化する必要があります。

LBでプロキシプロトコルを有効にした場合、EMQXの対応するリスナーでもproxy_protocol設定を有効にする必要があります。例えば、TCP 1883リスナーの場合、設定ファイルに以下を追加します。

bash
listeners.tcp.default {
  bind = "0.0.0.0:1883"
  max_connections = 1024000

  proxy_protocol = true
}

LBでのプロキシプロトコル有効化方法については、各LBのドキュメントを参照してください。プロキシプロトコルをサポートしないLB製品でも、バックエンドサービスが実際のクライアントIPを取得できる場合があります。LBやクラウドサービスプロバイダーの仕様に応じて適切に設定してください。

クライアントTLS証明書情報

クライアント証明書情報(Common Name(CN)やSubjectなど)を転送できるのはプロキシプロトコルv2のみです。ロードバランサーがクライアント証明書情報をTCPリスナーに送信する場合は、プロキシプロトコルv2を使用していることを確認してください。

LB製品の選択

現在、多くのLB製品が存在し、オープンソース版や商用版、パブリッククラウドプロバイダーのロードバランシングサービスも利用可能です。

パブリッククラウド向けLB製品:

クラウドプロバイダーSSL終端対応プロキシプロトコル対応LB製品
AWS対応対応https://aws.amazon.com/elasticloadbalancing/?nc1=h_ls
Azure不明不明https://azure.microsoft.com/en-us/products/load-balancer/
Google Cloud対応対応https://cloud.google.com/load-balancing

プライベートクラウド向けLB製品:

オープンソースLBSSL終端対応プロキシプロトコル対応ドキュメント/URL
HAProxy対応対応https://www.haproxy.com/solutions/load-balancing.html
NGINX対応対応https://www.nginx.com/solutions/load-balancing/

以下の2ページでは、プライベートにデプロイしたLBサーバーを例に、EMQXクラスターの設定およびロードバランス方法を紹介します。