# emqx的集群部署以及压测工具

# 使用版本

  • emqx-centos7-4.3.10-amd64.zip

# 搭建集群

  • 集群架构

    • img
    • LB是负载均衡,可以使用HAProxy /Nginx 负载均衡,目前使用nginx ,emqx的集群是两个及以上
  • 具体实现

    • nginx的配置

    • 版本在1.9.0及以上

    • stream {
        upstream stream_backend {
            zone tcp_servers 64k;
            #hash $remote_addr;
            server localhost|域名:1883 max_fails=2 fail_timeout=30s;
            server localhost|域名: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;
        }
      }
      
    • emqx的配置(/emqx/etc/emqx.conf)

       #172.16.10.2为emqx服务部署机的ip地址
       node.name = emqx@192.168.0.1
       # manual 手动加入集群
       # static 配置静态节点
       # mcast  使用 UDP 多播的方式发现节点
       # dns 使用 DNS A 记录的方式发现节点
       # etcd 使用 etcd 发现节点
       # k8s  使用 Kubernetes 发现节点
       cluster.discovery=manual
       #当 cluster.discovery=static 配置以下固定节点,多个节点间使用逗号,分隔
       cluster.static.seeds= emqx1@192.168.0.1,emqx2@192.168.0.2
      
      #当emqx的配置文件中cluster.discovery=manual,需要使用emqx的命令将节点手动加入集群,命令如下
      #查看当前集群的状态,在其中一台emqx的bin目录下,执行以下命令
      bin/emqx_ctl cluster status
      #结果如下,说明当前emqx集群有2个节点
      Cluster status: #{running_nodes => ['emqx@172.16.10.2','emqx@172.16.10.9'],
                        stopped_nodes => []}
      #加入集群的命令emqx@172.16.10.9为需要加入的节点
      bin/emqx_ctl cluster join emqx@172.16.10.9
      #emqx的集群命令帮助
      cluster join <Node>                                                   # Join the cluster 加入集群
      cluster leave                                                         # Leave the cluster  自身离开集群
      cluster force-leave <Node>                                            # Force the node leave from cluster 将指定节点移出集群
      cluster status                                                        # Cluster status  查看集群状态
      

# 压测工具

  • emqtt-bench

  • 下载地址 https://github.com/emqx/emqtt-bench

  • 使用命令

    • pub 发布消息
    • sub 订阅消息
    • conn 测试连接数
  • 使用简介

    参数 简写 可选值 默认值 说明
    --host -h - localhost 要连接的 MQTT 服务器地址
    --port -p - 1883 MQTT 服务端口
    --version -V 3 4 5 5 使用的 MQTT 协议版本
    --count -c - 200 客户端总数
    --startnumber -n - 0 客户端数量起始值
    --interval -i - 10 每间隔多少时间创建一个客户端;单位:毫秒
    --interval_of_msg -I - 1000 每间隔多少时间发送一个消息
    --username -u - 无;非必选 客户端用户名
    --password -P - 无;非必选 客户端密码
    --topic -t - 无;必选 发布的主题;支持站位符: %c:表示 ClientId %u:表示 Username %i:表示客户端的序列数
    --szie -s - 256 消息 Payload 的大小;单位:字节
    --qos -q - 0 Qos 等级
    --retain -r true false false 消息是否设置 Retain 标志
    --keepalive -k - 300 客户端心跳时间
    --clean -C true false true 是否以清除会话的方式建立连接
    --ssl -S true false false 是否启用 SSL
    --certfile - - 客户端 SSL 证书
    --keyfile - - 客户端 SSL 秘钥文件
    --ws - true false false 是否以 Websocket 的方式建立连接
    --ifaddr - - 指定客户端连接使用的本地网卡