EMQX+nginx集群负载均衡

集群负载均衡

负载均衡是用于均衡多个网络组件的负载,从而优化资源的使用,避免由于组件过载造成故障。负载均衡虽然不是集群中必备组件,但是能给集群带来一些肥肠有用的特性,例如在 EMQX 集群中:

    均衡 EMQX 的负载,避免出现单节点过载的情况; 简化客户端配置,客户端只需连接到负载均衡器上,无需关心集群内部伸缩变化; TLS/SSL 终结,减轻 EMQX 集群的负担; 提高安全性,有了负载均衡在集群前端,能够通过设置组织不需要的流量,保护 EMQX 集群免受恶意攻击。

1. 准备工作 两台服务器 ip:10.0.0.57 ip:10.0.0.59

2.启动 proxy protocol 如果EMQX集群部署在 HAproxy 或 nginx 后,且需要拿到客户端真实的源 IP 地址与端口,则需要在EMQX对应监听器打开 proxy protocol 配置,以1883监听器为例,在 /etc/emqx/emqx.conf 中找到监听器配置并添加 proxy protocol 配置项:

listeners.tcp.default {
          
   
  bind = "0.0.0.0:1883"
  max_connections = 1024000

  proxy_protocol = true
}

3. nginx下载(nginx装在两台服务器任意一台即可)

yum install openssl
yum install zlib
yum install pcre
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum -y install nginx

4.修改nginx配置文件

vim /etc/nginx/nginx.conf
#添加如下配置
# 配置tcp 要使用nginx的stream服务节点
    stream {
          
   
        # mqtt tcp连接配置
        upstream stream_backend {
          
   
        zone tcp_servers 64k;
        # 如果emqx broker是集群部署的,必须按照mqtt客户端的ip分发到集群中指定的emqx broker服务器保持长连接
        hash $remote_addr;
        server 10.0.0.57:1883 max_fails=2 fail_timeout=30s weight=1;
        server 10.0.0.59:1883 max_fails=2 fail_timeout=30s weight=1;
        }
    # mqtt tcp连接
    server {
          
   
        # 监听端口
        listen 8884;
        # 反向代理地址
        proxy_pass stream_backend;
        proxy_buffer_size 4k;
    }
    }

5.启动服务

getenforce
setenforce 0   #关闭selinux
systemctl start nginx.service  #启动
systemctl stop nginx.service   #停止
systemctl status nginx.service   #查看状态
nginx -t    #conf文件自检
nginx -s reload    #重新加载配置文件

6.打开mqttx测试 上图可以看到负载均衡把四个客户端分别连接到了两台服务器上。

经验分享 程序员 微信小程序 职场和发展