EMQ 问答社区

集群+nginx负债,1台能收到请求,另1台没有数据,为何呀?

环境信息

  • EMQ X 版本:
    4.3.3
  • 操作系统及版本:
    centos7.5
  • 其他

问题描述

1、做了 “分布集权” 和 “nginx负债均衡”,测试时候,发订阅和发布到A服务器,可以收到数据,但是B服务器收不到数据。然后我尝试关闭A服务器的服务,B服务器可以收到数据。这是正常的吗?

2、如果我不关闭A服务器,是不是B服务器永远收不到 客户端发过来的请求数据?

3、nginx负债均衡不是轮询分别发送数据到两个节点吗?例如隔1秒分发到另个节点。

配置文件及日志

A、B服务器已经建立分布集群:

# emqx_ctl cluster status

Cluster status: #{running_nodes => ['emqx@192.168.31.13','emqx@192.168.31.14'],
                  stopped_nodes => []}

nginx配置如下:

user  nginx nginx;
worker_processes  auto;
worker_rlimit_nofile 1024000;
pid        /var/run/nginx.pid;
events {
    use epoll;
    worker_connections 1024000;
}

stream {
#1 mqtt 正式环境
    # 添加mqtt转发的代理 
    upstream mqtt {
        zone tcp_servers 64k;
        hash $remote_addr consistent;
        # 转发的目的地址和端口
        server 192.168.31.13:1883 max_fails=3 fail_timeout=30s;
        server 192.168.31.14:1883 max_fails=3 fail_timeout=30s;
    }
    # 提供转发的服务,即访问localhost:83,会跳转至代理mqtt指定的转发地址
    server {
       listen 83;
       proxy_buffer_size 4k;
       proxy_pass mqtt;
    }
}

hash $remote_addr consistent;nginx配置这个的原因,导致相同Ip地址的设备连到同一个服务器上,去掉这个就能看出负载的效果了。

1赞

原来如此,非常感谢。对nginx 的 stream模块也是初次接触,我多多看看stream用法。

到底用不用这句话,你根据业务来处理。

您个人觉得哪种配置 比较好?

你的设备如果集中在同一公网IP下肯定不能开,无法起到负载的效果,如果IP是随机的,均匀的开的话比较好。

嗯嗯。