emq集群和负载均衡
集群本地测试使用三个docke容器来模拟线上三个服务器三个容器ip分别是:172.17.0.2,172.17.0.3,172.17.0.5
·
一. 集群
本地windows环境测试使用三个docke容器来模拟线上三个服务器,此处安装docker步骤省略。
1. 根据emqx官网提供的镜像进行拉取:docker pull emqx/emqx:4.3.9
2. 创建容器1并启动:`docker run -d --name emqx -p 1884:1883 -p 8082:8081 -p 8083:8083 -p 8084:8084 -p 8884:8883 -p 28083:18083 emqx/emqx:4.3.9`
3. 创建容器2并启动:`docker run -d --name emqx1 -p 1885:1883 -p 8085:8081 -p 8086:8083 -p 8087:8084 -p 8885:8883 -p 28084:18083 emqx/emqx:4.3.9`
4. 创建容器3并启动:`docker run -d --name emqx2 -p 1889:1883 -p 8088:8081 -p 8089:8083 -p 8090:8084 -p 8886:8883 -p 28086:18083 emqx/emqx:4.3.9`
5. 分别进入容器并查看ip:`docker exec -it emqx /bin/bash`
`ifconfig`
三个容器ip分别是:172.17.0.2,172.17.0.3,172.17.0.5。
6. 分别修改并保存三个容器的此文件:`vi etc/emqx.conf`
7. 重启三个容器
8. 查看三个节点名称:(默认是**@127.0.0.1)
9. 进入IP为172.17.0.2的容器,进入bin目录下,执行:
./emqx_ctl cluster join 5c93534907d2@172.17.0.3
成功显示:
10. 进入IP为172.17.0.3的容器,进入bin目录下,执行:
./emqx_ctl cluster join 37b37d3ec593@172.17.0.5
11. 查看集群结果:./emqx_ctl cluster status
可以看到三个容器已经形成了集群
12. 打开任意一个容器的emqx的页面,可以看到三个节点,至此,手动集群完成,其他集群方法请参考官网分布式集群
二. 负载均衡
此处使用nginx做负载均衡,下面为我的Nginx完整配置,nginx版本必须是1.19.0以上
#user nobody;
# 工作进程数
worker_processes 2;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
# 单个工作进程可以允许同时建立外部连接的数量
events {
worker_connections 2048;
}
#tcp
stream {
# ----------MQTT
upstream mqtt_servers {
zone tcp_servers 64k;
#hash $remote_addr;
server 127.0.0.1:1884 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:1885 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:1889 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 1886;
#status_zone tcp_server;
proxy_pass mqtt_servers;
proxy_buffer_size 4k;
tcp_nodelay on;
}
# ----------MQTT
}
http {
include mime.types;
default_type application/octet-stream;
#设置允许上传的大小
client_max_body_size 1024m;
sendfile off;
server_names_hash_bucket_size 128;
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 30;
send_timeout 10;
keepalive_requests 10;
upstream passHost1 {
server 127.0.0.1:28083 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:28084 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:28086 weight=1 max_fails=3 fail_timeout=30s;
}
server {
listen 28085;
server_name 0.0.0.0;
location / {
proxy_pass http://passHost1;
}
}
}
Weight:默认为1.weight越大,负载的权重就越大。
max_fails:允许请求失败的次数默认为1.
fail_timeout:max_fails 次失败后,暂停的时间。
更多推荐
已为社区贡献1条内容
所有评论(0)