集群负载均衡
负载均衡是用于均衡多个网络组件的负载,从而优化资源的使用,避免由于组件过载造成故障。负载均衡虽然不是集群中必备组件,但是能给集群带来一些肥肠有用的特性,例如在 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测试
上图可以看到负载均衡把四个客户端分别连接到了两台服务器上。