是否可以使用Traefik 2.0 TCP功能负载平衡MQTT流量?

是否可以使用Traefik 2.0 TCP功能负载平衡MQTT流量?,tcp,load-balancing,mqtt,traefik,Tcp,Load Balancing,Mqtt,Traefik,我目前正在使用Haproxy将MQTT流量负载平衡到N个停靠的MQTT代理 Traefik 2.0已经推出,可以代理TCP流量,我想知道是否可以像使用Haproxy那样使用Traefik作为负载平衡器,将MQTT流量负载平衡到N个停靠的MQTT代理 我使用官方的traefik文档尝试了一些基本配置,但是我无法获得上游流量 已经有人试过了吗?是的,我昨天试过了。我将VerneMQ用于MQTT代理,并将Traefik用作负载平衡器。以下配置文件适用于Docker Swarm 以下是我使用的docke

我目前正在使用Haproxy将MQTT流量负载平衡到N个停靠的MQTT代理

Traefik 2.0已经推出,可以代理TCP流量,我想知道是否可以像使用Haproxy那样使用Traefik作为负载平衡器,将MQTT流量负载平衡到N个停靠的MQTT代理

我使用官方的traefik文档尝试了一些基本配置,但是我无法获得上游流量


已经有人试过了吗?

是的,我昨天试过了。我将VerneMQ用于MQTT代理,并将Traefik用作负载平衡器。以下配置文件适用于Docker Swarm

以下是我使用的docker compose配置:

version: "3"

services:
    traefik:
        image: traefik:v2.1
        ports:
            - "80:80"
            - "1883:1883"
        volumes:
            - /var/run/docker.sock:/var/run/docker.sock
            - /dev/random:/dev/random
            - ./traefik.toml:/traefik.toml
        deploy:
            placement:
                constraints: [node.role == manager]
            labels:
                - traefik.enable=true
                - traefik.docker.network=net

                - traefik.http.routers.dashboard.rule=Host(`traefik.home.gtheofilis.com`)
                - traefik.http.routers.dashboard.entrypoints=http
                - traefik.http.routers.dashboard.service=api@internal
                - traefik.http.services.dashboard.loadbalancer.server.port=9999

    vmq0:
        image: vernemq/vernemq
        environment:
            DOCKER_VERNEMQ_SWARM: 1
            DOCKER_VERNEMQ_ACCEPT_EULA: "yes"
            DOCKER_VERNEMQ_ALLOW_ANONYMOUS: "on"
        deploy:
            placement:
                constraints: [node.role == manager]
            labels:
                - traefik.enable=false

    vmq:
        image: vernemq/vernemq
        depends_on:
            - vmq0
        environment:
            DOCKER_VERNEMQ_SWARM: 1
            DOCKER_VERNEMQ_DISCOVERY_NODE: vmq0
            DOCKER_VERNEMQ_ACCEPT_EULA: "yes"
            DOCKER_VERNEMQ_ALLOW_ANONYMOUS: "on"
        deploy:
            replicas: 3
            labels:
                - traefik.enable=true
                - traefik.docker.network=net
                - traefik.tcp.routers.mqtt.rule=HostSNI(`*`)
                - traefik.tcp.routers.mqtt.entrypoints=mqtt
                - traefik.tcp.services.mqtt.loadbalancer.server.port=1883

                - traefik.http.routers.mqtt_dashboard.rule=Host(`vernemq.home.gtheofilis.com`)
                - traefik.http.routers.mqtt_dashboard.service=mqtt_dashboard
                - traefik.http.routers.mqtt_dashboard.middlewares=auth
                - traefik.http.routers.mqtt_dashboard.entrypoints=http
                - traefik.http.services.mqtt_dashboard.loadbalancer.server.port=8888

networks:
    default:
        external:
            name: net
这是我的traefik.toml配置文件:

[api]
    dashboard = true

[entryPoints]
  [entryPoints.http]
    address = ":80"
  [entryPoints.mqtt]
    address = ":1883"

[providers]
    [providers.docker]
        endpoint = "unix:///var/run/docker.sock"
        swarmMode = true

为什么在
vmq0
服务上设置了
traefik.enable=false
?我不需要公开vmq0服务,但如果你愿意的话可以。你是否使用
docker network create--driver=overlay net
创建了一个覆盖网络
net
,并使用类似于
docker stack deploy-c docker-compose.yml-verne>的东西进行部署?我正在尝试实现相同的功能,但查看日志
docker服务日志verne_vmq0
我获得了成功连接
[info]成功连接到群集节点'VerneMQ@10.0.21.10“
但由于远程节点不可用,随后出现错误
[警告]终止。有什么想法吗,你以前见过这样的东西吗?是的,我就是这样做的。这是实验性的;我没有经常使用它,所以,不幸的是,没有,我没有收到这样的信息。所以,我不知道该怎么帮你,对不起,伙计。好的!谢谢我甚至连官方剧本都做不到。我只是提出了一个问题。我想我会从干净的Ubuntu图像开始,然后再试一次。