用 Nginx 负载均衡 EMQX 集群不均衡的问题

  • MQ X 版本:5.2.1 docker 开源版

  • 操作系统及版本:centos7

问题描述:目前用两台服务器分别部署了一个emqx节点,并加入到集群中,可通过mqttx客户端可以分别连接到各个节点收到互相的消息。现在问题是我通过nginx配置stream实现tcp 负载均衡不生效或根本没有监听到端口!

  1. 已确保Nginx已启用stream模块:

  2. Nginx配置文件如下:

  3. 末生效依据:用mqttx客户端连接
    node1:


    node2:

Nginx所在机器是否是其中一个EMQ节点?

是的,在node1上

Nginx所监听的端口1883换一个试试看,
node1上的EMQ启动后本身就占用1883,8883, nginx所监听的1883应该不会生效的。

那可以换成8884一个新端口,然后开端口后访问尝试嘛?

可以的吧,8884打开后,用mqttx连接8884试试看

mqttx连不上 Error: connect ECONNREFUSED ip:8884

8884端口安全组开了吗,我这边试了下可以的

企业微信截图_16970948291550
8884端口也没有被占用

这个是我的配置,给个换成TCP 8884 mqttx连接成功

1、防火墙8884是否也打开
2、nginx监听换成8884后是否重新 reload 生效

8884端口开了,我nginx配置文件reload生效后,还把nginx restart 了,就是感觉nginx配置没生效,但我故意写错配置文件,却nginx -t 能发现错误 :joy:
image

image
不知道为什么就是没有走nginx

试着把两个权重先去掉看看 我也纳闷了 :rofl:

负载均衡策略我都尝试了个遍,没有任何反应 :face_with_head_bandage:

要不这样,
1、你把nginx的那台节点的EMQ停掉;
2、nginx监听改回1883,负载均衡处把node1节点的注释掉,然后重新reload,是配置生效。
3、使用mqttx重新连接

相当于先只代理 node2上的EMQ,看看能走通过不

我明白你的意思,已经尝试了但直接连不上,Error: connect ECONNREFUSED ip: 1883,证明以前都是走的单机访问的,这是为啥呢?

可以加微信讨论下 :smile:
bearx__

× 问题尚未解决,留痕做记录 :dotted_line_face:

权重是1跟3怎么可能会均衡:joy:,你想均衡配置成1:1呀。但是这个也不能保证百分百均衡