【问题标题】:Is it possible to load balance MQTT traffic with Traefik 2.0 TCP feature?是否可以使用 Traefik 2.0 TCP 功能对 MQTT 流量进行负载平衡?
【发布时间】:2019-04-27 12:57:11
【问题描述】:

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

Traefik 2.0 已经发布并且可以代理 TCP 流量,我想知道是否可以像使用 Haproxy 一样使用 Traefik 作为负载平衡器将 MQTT 流量负载平衡到 N 个 dockerized mqtt 代理。

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

有人试过吗?

【问题讨论】:

    标签: tcp load-balancing mqtt traefik


    【解决方案1】:

    是的,我昨天做了。我使用 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
    

    【讨论】:

    • 为什么traefik.enable=false 设置在vmq0 服务上?
    • 我不需要公开 vmq0 服务,但如果你愿意,可以。
    • 您是否使用docker network create --driver=overlay net 创建了覆盖网络net 并使用docker stack deploy -c docker-compose.yml verne 之类的东西进行部署?我正在尝试实现同样的事情,但查看日志docker service logs verne_vmq0 我正在成功连接[info] successfully connected to cluster node 'VerneMQ@10.0.21.10',但随后出现错误[warning] terminate due to remote_node_not_available。任何想法,你以前见过这样的东西吗?
    • 是的,我就是这样做的。这是实验性的;我没有经常使用它,不幸的是,我没有收到这样的消息。所以,我无法帮助你,对不起,伙计。
    • 好的!谢谢。我什至无法让官方脚本工作。我刚刚提出了一个问题github.com/vernemq/docker-vernemq/issues/236。想我会从干净的 Ubuntu 映像开始,然后再试一次。
    猜你喜欢
    • 2016-12-25
    • 1970-01-01
    • 2021-07-18
    • 2017-10-25
    • 2012-02-13
    • 1970-01-01
    • 2022-07-21
    • 1970-01-01
    • 2020-09-06
    相关资源
    最近更新 更多