broker 集群模式 每个服务如何配置

Blade 未结 1 45
lzfstruggle
lzfstruggle 16小时前

一、该问题的重现步骤是什么?


1. broker 集群模式  每个服务如何配置

2. nginx 如何配置   

3.


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  •  admin
    admin (楼主)
    3小时前

    配置文档看这里:https://iot.bladex.cn/tech/start/backend-cluster.html

    如果broker部署多个,要把默认的 8888、1883、8083 这些端口都改成不重复的。


    nginx部署配置如下:

    设备 ──> mqtt.example.com:1883 / 8083 / 8883 / 8084
                │  DNS A 记录 → nginx 公网 IP
                ▼
             nginx stream(四层透传,按设备源 IP 一致性哈希)
                ├─> broker-1  127.0.0.1:11883(TCP) / 18083(WebSocket)
                ├─> broker-2  127.0.0.1:11884(TCP) / 18084(WebSocket)
                └─> broker-3  127.0.0.1:11885(TCP) / 18085(WebSocket)

    nginx 不解析 MQTT 协议,只负责转发 TCP 连接。消息能跨节点送达由集群模式的 Kafka 广播保证,与 nginx 无关。

    worker_processes auto;
    worker_rlimit_nofile 200000;
    
    events {
        worker_connections 100000;
    }
    
    stream {
        upstream mqtt_tcp {
            hash $remote_addr consistent;
            server 127.0.0.1:11883 max_fails=2 fail_timeout=30s;
            server 127.0.0.1:11884 max_fails=2 fail_timeout=30s;
            server 127.0.0.1:11885 max_fails=2 fail_timeout=30s;
        }
    
        upstream mqtt_ws {
            hash $remote_addr consistent;
            server 127.0.0.1:18083 max_fails=2 fail_timeout=30s;
            server 127.0.0.1:18084 max_fails=2 fail_timeout=30s;
            server 127.0.0.1:18085 max_fails=2 fail_timeout=30s;
        }
    
        proxy_connect_timeout     3s;
        proxy_next_upstream       on;
        proxy_next_upstream_tries 3;
        proxy_timeout             10m;
    
        ssl_certificate     /etc/nginx/cert/mqtt.example.com.pem;
        ssl_certificate_key /etc/nginx/cert/mqtt.example.com.key;
        ssl_protocols       TLSv1.2 TLSv1.3;
    
        # MQTT
        server {
            listen 1883 backlog=4096;
            proxy_pass mqtt_tcp;
            proxy_protocol on;
        }
    
        # MQTT over WebSocket
        server {
            listen 8083 backlog=4096;
            proxy_pass mqtt_ws;
        }
    
        # MQTT + TLS
        server {
            listen 8883 ssl backlog=4096;
            proxy_pass mqtt_tcp;
            proxy_protocol on;
        }
    
        # WebSocket + TLS
        server {
            listen 8084 ssl backlog=4096;
            proxy_pass mqtt_ws;
        }
    }
    
    http {
        upstream broker_http {
            server 127.0.0.1:18881 max_fails=2 fail_timeout=30s;
            server 127.0.0.1:18882 max_fails=2 fail_timeout=30s;
            server 127.0.0.1:18883 max_fails=2 fail_timeout=30s;
            keepalive 32;
        }
    
        # 平台下发指令入口,供 blade-server 调用
        server {
            listen 8888;
            location / {
                proxy_pass http://broker_http;
                proxy_http_version 1.1;
                proxy_set_header Connection "";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_read_timeout 15s;
            }
        }
    }


    0 讨论(0)
提交回复