emq集群和负载均衡

一. 集群
本地windows环境测试使用三个docke容器来模拟线上三个服务器,此处安装docker步骤省略。
1. 根据emqx官网提供的镜像进行拉取:docker pull emqx/emqx:4.3.9emq集群和负载均衡_第1张图片

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`

emq集群和负载均衡_第2张图片
emq集群和负载均衡_第3张图片
emq集群和负载均衡_第4张图片
7. 重启三个容器
8. 查看三个节点名称:(默认是**@127.0.0.1)emq集群和负载均衡_第5张图片 emq集群和负载均衡_第6张图片
emq集群和负载均衡_第7张图片
9. 进入IP为172.17.0.2的容器,进入bin目录下,执行:
./emqx_ctl cluster join [email protected]
成功显示:emq集群和负载均衡_第8张图片
10. 进入IP为172.17.0.3的容器,进入bin目录下,执行:
./emqx_ctl cluster join [email protected]
11. 查看集群结果:./emqx_ctl cluster status
emq集群和负载均衡_第9张图片
可以看到三个容器已经形成了集群
12. 打开任意一个容器的emqx的页面,可以看到三个节点,至此,手动集群完成,其他集群方法请参考官网分布式集群
emq集群和负载均衡_第10张图片
二. 负载均衡
此处使用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 次失败后,暂停的时间。

你可能感兴趣的:(docker,centos,负载均衡,容器,docker,emqx)