技術筆記 Blog

大數據、容器化、虛擬化、AI 與系統管理技術筆記

View on GitHub

EMQTT Autoscale - MQTT Broker on Kubernetes

EMQ (Erlang MQTT Broker) 是一個分散式、高度可擴展的 MQTT 訊息代理,使用 Erlang/OTP 編寫。

本專案展示如何在 Kubernetes 上部署 EMQTT 並實現自動擴展。

📁 內容

🚀 快速開始

部署 EMQTT 到 Kubernetes

# 創建命名空間
kubectl create namespace emqtt

# 部署 EMQTT
kubectl apply -f k8s-emqttd/master.yaml
kubectl apply -f k8s-emqttd/mqtt.yaml

# 部署自動擴展服務
kubectl apply -f k8s-autoscalesvc/mqtt.yaml

# 查看服務狀態
kubectl get pods -n emqtt
kubectl get svc -n emqtt

訪問 EMQTT Dashboard

# 端口轉發
kubectl port-forward -n emqtt emqtt-0 8080:18083

# 瀏覽器訪問
http://localhost:8080

預設登入帳號:

🔧 配置說明

環境變數配置

EMQ 支援通過環境變數進行配置,前綴為 EMQ_ 的環境變數會映射到配置文件。

配置映射規則

EMQ_LISTENER__SSL__EXTERNAL__ACCEPTORS <--> listener.ssl.external.acceptors
EMQ_MQTT__MAX_PACKET_SIZE              <--> mqtt.max_packet_size

常用配置

環境變數 預設值 說明
EMQ_NAME container name EMQ 節點短名稱
EMQ_HOST container IP EMQ 節點主機
EMQ_JOIN_CLUSTER none 加入的叢集
EMQ_ADMIN_PASSWORD public 管理員密碼
EMQ_LISTENER__TCP__EXTERNAL 1883 MQTT TCP 端口
EMQ_LISTENER__SSL__EXTERNAL 8883 MQTT TLS/SSL 端口
EMQ_LISTENER__WS__EXTERNAL 8083 WebSocket 端口
EMQ_LISTENER__WSS__EXTERNAL 8084 WSS 端口
EMQ_LISTENER__API__MGMT 8080 管理 API 端口
EMQ_MQTT__ALLOW_ANONYMOUS true 允許匿名登入
EMQ_MQTT__MAX_PACKET_SIZE 64KB 最大封包大小

插件配置

預設載入的插件:

載入額外插件:

EMQ_LOADED_PLUGINS="emq_auth_redis,emq_recon,emq_modules,emq_retainer,emq_dashboard"

🔌 端口說明

📊 叢集配置

建立叢集

docker run --rm -ti --name emq \
    -p 18083:18083 -p 1883:1883 -p 4369:4369 -p 6000-6100:6000-6100 \
    -e EMQ_NAME="emq" \
    -e EMQ_HOST="s2.emqtt.io" \
    -e EMQ_LISTENER__TCP__EXTERNAL=1883 \
    -e EMQ_JOIN_CLUSTER="emq@s1.emqtt.io" \
    emq:latest

Kubernetes 叢集

在 Kubernetes 中,EMQTT 會自動發現並加入叢集。

⚙️ 系統調校

Linux 核心參數

docker run --rm -ti --name emq \
    --sysctl fs.file-max=2097152 \
    --sysctl fs.nr_open=2097152 \
    --sysctl net.core.somaxconn=32768 \
    --sysctl net.ipv4.tcp_max_syn_backlog=16384 \
    --sysctl net.core.netdev_max_backlog=16384 \
    --sysctl net.ipv4.ip_local_port_range="1000 65535" \
    -p 18083:18083 -p 1883:1883 \
    emq:latest

📚 相關資源

🎯 使用場景


原始倉庫: hoycdanny/emqtt-autoscale