是否可以使用 Traefik 2.0 TCP 功能对 MQTT 流量进行负载平衡?
Is it possible to load balance MQTT traffic with Traefik 2.0 TCP feature?
我目前正在使用 Haproxy 将 MQTT 流量负载均衡到 N 个 dockerized mqtt 代理
Traefik 2.0 已经发布并且可以代理 TCP 流量,我想知道是否可以像使用 Haproxy 一样使用 Traefik 作为负载均衡器将 MQTT 流量负载均衡到 N 个 dockerized 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
我目前正在使用 Haproxy 将 MQTT 流量负载均衡到 N 个 dockerized mqtt 代理
Traefik 2.0 已经发布并且可以代理 TCP 流量,我想知道是否可以像使用 Haproxy 一样使用 Traefik 作为负载均衡器将 MQTT 流量负载均衡到 N 个 dockerized 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