emqttd学习教程(二):emqttd配置说明
一、配置文件说明
emqttd消息服务器通过 etc/ 目录下配置文件进行设置,主要配置文件包括:
配置文件 说明
etc/emq.conf 消息服务器配置文件
etc/acl.conf 默认ACL规则配置文件
etc/plugins/*.conf 各类插件配置文件
二、集群设置
##--------------------------------------------------------------------
## Cluster
##--------------------------------------------------------------------
cluster.name = emqcl //集群名称
cluster.discovery = manual //默认为手动创建集群
cluster.autoheal = on //启用集群自愈
cluster.autoclean = 5m //自动清除宕机节点时间
##----------------------------------------------------------------
## manual 手动创建集群
##----------------------------------------------------------------
cluster.discovery = manual
##----------------------------------------------------------------
## 配置固定的节点列表,自动发现并创建集群
##----------------------------------------------------------------
## cluster.static.seeds = emq1@127.0.0.1,emq2@127.0.0.1
##----------------------------------------------------------------
## 基于 UDP 组播自动发现并创建集群
##----------------------------------------------------------------
## cluster.mcast.addr = 239.192.0.1
## cluster.mcast.ports = 4369,4370
## cluster.mcast.iface = 0.0.0.0
## cluster.mcast.ttl = 255
## cluster.mcast.loop = on
##----------------------------------------------------------------
## 基于 DNS A 记录自动集群
##----------------------------------------------------------------
## cluster.dns.name = localhost
## cluster.dns.app = emq
##----------------------------------------------------------------
## 基于 etcd 自动集群
##----------------------------------------------------------------
## cluster.etcd.server = http://127.0.0.1:2379
## cluster.etcd.prefix = emqcl
## cluster.etcd.node_ttl = 1m
##----------------------------------------------------------------
## 基于 Kubernetes 自动集群
##----------------------------------------------------------------
## cluster.k8s.apiserver = http://10.110.111.204:8080
## cluster.k8s.service_name = emq
## cluster.k8s.address_type = ip
## cluster.k8s.app_name = emq
## cluster.k8s.namespace = default
三、Erlang 虚拟机主要参数说明
可通过etc/emq.conf配置文件的node段落设置虚拟机配置
##--------------------------------------------------------------------
## Node Args
##--------------------------------------------------------------------
node.name = emq@127.0.0.1 //Erlang 节点名称
node.cookie = emqsecretcookie //Erlang 分布式节点通信 Cookie
node.smp = auto //启用Erlang VM的SMP支持,值为enable, auto, disable
## node.heartbeat = on //Erlang运行时系统的心跳监视。
node.kernel_poll = on //Enable kernel poll.
node.async_threads = 32 //设置异步线程池中的线程数,有效范围是0-1024。
node.process_limit = 256000 //为此设置同时存在的进程的最大数量
node.max_ports = 65536 //设置此系统的最大同时存在端口数
node.dist_buffer_size = 8MB //设置分配缓冲区忙碌限制(dist_buf_busy_limit)。
node.max_ets_tables = 256000 //设置ETS表的最大数量。
node.fullsweep_after = 1000 //调整GC以更频繁地运行。
node.crash_dump = log/crash.dump //崩溃转储日志文件。
node.proto_dist = inet_tcp //指定erlang分布式协议,可以为inet_tcp、inet6_tcp和inet_tls。
## node.ssl_dist_optfile = etc/ssl_dist.conf
node.dist_net_ticktime = 60 //设置net_kernel滴答时间。 TickTime以秒为单位指定。
node.dist_listen_min = 6369 //设置分布式Erlang节点的侦听器套接字的端口范围。
node.dist_listen_max = 6379
四、日志参数配置
可通过etc/emq.conf配置文件的log段落设置日志
1、日志目录
log.dir = log
2、console 日志
log.console = console
log.console.level = error
## log.console.file = log/console.log
## log.console.size = 10485760
## log.console.count = 5
3、info日志
## log.info.file = log/info.log
## log.info.size = 10485760
## log.info.count = 5
4、error 日志
log.error.file = log/error.log
log.error.size = 10485760
log.error.count = 5
5、crash 日志
log.crash = on
log.crash.file = log/crash.log
6:syslog 日志
log.syslog = on
log.syslog.level = error
五、匿名认证与 ACL 文件
1、emqttd支持基于 etc/acl.conf 文件或 MySQL、 PostgreSQL 等插件的访问控制规则。
##--------------------------------------------------------------------
## Allow Anonymous Authentication and Default ACL
##--------------------------------------------------------------------
mqtt.allow_anonymous = true //默认开启匿名,允许任意客户端登录
mqtt.acl_nomatch = allow //默认访问控制(ACL)文件
mqtt.acl_file = etc/acl.conf //acl配置路径
mqtt.cache_acl = true //发布消息缓存ACL。
2、etc/acl.conf 访问控制规则定义:
允许|拒绝 用户|IP地址|ClientID 发布|订阅 主题列表
3、etc/acl.conf 默认访问规则设置:
%% 允许'dashboard'用户订阅 '$SYS/#'
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
%% 允许本机用户发布订阅全部主题
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.
%% 拒绝用户订阅'$SYS#'与'#'主题
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
注释:认规则只允许本机用户订阅’$SYS/#’与’#’,emqttd消息服务器接收到 MQTT 客户端发布(PUBLISH)或订阅(SUBSCRIBE)请求时,会逐条匹配 ACL 访问控制规则,直到匹配成功返回 allow 或 deny。
六、MQTT 协议参数配置
##--------------------------------------------------------------------
## MQTT Protocol
##--------------------------------------------------------------------
mqtt.max_clientid_len = 1024 //ClientId 最大允许长度
mqtt.max_packet_size = 64KB //MQTT 最大报文尺寸
mqtt.websocket_protocol_header = on //检查websocket协议头是否有效。
mqtt.keepalive_backoff = 0.75 //EMQ将启动MQTT连接,直到'Keepalive * backoff * 2'超时。
##--------------------------------------------------------------------
## MQTT Connection
##--------------------------------------------------------------------
mqtt.conn.force_gc_count = 100 //强制GC进行MQTT连接,值0将禁用Force GC。
##--------------------------------------------------------------------
## MQTT Client
##--------------------------------------------------------------------
mqtt.client.idle_timeout = 30s //MQTT客户端空闲超时,以秒为单位指定。
## mqtt.client.max_publish_rate = 5 //每秒MQTT消息的最大发布速率。
mqtt.client.enable_stats = off //启用每个客户端统计。
##--------------------------------------------------------------------
## MQTT Session
##--------------------------------------------------------------------
mqtt.session.max_subscriptions = 0 //允许的最大订阅数,0表示没有限制。
mqtt.session.upgrade_qos = off //强制根据订阅升级QoS。
mqtt.session.max_inflight = 32 //存储QoS1/2消息的Inflight窗口的最大大小,但未打包。
mqtt.session.retry_interval = 20s //重试QoS1/2消息的重试间隔。
mqtt.session.max_awaiting_rel = 1000 //等待PUBREL的最大QoS2数据包(客户端 - >代理),0表示没有限制。
mqtt.session.await_rel_timeout = 30s //如果等待PUBREL超时,将丢弃QoS2消息(客户端 - >代理)。
mqtt.session.enable_stats = on //启用每个会话统计信息。
mqtt.session.expiry_interval = 2h //会话到期时间。
mqtt.session.ignore_loop_deliver = false //是否忽略消息的循环传递。
##--------------------------------------------------------------------
## MQTT Message Queue
##--------------------------------------------------------------------
mqtt.mqueue.type = simple //消息队列类型。
## mqtt.mqueue.priority = topic/1=10,topic/2=8 //定义主题优先度
mqtt.mqueue.max_length = 1000 //最大队列长度。
mqtt.mqueue.low_watermark = 20% //排队消息的低水位标记。
mqtt.mqueue.high_watermark = 60% //排队消息的高水位标记。
mqtt.mqueue.store_qos0 = true //是否将Qos0消息排入队列。
##--------------------------------------------------------------------
## MQTT Broker and PubSub
##--------------------------------------------------------------------
mqtt.broker.sys_interval = 1m //发布$SYS消息的系统间隔。
mqtt.pubsub.pool_size = 8 //PubSub池大小。 默认值应与调度程序编号相同。
mqtt.pubsub.async = true //异步订阅
##----------------------------------------------------------------
## MQTT Bridge
##----------------------------------------------------------------
mqtt.bridge.max_queue_len = 10000 //桥的待处理消息队列大小。
mqtt.bridge.ping_down_interval = 1s //Ping节点间隔。
##---------------------------------------------------------------
## MQTT Plugins
##----------------------------------------------------------------
mqtt.plugins.etc_dir =etc/plugins/ //插件配置的etc dir。
mqtt.plugins.loaded_file = data/loaded_plugins //用于存储加载的插件名称的文件。
七、Listeners 参数说明
EMQ X* 消息服务器支持 MQTT、MQTT/SSL、MQTT/WS 协议服务端,可通过 listener.tcp|ssl|ws|wss|.* 设置端口、最大允许连接数等参数。
emqttd消息服务器默认占用的TCP端口包括:
1883 MQTT协议端口
8883 MQTT(SSL)端口
8083 MQTT(WebSocket), HTTP API端口
18083 Dashboard管理控制台端口
8084 MQTT/WebSocket/SSL 端口
1、MQTT/TCP 监听器 - 1883
##--------------------------------------------------------------------
## MQTT Listeners
##--------------------------------------------------------------------
listener.tcp.external = 0.0.0.0:1883 //是MQTT/TCP的IP地址和端口
listener.tcp.external.acceptors = 16 //外部MQTT/TCP侦听器的接受器池。
listener.tcp.external.max_clients = 102400 //最大并发MQTT/TCP连接数。
## 这里配置的 external 与前面的 zone 相关联,也可以新增一个 $name 的监听器,对应前面的 $name zone ,配在相应的listener下面。
## listener.tcp.external.zone = external //外部MQTT/TCP侦听器的区域属于
## listener.tcp.external.mountpoint = external/ //MQTT/TCP侦听器的挂载点
## listener.tcp.external.rate_limit = 100,10 //外部MQTT/TCP连接的速率限制
listener.tcp.external.access.1 = allow all //MQTT/TCP侦听器的访问控制规则
## listener.tcp.external.proxy_protocol = on //如果部署了EMQ群集,则启用代理协议V1/2
## listener.tcp.external.proxy_protocol_timeout = 3s //设置代理协议的超时
## listener.tcp.external.peer_cert_as_username = cn //启用基于X.509证书的身份验证选项
listener.tcp.external.backlog = 1024 //TCP积压定义了挂起连接队列可以增长到的最大长度。
listener.tcp.external.send_timeout = 15s //TCP为外部MQTT连接发送超时
listener.tcp.external.send_timeout_close = on //如果发送超时,请关闭TCP连接
## listener.tcp.external.recbuf = 4KB //用于MQTT连接的TCP接收缓冲区(os内核)
## listener.tcp.external.sndbuf = 4KB //用于MQTT连接的TCP发送缓冲区(os内核)
## listener.tcp.external.buffer = 4KB //驱动程序使用的用户级软件缓冲区的大小
## listener.tcp.external.tune_buffer = off
listener.tcp.external.nodelay = true //MQTT连接的TCP_NODELAY标志
listener.tcp.external.reuseaddr = true //TCP侦听器的SO_REUSEADDR标志
##--------------------------------------------------------------------
## Internal TCP Listener for MQTT Protocol
listener.tcp.internal = 127.0.0.1:11883 //内部MQTT/TCP协议侦听器的IP地址和端口
listener.tcp.internal.acceptors = 4 //内部MQTT/TCP侦听器的接受器池
listener.tcp.internal.max_clients = 102400 //最大并发MQTT/TCP连接数
## listener.tcp.internal.zone = internal //内部MQTT/TCP侦听器的区域属于
## listener.tcp.internal.mountpoint = internal/ //MQTT/TCP侦听器的挂载点
## listener.tcp.internal.rate_limit = 1000,100 //内部MQTT/TCP连接的速率限制
listener.tcp.internal.backlog = 512 //内部MQTT/TCP侦听器的TCP积压
listener.tcp.internal.send_timeout = 5s //内部MQTT连接的TCP发送超时
listener.tcp.external.send_timeout_close = on //如果发送超时,则关闭MQTT/TCP连接
## listener.tcp.internal.recbuf = 16KB //用于内部MQTT连接的TCP接收缓冲区(os内核)
## listener.tcp.internal.sndbuf = 16KB //用于内部MQTT连接的TCP发送缓冲区(os内核)
## listener.tcp.internal.buffer = 16KB //驱动程序使用的用户级软件缓冲区的大小
## listener.tcp.internal.tune_buffer = off
listener.tcp.internal.nodelay = false //内部MQTT连接的TCP_NODELAY标志
listener.tcp.internal.reuseaddr = true //MQTT/TCP侦听器的SO_REUSEADDR标志
2、MQTT/SSL 监听器 - 8883
##--------------------------------------------------------------------
## MQTT/SSL - External SSL Listener for MQTT Protocol
listener.ssl.external = 8883 //外部SSL侦听器
listener.ssl.external.acceptors = 16 //外部MQTT/SSL侦听器的接受器池
listener.ssl.external.max_clients = 1024 //最大并发MQTT/SSL连接数
## listener.ssl.external.zone = external //外部MQTT/SSL侦听器的区域属于
## listener.ssl.external.mountpoint = inbound/ //MQTT/SSL侦听器的挂载点
listener.ssl.external.access.1 = allow all //MQTT/SSL侦听器的访问控制规则
## listener.ssl.external.rate_limit = 100,10 //外部MQTT/SSL连接的速率限制
##--------------------------------------------------------------------
## Proxy Protocol V1/2
##--------------------------------------------------------------------
## listener.ssl.external.proxy_protocol = on //如果在后面部署EMQ群集,则启用代理协议V1/2
## listener.ssl.external.proxy_protocol_timeout = 3s //设置代理协议的超时
##--------------------------------------------------------------------
## SSL Options
##--------------------------------------------------------------------
## listener.ssl.external.tls_versions = tlsv1.2,tlsv1.1,tlsv1 //TLS版本仅用于防止POODLE攻击
listener.ssl.external.handshake_timeout = 15s //TLS握手超时
listener.ssl.external.keyfile = etc/certs/key.pem //包含用户证书的文件的路径
listener.ssl.external.certfile = etc/certs/cert.pem //包含PEM编码的CA证书的文件的路径
##--------------------------------------------------------------------
## 开启双向认证
##--------------------------------------------------------------------
## listener.ssl.external.cacertfile = etc/certs/cacert.pem
## listener.ssl.external.dhfile = etc/certs/dh-params.pem
## listener.ssl.external.verify = verify_peer
## listener.ssl.external.fail_if_no_peer_cert = true
##--------------------------------------------------------------------
## SSL Parameter
##--------------------------------------------------------------------
## listener.ssl.external.secure_renegotiate = off
## listener.ssl.external.reuse_sessions = on
## listener.ssl.external.honor_cipher_order = on
## listener.ssl.external.peer_cert_as_username = cn
## listener.ssl.external.backlog = 1024
## listener.ssl.external.send_timeout = 15s
## listener.ssl.external.send_timeout_close = on
## listener.ssl.external.recbuf = 4KB
## listener.ssl.external.sndbuf = 4KB
## listener.ssl.external.buffer = 4KB
## listener.ssl.external.tune_buffer = off
## listener.ssl.external.nodelay = true
listener.ssl.external.reuseaddr = true //MQTT/SSL侦听器的SO_REUSEADDR标志
3、MQTT/WebSocket 监听器 - 8083
##--------------------------------------------------------------------
## External WebSocket Listener for MQTT Protocol
listener.ws.external = 8083
listener.ws.external.acceptors = 4
listener.ws.external.max_clients = 102400
## listener.ws.external.zone = external
## listener.ws.external.mountpoint = external/
listener.ws.external.access.1 = allow all
## listener.ws.external.proxy_address_header = X-Forwarded-For
## listener.ws.external.proxy_port_header = X-Forwarded-Port
## listener.ws.external.proxy_protocol = on
## listener.ws.external.proxy_protocol_timeout = 3s
##--------------------------------------------------------------------
## MQTT/WebSocket Options
##--------------------------------------------------------------------
listener.ws.external.backlog = 1024
listener.ws.external.send_timeout = 15s
listener.ws.external.send_timeout_close = on
## listener.ws.external.recbuf = 4KB
## listener.ws.external.sndbuf = 4KB
## listener.ws.external.buffer = 4KB
## listener.ws.external.tune_buffer = off
listener.ws.external.nodelay = true
listener.ws.external.reuseaddr = true
4、MQTT/WebSocket/SSL 监听器 - 8084
##--------------------------------------------------------------------
## External WebSocket/SSL listener for MQTT Protocol
listener.wss.external = 8084
listener.wss.external.acceptors = 4
listener.wss.external.max_clients = 64
## listener.wss.external.zone = external
## listener.wss.external.mountpoint = inbound/
listener.wss.external.access.1 = allow all
## listener.wss.external.proxy_address_header = X-Forwarded-For
## listener.wss.external.proxy_port_header = X-Forwarded-Port
##--------------------------------------------------------------------
## Proxy Protocol V1/2
##--------------------------------------------------------------------
## listener.wss.external.proxy_protocol = on
## listener.wss.external.proxy_protocol_timeout = 3s
##--------------------------------------------------------------------
## SSL Options
##--------------------------------------------------------------------
## listener.wss.external.tls_versions = tlsv1.2,tlsv1.1,tlsv1
listener.wss.external.handshake_timeout = 15s
listener.wss.external.keyfile = etc/certs/key.pem
listener.wss.external.certfile = etc/certs/cert.pem
##--------------------------------------------------------------------
## 开启双向认证
##--------------------------------------------------------------------
## listener.wss.external.cacertfile = etc/certs/cacert.pem
## listener.ssl.external.dhfile = etc/certs/dh-params.pem
## listener.wss.external.verify = verify_peer
## listener.wss.external.fail_if_no_peer_cert = true
##--------------------------------------------------------------------
## SSL Parameter
##--------------------------------------------------------------------
## listener.wss.external.ciphers =
## listener.wss.external.secure_renegotiate = off
## listener.wss.external.reuse_sessions = on
## listener.wss.external.honor_cipher_order = on
## listener.wss.external.peer_cert_as_username = cn
listener.wss.external.backlog = 1024
listener.wss.external.send_timeout = 15s
listener.wss.external.send_timeout_close = on
## listener.wss.external.recbuf = 4KB
## listener.wss.external.sndbuf = 4KB
## listener.wss.external.buffer = 4KB
## listener.wss.external.nodelay = true
listener.wss.external.reuseaddr = true
5、HTTP Management API侦听器 - 8080
##--------------------------------------------------------------------
## HTTP Management API Listener
listener.api.mgmt = 0.0.0.0:8080
listener.api.mgmt.acceptors = 4
listener.api.mgmt.max_clients = 64
listener.api.mgmt.access.1 = allow all
listener.api.mgmt.backlog = 512
listener.api.mgmt.send_timeout = 15s
listener.api.mgmt.send_timeout_close = on
八、Erlang 虚拟机监控设置
##-------------------------------------------------------------------
## System Monitor
##-------------------------------------------------------------------
sysmon.long_gc = false //启用长GC监控
sysmon.long_schedule = 240 //启用长时间表(ms)监控
sysmon.large_heap = 8MB //启用大堆监控
sysmon.busy_port = false //启用忙碌端口监控
sysmon.busy_dist_port = true //启用Busy Dist端口监控
emqttd学习教程(二):emqttd配置说明的更多相关文章
- redis学习教程二《四大数据类型》
redis学习教程二<四大数据类型> 四大数据类型包括:字符串 哈希 列表 集合一 : Redis字符串 Redis字符串命令用于管理Redis中的字符串 ...
- storyBoard学习教程二(页面跳转)
本篇是接着上一篇 storyBoard 学习教程一 的补充,有过storyBoard 编程经验的伙伴还是不要阅读本篇博客了,我自己认为,太基础太简单了,为了方便别人学习使用,我还是详细的做了这篇教程. ...
- git学习教程二之远程仓库学习
首先你需要注册一个github用户名,我的github账户是:1654218052@qq.com 由于本地的git仓库和github的仓库是通过SSH加密的,所以我们还需要设置一点东西哦 第1步:创建 ...
- C#入门教程(二)–C#常用快捷键、变量、类型转换-打造C#学习教程
C#入门教程(一)–.Net平台技术介绍.C#语言及开发工具介绍-打造C#学习教程 上次教程主要介绍了.Net平台以及C#语言的相关介绍.以及经典程序案例,helloworld程序. 初来乍到,第一次 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- tensorflow学习笔记二:入门基础 好教程 可用
http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础 TensorFlow用张量这种数据结构来表示所有的数据.用一 ...
- 无废话ExtJs 入门教程二十一[继承:Extend]
无废话ExtJs 入门教程二十一[继承:Extend] extjs技术交流,欢迎加群(201926085) 在开发中,我们在使用视图组件时,经常要设置宽度,高度,标题等属性.而这些属性可以通过“继承” ...
- 无废话ExtJs 入门教程二十[数据交互:AJAX]
无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
随机推荐
- JS实现table表格在鼠标移动出现一行变色或者十字叉变色
1,一行变色 <script> function trBg(){ var tab=document.getElementById("table"); var tr=ta ...
- Ansible安装部署和常用命令,及其主机清单inventory(二)
1.ansible的安装方式 1.1使用yum源安装 yum install ansible -y 1.2使用rpm包安装 https://dl.fedoraproject.org/pub/epel/ ...
- vs2017的主题颜色的配置
相信很多小伙伴开发的时候很怀念sublime的主题,我也特别的喜欢其中的mono主题,所以闲来无事在vs上调了一下色感觉好看多了.(其实也可以下载主题然后用“导入导出设置但是颜色有点奇葩,还是越简单越 ...
- redis3.2 源码安装
wget http://download.redis.io/releases/redis-3.2.3.tar.gz tar -zxvf redis-.tar.gz cd redis make & ...
- radio赋值法
一般都会使用attr来使选中: $("#DIV的ID input[name='radio的name'][value="'+动态传的radio的value值+'"]&quo ...
- Django学习系列14:第一个数据库迁移
在Django中,ORM的任务是模型化数据库. 创建数据库其实是由另一个系统负责的叫做迁移. 迁移的任务是根据你对models.py文件的改动情况,添加或删除表和列. 可以把迁移想象成数据库使用的版本 ...
- nginx-轮询、权重、ip_hash 、fair模式
在 linux 下有 Nginx.LVS.Haproxy 等等服务可以提供负载均衡服 务,而且 Nginx 提供了几种分配方式(策略): 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器 ...
- Centos7基础优化操作项
1.基础优化操作项:更新yum源信息第一个:就近使用yum源地址,安装软件更快.curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors. ...
- The Preliminary Contest for ICPC Asia Nanchang 2019 E. Magic Master
题目:https://nanti.jisuanke.com/t/41352 思路:约瑟夫环 由题意得第k张牌即求 k 为 第几个 报数为m+1 的单位 用队列模拟即可 #include<bits ...
- 【CF160E】Buses and People
题目大意:给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a<a', b'<b, c'<c 的最小 c 对应的元组编号. ...