wordpress中文tag優(yōu)化設(shè)計(jì)答案五年級(jí)上冊(cè)
從零開(kāi)始搭建 EMQX 集群壓測(cè)框架
架構(gòu)
在設(shè)計(jì)以EMQX為中心的MQTT消息隊(duì)列集群壓力測(cè)試框架時(shí),我們采用微服務(wù)架構(gòu)模式。EMQX作為消息隊(duì)列的核心,負(fù)責(zé)處理MQTT協(xié)議的消息發(fā)布和訂閱。Nginx作為EMQX的反向代理,負(fù)責(zé)負(fù)載均衡和SSL/TLS終端。MQTTX-CLI作為壓力測(cè)試工具,模擬大量客戶端連接和消息交換。
流程
- 使用
Docker Compose
定義EMQX
集群服務(wù)、Nginx
服務(wù)和MQTTX-CLI
測(cè)試客戶端。 EMQX
集群?jiǎn)?dòng)并等待客戶端連接。Nginx
啟動(dòng)并配置為EMQX
集群的入口,處理來(lái)自外部的MQTT
連接請(qǐng)求。MQTTX-CLI
啟動(dòng)并模擬成千上萬(wàn)的客戶端連接到Nginx
代理。- 收集測(cè)試數(shù)據(jù),分析
EMQX
集群的性能和穩(wěn)定性。
各服務(wù)功能
EMQX
:高性能的分布式MQTT
消息隊(duì)列,處理消息發(fā)布、訂閱和路由。Nginx
:反向代理服務(wù)器,提供負(fù)載均衡、SSL
終端、連接限制和訪問(wèn)控制。MQTTX-CLI
:命令行工具,用于模擬大量MQTT
客戶端進(jìn)行壓力測(cè)試。
部署
使用Docker
和Docker Compose
進(jìn)行服務(wù)的容器化部署。每個(gè)服務(wù)都被封裝在獨(dú)立的Docker
容器中,通過(guò)Docker
網(wǎng)絡(luò)進(jìn)行通信。Docker Compose
文件定義了服務(wù)的配置、網(wǎng)絡(luò)和卷掛載。
文件目錄
|-- 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__NAME=emqx1@emqx1-cluster.emqx.io- EMQX_CLUSTER__DISCOVERY_STRATEGY=static- EMQX_CLUSTER__STATIC__SEEDS=emqx1@emqx1-cluster.emqx.io,emqx2@emqx2-cluster.emqx.io,emqx3@emqx3-cluster.emqx.ioports:- 18083:18083networks:- emqx-netemqx2:image: emqx/emqx:5.4.1 container_name: emqx2hostname: emqx2-cluster.emqx.ioenvironment:- EMQX_NODE__NAME=emqx2@emqx2-cluster.emqx.io- EMQX_CLUSTER__DISCOVERY_STRATEGY=static- EMQX_CLUSTER__STATIC__SEEDS=emqx1@emqx1-cluster.emqx.io,emqx2@emqx2-cluster.emqx.io,emqx3@emqx3-cluster.emqx.io networks:- emqx-netemqx3:image: emqx/emqx:5.4.1container_name: emqx3hostname: emqx3-cluster.emqx.ioenvironment:- EMQX_NODE__NAME=emqx3@emqx3-cluster.emqx.io- EMQX_CLUSTER__DISCOVERY_STRATEGY=static- EMQX_CLUSTER__STATIC__SEEDS=emqx1@emqx1-cluster.emqx.io,emqx2@emqx2-cluster.emqx.io,emqx3@emqx3-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: # 指定壓測(cè)工具image: emqx/mqttx-clicontainer_name: mqttx-cli command: mqttx bench conn -c 2000 -h nginx # 對(duì)nginx容器進(jìn)行壓測(cè)networks:emqx-net: # mqttx-cli 與 其他容器 在同一局域網(wǎng)中ipv4_address: 172.26.0.12networks:emqx-net:driver: bridgeipam:config:- subnet: 172.26.0.0/16
啟動(dòng)服務(wù)
cd mqtt-lb-nginx && docker-compose up -d# 查看服務(wù)運(yùn)行狀態(tài)
[root@master 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子進(jìn)程負(fù)載數(shù)
# /home/nginx-cores.sh 需要在nginx 容器中先創(chuàng)建
[root@master mqtt-lb-nginx]# docker exec -it nginx cat /home/nginx-cores.sh
#!/bin/sh
nginx_pids=`ps aux |grep "[n]ginx: worker"|awk '{print $1}'`
for pid in $nginx_pids
don=`ls /proc/$pid/fd |wc|awk '{print $1}'`echo "pid = $pid $n connection"
done# 查看nginx子進(jìn)程負(fù)載數(shù)
[root@master 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 connection
emqx dashboard
訪問(wèn)地址:ip:18083
優(yōu)劣勢(shì)
優(yōu)勢(shì):
- 容器化部署:快速部署和易于管理,確保環(huán)境一致性。
- 可擴(kuò)展性:
EMQX
集群和Nginx
可以水平擴(kuò)展以處理更大的負(fù)載。 - 靈活性:
Nginx
提供靈活的配置選項(xiàng),如SSL、負(fù)載均衡策略等。 - 自動(dòng)化測(cè)試:
MQTTX-CLI
支持自動(dòng)化測(cè)試腳本,提高測(cè)試效率。
劣勢(shì):
- 資源消耗:容器化可能占用較多的服務(wù)器資源。
- 復(fù)雜性:
Docker
容器管理和服務(wù)編排增加了系統(tǒng)的復(fù)雜性。 - 網(wǎng)絡(luò)配置:容器間的網(wǎng)絡(luò)通信需要合理配置,以確保數(shù)據(jù)流暢。
- 性能評(píng)估:通過(guò)壓力測(cè)試,評(píng)估
EMQX
集群在高負(fù)載下的性能表現(xiàn)。
安全性考慮:Nginx
作為反向代理,可以實(shí)施安全策略,如TLS加密和訪問(wèn)控制。
監(jiān)控和日志:集成監(jiān)控系統(tǒng),如Prometheus
和Grafana
,收集和分析性能數(shù)據(jù)。
通過(guò)綜合考慮這些因素,可以設(shè)計(jì)并實(shí)現(xiàn)一個(gè)高效、可靠且易于維護(hù)的EMQX
集群壓力測(cè)試框架。通過(guò)Docker
部署,我們能夠?qū)崿F(xiàn)快速、靈活的系統(tǒng)搭建和管理。
項(xiàng)目地址
emqx-cluster
相關(guān)文章
用 NGINX 負(fù)載均衡 EMQX 集群