EMQX 4.4.11多Exhook配置及Nginx负载均衡配置咨询
一、EMQX 4.4.11配置两个Exhook实例
你可以通过配置文件或者EMQX Dashboard两种方式添加两个Exhook GRPC服务器:
方式1:修改配置文件(Docker环境)
- 进入EMQX容器:
docker exec -it <emqx_container_name> /bin/sh - 编辑EMQX主配置文件
/etc/emqx/emqx.conf,添加以下配置(替换为你的Exhook实例IP和端口):
# 第一个Exhook实例 exhook.server.1 = grpc://192.168.1.100:9000 # 第二个Exhook实例 exhook.server.2 = grpc://192.168.1.101:9000
- 退出容器后重启EMQX:
docker restart <emqx_container_name>
如果是用Docker Compose部署,也可以在environment里直接配置:
services: emqx: image: emqx/emqx:4.4.11 environment: - EXHOOK_SERVER__1=grpc://192.168.1.100:9000 - EXHOOK_SERVER__2=grpc://192.168.1.101:9000 ports: - "1883:1883" - "18083:18083"
方式2:通过EMQX Dashboard配置
- 访问EMQX Dashboard(默认地址
http://<emqx_ip>:18083,默认账号admin/public) - 左侧导航栏进入规则引擎 > Exhook
- 点击添加按钮,依次输入两个Exhook的GRPC地址(如
grpc://192.168.1.100:9000和grpc://192.168.1.101:9000),保存后立即生效,无需重启EMQX
二、用Nginx实现Exhook负载均衡(完全可行)
EMQX的Exhook支持指向单个GRPC代理地址,因此可以用Nginx作为反向代理,将请求负载均衡到两个Exhook实例,具体配置步骤如下:
1. 配置Nginx upstream和server块
编辑Nginx配置文件(如/etc/nginx/conf.d/exhook_grpc.conf),添加以下内容:
# 定义Exhook实例集群 upstream exhook_cluster { server 192.168.1.100:9000; # 第一个Exhook实例 server 192.168.1.101:9000; # 第二个Exhook实例 # 可选负载均衡策略:默认轮询,可改为least_conn(最少连接数)等 # least_conn; } server { listen 9001 http2; # GRPC基于HTTP/2,必须启用http2 location / { grpc_pass grpc://exhook_cluster; # 转发请求到Exhook集群 # 可选:配置日志路径 access_log /var/log/nginx/exhook_access.log; error_log /var/log/nginx/exhook_error.log; } }
2. 验证并重启Nginx
- 检查配置语法:
nginx -t - 重启Nginx生效:
systemctl restart nginx(如果是Docker部署的Nginx,执行docker restart <nginx_container_name>)
3. 修改EMQX的Exhook配置
将EMQX中Exhook的地址改为Nginx的代理地址(如grpc://<nginx_ip>:9001),无论是通过配置文件还是Dashboard修改均可。之后EMQX会将所有Exhook请求发送到Nginx,由Nginx自动负载均衡到两个Exhook实例。
注意事项
- 确保Nginx服务器能正常访问两个Exhook实例,防火墙需开放对应端口(如9000)
- EMQX服务器需能访问Nginx的代理端口(如9001)
- GRPC依赖HTTP/2,Nginx的listen指令必须加上
http2参数
内容的提问来源于stack exchange,提问作者Amalka Subasinghe
相关产品推荐
相关产品推荐

