部署架构 (Deployment)

    典型部署结构:

    LB (负载均衡器) 负责分发设备的 MQTT 连接与消息到 EMQ X 集群,LB 提高 EMQ X 集群可用性、实现负载平衡以及动态扩容。

    部署架构推荐在 LB 终结 SSL 连接。设备与 LB 之间 TLS 安全连接,LB 与 EMQ X 之间普通 TCP 连接。这种部署模式下 EMQ X 单集群可轻松支持100万设备。

    公有云厂商 LB 产品:

    私有部署 LB 服务器:

    开源 LB

    是否支持 TLS 终结

    方案介绍

    https://www.haproxy.com/solutions/load-balancing.html

    PLUS 产品支持

    https://www.nginx.com/solutions/load-balancing/

    国内公有云部署推荐青云(EMQ X 合作伙伴),国外部署推荐 AWS 。私有部署推荐使用 HAProxy 作为 LB。

    EMQ X 集群

    EMQ X 节点集群部署在 LB 之后,建议部署在 VPC 或私有网络内。公有云厂商青云、AWS、UCloud、QCloud 均支持 VPC 网络。

    防火墙根据使用的 MQTT 接入方式,开启上述端口的访问权限。

    EMQ X 节点集群使用的 TCP 端口:

    4369

    集群节点发现端口

    5369

    集群节点PRC通道

    6369

    集群节点控制通道

    集群节点间如有防护墙,需开启上述 TCP 端口互访权限。

    1. 创建 VPC 网络。

    2. VPC 网络内创建 EMQ X 集群’私有网络’,例如: 192.168.0.0/24

    3. 私有网络内创建两台 EMQ X 主机,例如:

    4. 安装并集群 EMQ X 主机,具体配置请参考安装集群章节。

    5. 创建 LB(负载均衡器) 并指定公网 IP 地址。

    6. 在 LB 上创建 MQTT TCP 监听器:

    _images/deploy_2.png

    或创建 SSL 监听器,并终结 SSL 在 LB :

    1. MQTT 客户端连接 LB 公网地址测试。

    亚马逊(AWS)部署

    1. 私有网络内创建两台 EMQ X 主机,指定上面创建的 VPC 网络,例如:

      emqx1

      192.168.0.2

      emqx2

      192.168.0.3

    2. 在安全组中,开放 MQTT 服务的 TCP 端口,比如1883, 8883。

    3. 安装并集群 EMQ X 主机,具体配置请参考安装集群章节。

    4. 创建 ELB (Classic负载均衡器),指定 VPC 网络,并指定公网 IP 地址。

    5. 在 ELB 上创建 MQTT TCP 监听器:

    _images/deploy_4.png

    或创建 SSL 监听器,并终结 SSL 在 LB :

    1. MQTT 客户端连接 LB 公网地址测试。

    私有网络部署

    EMQ X 集群直接挂 DNS 轮询,设备通过域名或者 IP 地址列表访问:

    1. 部署 EMQ X 集群,具体参考`程序包安装`与`集群配置`文档。

    2. EMQ X 节点防火墙开启外部 MQTT 访问端口,例如1883, 8883。

    3. 设备通过 IP 地址列表或域名访问 EMQ X 集群。

    注解

    产品部署不推荐这种部署方式。

    HAProxy 作为 LB 部署 EMQ X 集群,并终结 SSL 连接:

    1. 创建 EMQ X 集群节点,例如:
    1. 配置 /etc/haproxy/haproxy.cfg,示例:

    NGINX Plus 产品作为 EMQ X 集群 LB,并终结 SSL 连接:

    1. 注册 NGINX Plus 试用版,Ubuntu 下安装:

    2. 创建 EMQ X 节点集群,例如:

    节点

    IP 地址

    emqx1

    192.168.0.2

    emqx2

    192.168.0.3

      1. upstream stream_backend {
      2. zone tcp_servers 64k;
      3. hash $remote_addr;
      4. server 192.168.0.3:1883 max_fails=2 fail_timeout=30s;
      5. }
      6. server {
      7. listen 8883 ssl;
      8. proxy_pass stream_backend;
      9. proxy_buffer_size 4k;
      10. ssl_handshake_timeout 15s;
      11. ssl_certificate /etc/emqx/certs/cert.pem;
      12. ssl_certificate_key /etc/emqx/certs/key.pem;
      13. }