2.x版本之前都叫emqtt,3.x之后版本都叫emqx
下载地址:https://www.emqx.io/cn/downloads#broker
安装部署
1.下载软件包后上传到服务器,解压
unzip emqttd-centos7-v2.0.zip
2.以调试模式启动,检查服务是否正常
[root@localhost emqttd]# cd emqttd && ./bin/emqttd console Exec: /root/emqttd/erts-9.0/bin/erlexec -boot /root/emqttd/releases/2.3.7/emqttd -mode embedded -boot_var ERTS_LIB_DIR /root/emqttd/erts-9.0/../lib -mnesia dir "/root/emqttd/data/mnesia/emq@127.0.0.1" -config /root/emqttd/data/configs/app.2020.05.23.23.38.19.config -args_file /root/emqttd/data/configs/vm.2020.05.23.23.38.19.args -vm_args /root/emqttd/data/configs/vm.2020.05.23.23.38.19.args -- console Root: /root/emqttd /root/emqttd Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:32] [hipe] [kernel-poll:true] starting emqttd on node 'emq@127.0.0.1' emqttd ctl is starting...[ok] emqttd hook is starting...[ok] emqttd router is starting...[ok] emqttd pubsub is starting...[ok] emqttd stats is starting...[ok] emqttd metrics is starting...[ok] emqttd pooler is starting...[ok] emqttd trace is starting...[ok] emqttd client manager is starting...[ok] emqttd session manager is starting...[ok] emqttd session supervisor is starting...[ok] emqttd wsclient supervisor is starting...[ok] emqttd broker is starting...[ok] emqttd alarm is starting...[ok] emqttd mod supervisor is starting...[ok] emqttd bridge supervisor is starting...[ok] emqttd access control is starting...[ok] emqttd system monitor is starting...[ok] emqttd 2.3.7 is running now Eshell V9.0 (abort with ^G) (emq@127.0.0.1)1> Load emq_mod_presence module successfully. dashboard:http listen on 0.0.0.0:18083 with 4 acceptors. mqtt:tcp listen on 127.0.0.1:11883 with 4 acceptors. mqtt:tcp listen on 0.0.0.0:1883 with 16 acceptors. mqtt:ws listen on 0.0.0.0:8083 with 4 acceptors. mqtt:ssl listen on 0.0.0.0:8883 with 16 acceptors. mqtt:wss listen on 0.0.0.0:8084 with 4 acceptors. mqtt:api listen on 0.0.0.0:8080 with 4 acceptors.
3.查看服务启动状态
[root@localhost ~]# ./emqttd/bin/emqttd_ctl status Node 'emq@127.0.0.1' is started emqttd 2.3.7 is running
4.如果服务启动正常,更改为后台启动,启动错误日志将输出到log目录下
./bin/emqttd start
5.EMQ 消息服务器提供了状态监控 URL
http://localhost:8080/status
6.控制台 URL: http://localhost:18083/ ,默认登录用户名: admin, 密码: public。
7.停止服务器:
./bin/emqttd stop
调试配置
1.EMQ 2.0 消息服务器默认占用的 TCP 端口包括
1883 #MQTT 协议端口 8883 #MQTT/SSL 端口 8083 #MQTT/WebSocket 端口 8084 #MQTT/WebSocket/SSL监听端口 8080 #HTTP API 端口 18083 #Dashboard 管理控制台端口 11883 #MQTT/TCP内部协议监听端口 4369 #emq集群通信端口 6369 #erlang集群间通信端口
2.可通过 etc/emq.conf 配置文件的 ‘listener’ 段落设置(18083是由emq_dashboard插件控制,配置文件在etc/plugins/emq_dashboard.conf)
## TCP Listener: 1883, 127.0.0.1:1883, ::1:1883 listener.tcp.external = 0.0.0.0:1883 ## SSL Listener: 8883, 127.0.0.1:8883, ::1:8883 listener.ssl.external = 8883 ## External MQTT/WebSocket Listener listener.ws.external = 8083 ## HTTP Management API Listener listener.api.mgmt = 127.0.0.1:8080
3.EMQ 消息服务器主要配置文件
etc/emq.conf #EMQ 2.0 消息服务器配置文件 etc/acl.conf #EMQ 2.0 默认ACL规则配置文件 etc/plugins/*.conf #EMQ 2.0 各类插件配置文件
4.主配置文件
#集群名称 cluster.name = emqttd@192.168.1.1 #自动发现策略 #manual 手工命令创建集群 #static 静态节点列表自动集群 #mcast UDP 组播方式自动集群 #dns DNS A 记录自动集群 #etcd 通过 etcd 自动集群 #k8s Kubernetes 服务自动集群 cluster.discovery = manual #启用集群自愈 cluster.autoheal = on #自动清除宕机节点 cluster.autoclean = 5m #Erlang 虚拟机允许的最大进程数,一个 MQTT 连接会消耗2个 Erlang 进程,所以参数值 > 最大连接数 * 2 node.process_limit 256000 #Erlang 虚拟机允许的最大 Port 数量,一个 MQTT 连接消耗1个 Port,所以参数值 > 最大连接数 node.max_ports 65536 #Erlang 分布节点间通信使用 TCP 连接端口范围。注: 节点间如有防火墙,需要配置该端口段 node.dist_listen_min 6369 node.dist_listen_max 6379 #日志参数 log.console = console log.console.level = error log.error.file = log/error.log log.crash = on log.crash.file = log/crash.log log.syslog = on log.syslog.level = error #ClientId 最大允许长度 mqtt.max_clientid_len = 1024 #MQTT 最大报文尺寸 mqtt.max_packet_size = 64KB #MQTT 客户端最大允许闲置时间(Socket 连接建立,但未收到 CONNECT 报文): mqtt.client.idle_timeout = 30 #启用客户端连接统计 mqtt.client.enable_stats = off #强制 GC 设置 mqtt.conn.force_gc_count = 100 #允许任意客户端登录 mqtt.allow_anonymous = true #默认访问控制(ACL)文件 mqtt.acl_nomatch = allow mqtt.acl_file = etc/acl.conf mqtt.session.upgrade_qos = off mqtt.session.max_inflight = 32 mqtt.session.retry_interval = 20s mqtt.session.max_awaiting_rel = 100 mqtt.session.await_rel_timeout = 20s mqtt.session.enable_stats = off mqtt.session.expiry_interval = 2h #MQTT 消息队列参数设置 #队列类型。simple: 简单队列,priority: 优先级队列 mqtt.mqueue.type = simple #主题(Topic)队列优先级设置 mqtt.mqueue.priority = topic/1=10,topic/2=8 #队列长度, infinity 表示不限制 mqtt.mqueue.max_length = 0 #解除告警水位线 mqtt.mqueue.low_watermark = 20% #队列满告警水位线 mqtt.mqueue.high_watermark = 60% #是否缓存 QoS0 消息 mqtt.mqueue.store_qos0 = true #系统发布 $SYS 消息周期 mqtt.broker.sys_interval = 60s #发布订阅(PubSub)参数设置 mqtt.pubsub.pool_size = 8 mqtt.pubsub.by_clientid = true mqtt.pubsub.async = true #桥接(Bridge)参数设置 mqtt.bridge.max_queue_len = 10000 mqtt.bridge.ping_down_interval = 1s #插件(Plugin) 配置目录设置 mqtt.plugins.etc_dir = etc/plugins/ mqtt.plugins.loaded_file = data/loaded_plugins #MQTT/TCP 监听器 - 1883 listener.tcp.external = 0.0.0.0:1883 listener.tcp.external.acceptors = 16 listener.tcp.external.max_clients = 102400 listener.tcp.external.access.2 = allow all listener.tcp.external.backlog = 1024 listener.tcp.external.buffer = 4KB listener.tcp.external.nodelay = true listener.tcp.internal = 127.0.0.1:11883 listener.tcp.internal.acceptors = 16 listener.tcp.internal.max_clients = 102400 listener.tcp.internal.backlog = 512 listener.tcp.internal.tune_buffer = on listener.tcp.internal.buffer = 1MB listener.tcp.internal.recbuf = 4KB listener.tcp.internal.sndbuf = 1MB listener.tcp.internal.nodelay = true #MQTT/SSL 监听器 - 8883 listener.ssl.external = 8883 listener.ssl.external.acceptors = 16 listener.ssl.external.max_clients = 1024 listener.ssl.external.access.1 = allow all listener.ssl.external.handshake_timeout = 15 listener.ssl.external.keyfile = etc/certs/key.pem listener.ssl.external.certfile = etc/certs/cert.pem #MQTT/WebSocket 监听器 - 8083 listener.ws.external = 8083 listener.ws.external.acceptors = 4 listener.ws.external.max_clients = 64 listener.ws.external.access.1 = allow all #MQTT/WebSocket/SSL 监听器 - 8084 listener.wss.external = 8084 listener.wss.external.acceptors = 4 listener.wss.external.max_clients = 64 listener.wss.external.access.1 = allow all listener.wss.external.handshake_timeout = 15s listener.wss.external.keyfile = {{ platform_etc_dir }}/certs/key.pem listener.wss.external.certfile = {{ platform_etc_dir }}/certs/cert.pem #HTTP API 监听器 - 8080 listener.api.mgmt = 127.0.0.1:8080 listener.api.mgmt.acceptors = 4 listener.api.mgmt.max_clients = 64 listener.api.mgmt.access.1 = allow all #Erlang 虚拟机监控设置 sysmon.long_gc = false sysmon.long_schedule = 240 sysmon.large_heap = 8MB sysmon.busy_port = false sysmon.busy_dist_port = true
分布式集群
- 默认方式为手动加入集群,配置位于
cluster.discovery = manual
- 以三台机器为例,每台主机更改配置文件中的node.name
#节点1 node.name = emq@192.168.2.4 #节点2 node.name = emq@192.168.2.6 #节点3 node.name = emq@192.168.2.100
- 分别启动三个节点
#节点1,2,3都是这个命令 ./bin/emqttd start
- 加入集群
#只需要在其中额外两台节点添加就可以 ./bin/emqttd_ctl cluster join emq@192.168.2.100
- 查看集群节点状态
#任意一台都可以查看 ./bin/emqttd_ctl cluster status Cluster status: [{running_nodes,['emq@192.168.2.4','emq@192.168.2.100', 'emq@192.168.2.6']}]
- 节点退出集群
#主动离开方式 ./bin/emqttd_ctl cluster leave #被动离开方式,被踢出去 ./bin/emqttd_ctl cluster remove emq@192.168.1.1
上面是手动方式创建的集群,下面在配置文件中规定好集群,改好配置,直接启动就好了
cluster.discovery = static ##-------------------------------------------------------------------- ## Cluster with static node list cluster.static.seeds = emq1@127.0.0.1,ekka2@127.0.0.1