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