• 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端口监控
    

      

  • 相关阅读:
    github下载速度太慢解决办法
    python做简单的图像文字识别
    RuntimeError: The Session graph is empty. Add operations to the graph before calling run().解决方法
    module 'tensorflow' has no attribute 'ConfigProto'/'Session'解决方法
    list indices must be integers or slices, not tuple解决方案
    每周总结
    python从简介中获取行业分类
    python返回一个列表中出现次数最多的元素
    python提取一段文字的关键词
    PHP-Audit-Labs-Day13学习
  • 原文地址:https://www.cnblogs.com/sttchengfei/p/12024544.html
Copyright © 2020-2023  润新知