Skip to content

Latest commit

 

History

History
251 lines (178 loc) · 8.04 KB

deploy.rst

File metadata and controls

251 lines (178 loc) · 8.04 KB

部署架构

EMQ X集群作为物联网接入服务(IoT Hub),部署在青云、AWS、阿里等公有云或企业私有云平台。

典型部署结构:

_static/images/deploy_1.png

LB(负载均衡)

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

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

公有云厂商LB产品:

云计算厂商 是否支持SSL终结 LB产品介绍
青云 https://docs.qingcloud.com/guide/loadbalancer.html
AWS https://aws.amazon.com/cn/elasticloadbalancing/
阿里云 https://www.aliyun.com/product/slb
UCloud 未知 https://ucloud.cn/site/product/ulb.html
QCloud 未知 https://www.qcloud.com/product/clb

私有部署LB服务器:

开源LB 是否支持SSL终结 方案介绍
HAProxy https://www.haproxy.com/solutions/load-balancing.html
NGINX PLUS产品支持 https://www.nginx.com/solutions/load-balancing/

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

EMQ X集群

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

EMQ X默认开启的MQTT服务TCP端口:

1883 MQTT协议端口
8883 MQTT/SSL端口
8083 MQTT/WebSocket端口
8084 MQTT/WebSocket(SSL)端口
8080 管理 API 端口
18083 Dashboard 端口

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

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

4369 集群节点发现端口
5369 集群节点数据通道
6369 集群节点控制通道

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

青云(QingCloud)部署

  1. 创建VPC网络。

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

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

    emqx1

    192.168.0.2

    emqx2

    192.168.0.3

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

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

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

_static/images/deploy_2.png

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

_static/images/deploy_3.png

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

亚马逊(AWS)部署

  1. 创建VPC网络。

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

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

    emqx1

    192.168.0.2

    emqx2

    192.168.0.3

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

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

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

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

_static/images/deploy_4.png

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

_static/images/deploy_5.png

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

阿里云部署

.. TODO:: 阿里云LB终结SSL?

私有网络部署

EMQ X集群直连

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

  1. 部署EMQ X集群,具体参考`程序包安装`与`集群配置`文档。
  2. EMQ X节点防火墙开启外部MQTT访问端口,例如1883, 8883。
  3. 设备通过IP地址列表或域名访问EMQ X集群。

Note

不推荐这种部署方式。

HAProxy -> EMQ X

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

  1. 创建EMQ X集群节点,例如:
节点 IP地址
emqx1 192.168.0.2
emqx2 192.168.0.3
  1. 配置/etc/haproxy/haproxy.cfg,示例:

    listen mqtt-ssl
        bind *:8883 ssl crt /etc/ssl/emqx/emqx.pem no-sslv3
        mode tcp
        maxconn 50000
        timeout client 600s
        default_backend emqx_nodes
    
    backend emqx_nodes
        mode tcp
        balance source
        timeout server 50s
        timeout check 5000
        server emqx1 192.168.0.2:1883 check inter 10000 fall 2 rise 5 weight 1
        server emqx2 192.168.0.3:1883 check inter 10000 fall 2 rise 5 weight 1
        source 0.0.0.0 usesrc clientip
    

NGINX Plus -> EMQ X

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

  1. 注册NGINX Plus试用版,Ubuntu下安装: https://cs.nginx.com/repo_setup
  2. 创建EMQ X节点集群,例如:
节点 IP地址
emqx1 192.168.0.2
emqx2 192.168.0.3
  1. 配置/etc/nginx/nginx.conf,示例:

    stream {
        # Example configuration for TCP load balancing
    
        upstream stream_backend {
            zone tcp_servers 64k;
            hash $remote_addr;
            server 192.168.0.2:1883 max_fails=2 fail_timeout=30s;
            server 192.168.0.3:1883 max_fails=2 fail_timeout=30s;
        }
    
        server {
            listen 8883 ssl;
            status_zone tcp_server;
            proxy_pass stream_backend;
            proxy_buffer_size 4k;
            ssl_handshake_timeout 15s;
            ssl_certificate     /etc/emqx/certs/cert.pem;
            ssl_certificate_key /etc/emqx/certs/key.pem;
        }
    }