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

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 次失败后,暂停的时间。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐