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端口監控

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM