长沙手机网站建设哪些,网站服务器搭建教程,将网页加入可信站点,实名认证域名可以做电影网站吗从零开始搭建 EMQX 集群压测框架
架构 在设计以EMQX为中心的MQTT消息队列集群压力测试框架时#xff0c;我们采用微服务架构模式。EMQX作为消息队列的核心#xff0c;负责处理MQTT协议的消息发布和订阅。Nginx作为EMQX的反向代理#xff0c;负责负载均衡和SSL/TLS终端。MQT…从零开始搭建 EMQX 集群压测框架
架构 在设计以EMQX为中心的MQTT消息队列集群压力测试框架时我们采用微服务架构模式。EMQX作为消息队列的核心负责处理MQTT协议的消息发布和订阅。Nginx作为EMQX的反向代理负责负载均衡和SSL/TLS终端。MQTTX-CLI作为压力测试工具模拟大量客户端连接和消息交换。
流程
使用Docker Compose定义EMQX集群服务、Nginx服务和MQTTX-CLI测试客户端。EMQX集群启动并等待客户端连接。Nginx启动并配置为EMQX集群的入口处理来自外部的MQTT连接请求。MQTTX-CLI启动并模拟成千上万的客户端连接到Nginx代理。收集测试数据分析EMQX集群的性能和稳定性。
各服务功能
EMQX高性能的分布式MQTT消息队列处理消息发布、订阅和路由。Nginx反向代理服务器提供负载均衡、SSL终端、连接限制和访问控制。MQTTX-CLI命令行工具用于模拟大量MQTT客户端进行压力测试。
部署
使用Docker和Docker Compose进行服务的容器化部署。每个服务都被封装在独立的Docker容器中通过Docker网络进行通信。Docker Compose文件定义了服务的配置、网络和卷挂载。
文件目录
|-- LICENSE
|-- README.md
|-- mqtt-lb-haproxy
-- mqtt-lb-nginx|-- README.md|-- certs| |-- cacert.pem| |-- cert.pem| |-- client-cert.pem| |-- client-key.pem| -- key.pem|-- docker-compose.yaml|-- mqttx_cli_emqx_tcp.json|-- mqttx_cli_emqx_tls.json-- nginx.conf配置文件
version: 3
services:emqx1:image: emqx/emqx:5.4.1container_name: emqx1hostname: emqx1-cluster.emqx.ioenvironment:- EMQX_NODE__NAMEemqx1emqx1-cluster.emqx.io- EMQX_CLUSTER__DISCOVERY_STRATEGYstatic- EMQX_CLUSTER__STATIC__SEEDSemqx1emqx1-cluster.emqx.io,emqx2emqx2-cluster.emqx.io,emqx3emqx3-cluster.emqx.ioports:- 18083:18083networks:- emqx-netemqx2:image: emqx/emqx:5.4.1 container_name: emqx2hostname: emqx2-cluster.emqx.ioenvironment:- EMQX_NODE__NAMEemqx2emqx2-cluster.emqx.io- EMQX_CLUSTER__DISCOVERY_STRATEGYstatic- EMQX_CLUSTER__STATIC__SEEDSemqx1emqx1-cluster.emqx.io,emqx2emqx2-cluster.emqx.io,emqx3emqx3-cluster.emqx.io networks:- emqx-netemqx3:image: emqx/emqx:5.4.1container_name: emqx3hostname: emqx3-cluster.emqx.ioenvironment:- EMQX_NODE__NAMEemqx3emqx3-cluster.emqx.io- EMQX_CLUSTER__DISCOVERY_STRATEGYstatic- EMQX_CLUSTER__STATIC__SEEDSemqx1emqx1-cluster.emqx.io,emqx2emqx2-cluster.emqx.io,emqx3emqx3-cluster.emqx.ionetworks:- emqx-netnginx:image: nginx:1.23.0-alpinecontainer_name: nginxports:- 1883:1883- 8883:8883- 8083:8083 - 8084:8084- 8888:8888 # nginx statusvolumes:- $PWD/nginx.conf:/etc/nginx/nginx.conf- $PWD/certs:/etc/nginx/certsnetworks:- emqx-netmqttx-cli: # 指定压测工具image: emqx/mqttx-clicontainer_name: mqttx-cli command: mqttx bench conn -c 2000 -h nginx # 对nginx容器进行压测networks:emqx-net: # mqttx-cli 与 其他容器 在同一局域网中ipv4_address: 172.26.0.12networks:emqx-net:driver: bridgeipam:config:- subnet: 172.26.0.0/16启动服务
cd mqtt-lb-nginx docker-compose up -d# 查看服务运行状态
[rootmaster mqtt-lb-nginx]# docker-compose ps
NAME COMMAND SERVICE STATUS PORTS
emqx1 /usr/bin/docker-ent… emqx1 running 0.0.0.0:18083-18083/tcp, :::18083-18083/tcp
emqx2 /usr/bin/docker-ent… emqx2 running 18083/tcp
emqx3 /usr/bin/docker-ent… emqx3 running 18083/tcp
mqttx-cli docker-entrypoint.s… mqttx-cli running
nginx /docker-entrypoint.… nginx running 0.0.0.0:1883-1883/tcp ...查看nginx子进程负载数
# /home/nginx-cores.sh 需要在nginx 容器中先创建
[rootmaster mqtt-lb-nginx]# docker exec -it nginx cat /home/nginx-cores.sh
#!/bin/sh
nginx_pidsps aux |grep [n]ginx: worker|awk {print $1}
for pid in $nginx_pids
donls /proc/$pid/fd |wc|awk {print $1}echo pid $pid $n connection
done# 查看nginx子进程负载数
[rootmaster mqtt-lb-nginx]# docker exec -it nginx sh /home/nginx-cores.sh
pid 174 1286 connection
pid 175 1270 connection
pid 176 1270 connection
pid 177 1270 connection
pid 178 1270 connection
pid 179 1270 connection
pid 180 1270 connection
pid 181 1270 connectionemqx dashboard
访问地址ip:18083 优劣势
优势
容器化部署快速部署和易于管理确保环境一致性。可扩展性EMQX集群和Nginx可以水平扩展以处理更大的负载。灵活性Nginx提供灵活的配置选项如SSL、负载均衡策略等。自动化测试MQTTX-CLI支持自动化测试脚本提高测试效率。
劣势
资源消耗容器化可能占用较多的服务器资源。
复杂性Docker容器管理和服务编排增加了系统的复杂性。网络配置容器间的网络通信需要合理配置以确保数据流畅。性能评估通过压力测试评估EMQX集群在高负载下的性能表现。
安全性考虑Nginx作为反向代理可以实施安全策略如TLS加密和访问控制。
监控和日志集成监控系统如Prometheus和Grafana收集和分析性能数据。
通过综合考虑这些因素可以设计并实现一个高效、可靠且易于维护的EMQX集群压力测试框架。通过Docker部署我们能够实现快速、灵活的系统搭建和管理。
项目地址
emqx-cluster
相关文章
用 NGINX 负载均衡 EMQX 集群