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测试 上图可以看到负载均衡把四个客户端分别连接到了两台服务器上。