【MQTT】EMQX 消息服务器介绍及部署
【MQTT】EMQX 消息服务器介绍及部署EMQX 概述
EMQX 是一款开源的大规模分布式 MQTT 消息服务器,功能丰富,专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条,单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息,同时保证毫秒级的低时延。EMQX 支持多种协议,包括 MQTT (3.1、3.1.1 和 5.0)、HTTP、QUIC 和 WebSocket 等,保证各种网络环境和硬件设备的可访问性。EMQX 还提供了全面的 SSL/TLS 功能支持,比如双向认证以及多种身份验证机制,为物联网设备和应用程序提供可靠和高效的通信基础设施。内置基于 SQL 的规则引擎,EMQX 可以实时提取、过滤、丰富和转换物联网数据。此外,EMQX 采用了无主分布式架构,以确保高可用性和水平扩展性,并提供操作友好的用户体验和出色的可观测性。
EMQX 拥有来自 50 多个国家的 20,000 多家企业用户,连接全球超过 1 亿台物联网设备,服务企业数字化、实时化、智能化转型。
EMQX特性
Mria 集群架构
支持全新的 Mria 集群架构,在此架构下 EMQX 水平扩展性得到指数级提升,单个集群可以轻松支持 1 亿 MQTT 连接,这使得 EMQX 5.0 成为目前全球最具扩展性的 MQTT Broker。在构建满足用户业务需求的更大规模集群的同时,Mria 架构还能够降低大规模部署下的脑裂风险以及脑裂后的影响,以提供更加稳定可靠的物联网数据接入服务。
轻量级消息通过开放标准协议 MQTT、HTTP、QUIC 和 WebSocket 为应用程序和设备提供高效、可靠的信息传递能力。
安全通信支持通过 TLS/SSL 加密双向 MQTT 连接,通过用户名/密码、JWT、PSK、X.509 证书等进行身份认证。
实时事件处理通过强大的,基于 SQL 的规则引擎,提取、过滤、充实和转换数百万的连续事件流。
易于扩展随着业务的增长,EMQX 在扩展部署方面为您提供了高度的灵活性,无论是水平扩展还是垂直扩展增加。
安装部署
Docker下部署
本页将指导您使用官方 Docker 镜像快速安装和运行 EMQX,并使用 Docker Compose 实现集群搭建。
通过 Docker 运行单个 EMQX 节点本节主要介绍如何通过 Docker 镜像安装最新版本的 EMQX,如希望体验其他版本,可以前往 EMQX 下载页面。运行以下命令获取 Docker 镜像:docker pull emqx/emqx:5.3.1
运行以下命令启动 Docker 容器。
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.3.1
有关 EMQX 官方镜像的更多信息,请查看 Docker Hub - emqx。
Docker 部署注意事项
[*]如果需要持久 Docker 容器 ,请将以下目录挂载到容器外部,这样即使容器被删除数据也不会丢失:
/opt/emqx/data
/opt/emqx/log
关于 EMQX 目录结构的详细信息请参考 EMQX 文件和目录。启动容器并挂载目录:
docker run -d --name emqx \
-p 1883:1883 -p 8083:8083 \
-p 8084:8084 -p 8883:8883 \
-p 18083:18083 \
-v $PWD/data:/opt/emqx/data \
-v $PWD/log:/opt/emqx/log \
emqx/emqx:5.3.1
[*]Docker 内的 localhost 或 127.0.0.1 指向的是容器内部地址,如需访问宿主机地址请使用宿主机的真实 IP 或使用 host 网络模式。如果您使用的是 Docker for Mac 或 Docker for Windows,可以使用 host.docker.internal 作为宿主机地址。
[*]由于 EMQX 使用 data/mnesia/<节点名> 作为数据存储目录,请使用 hostname 或者 FQDN 等固定的信息作为节点名,避免因为节点名称变动导致数据丢失。
通过 Docker Compose 构建 EMQX 集群
Docker Compose 是一个用于编排和运行多容器的工具,下面将指导您通过 Docker Compose 创建简单的 EMQX 静态集群用于测试。请注意,本章节中的 Docker Compose 示例文件仅适用于本地测试,如果您需要在生产环境中部署集群请参考 构建集群。TIP目前 Docker Compose 已经包含在 Docker 安装包中无需单独安装,如果您的 Docker 中没有包含 Compose 请参考 Install Docker Compose 进行安装。
[*]在任意目录创建 docker-compose.yml 文件,内容如下:
version: '3'
services:
emqx1:
image: emqx:5.3.1
container_name: emqx1
environment:
- "EMQX_NODE_NAME=emqx@node1.emqx.io"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS="
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]
interval: 5s
timeout: 25s
retries: 5
networks:
emqx-bridge:
aliases:
- node1.emqx.io
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
# volumes:
# - $PWD/emqx1_data:/opt/emqx/data
emqx2:
image: emqx:5.3.1
container_name: emqx2
environment:
- "EMQX_NODE_NAME=emqx@node2.emqx.io"
- "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
- "EMQX_CLUSTER__STATIC__SEEDS="
healthcheck:
test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]
interval: 5s
timeout: 25s
retries: 5
networks:
emqx-bridge:
aliases:
- node2.emqx.io
# volumes:
# - $PWD/emqx2_data:/opt/emqx/data
networks:
emqx-bridge:
driver: bridge
[*]通过命令行切换 docker-compose.yml 文件所在目录,然后输入以下命令启动 EMQX 集群:
docker-compose up -d
[*]查看集群状态
$ docker exec -it emqx1 sh -c "emqx ctl cluster status"
Cluster status: #{running_nodes => ['emqx@node1.emqx.com','emqx@node2.emqx.com'],
stopped_nodes => []}
Debian /Ubuntu下部署
本页将指导您如何在 Debian 系统中下载安装并启动 EMQX。支持的 Debian 版本:
[*]Debian 12
[*]Debian 11
[*]Debian 10
支持的 Ubuntu 版本:
[*]Ubuntu 22.04
[*]Ubuntu 20.04
[*]Ubuntu 18.04
通过 Apt 源安装
EMQX 支持通过 Apt 源安装,免除了用户需要手动处理依赖关系和更新软件包等的困扰,具有更加方便、安全和易用等优点。如希望通过 Apt 源安装 EMQX,可参考如下步骤。
[*]通过以下命令配置 EMQX Apt 源:bashcurl -s https://assets.emqx.com/scripts/install-emqx-deb.sh | sudo bash
[*]运行以下命令安装 EMQX:sudo apt-get install emqx
[*]运行以下命令启动 EMQX:sudo systemctl start emqx
通过下载包安装
EMQX 同时支持通过下载包进行安装。下文将以 Debian 11 系统为例演示如何下载最新版 EMQX。如希望在其他支持系统中进行安装,或体验其他版本,可前往 EMQX 下载页面 获取安装信息。
通过 deb 安装
请根据 CPU 架构选择对应安装方式。下载 emqx-5.3.1-debian11-amd64.deb。
wget https://www.emqx.com/zh/downloads/broker/5.3.1/emqx-5.3.1-debian11-amd64.deb
[*]安装 EMQX。
sudo apt install ./emqx-5.3.1-debian11-amd64.deb
启动 EMQX您可通过如下三种方式启动 EMQX
[*]直接启动:
$ emqx start
EMQX 5.3.1 is started successfully!
$ emqx ctl status
Node 'emqx@127.0.0.1' 5.3.1 is started
[*]systemctl 启动:
sudo systemctl start emqx
[*]service 启动:
sudo service emqx start
卸载 EMQX服务完成后,可通过如下命令卸载 EMQX:
sudo apt remove --purge emqx
通过 tar.gz 安装
请根据 CPU 架构选择对应安装方式。
[*]下载 emqx-5.3.1-debian11-amd64.tar.gz。
wget https://www.emqx.com/zh/downloads/broker/5.3.1/emqx-5.3.1-debian11-amd64.tar.gz
[*]安装 EMQX。
mkdir -p emqx && tar -zxvf emqx-5.3.1-debian11-amd64.tar.gz -C emqx
安装完成后,可通过如下命令启动 EMQX。./emqx/bin/emqx start
CentOS/RHEL下部署
本页将指导您如何在 CentOS/RHEL 系统中下载安装并启动 EMQX。支持的 CentOS/RHEL 版本:
[*]Amazon Linux 2023
[*]Amazon Linux 2
[*]Rocky Linux 9 (RHEL 9)
[*]Rocky Linux 8 (RHEL 8)
[*]CentOS 7 (RHEL 7)
通过 Yum 源安装
EMQX 支持通过 Yum 源安装,您可通过以下 Yum 命令从中自动下载和安装 EMQX。
[*]通过以下命令配置 EMQX Yum 源:curl -s https://assets.emqx.com/scripts/install-emqx-rpm.sh | sudo bash
[*]运行以下命令安装 EMQX:sudo yum install emqx -y
[*]运行以下命令启动 EMQX:sudo systemctl start emqx
通过 rpm 安装
EMQX 同时支持通过下载 rpm 安装包进行安装。本节以 CentOS 8 系统为例演示如何下载最新版 EMQX。如希望在其他支持系统中进行安装,或体验其他版本,可前往EMQX 下载页面获取详细安装信息。请根据 CPU 架构选择对应安装方式。
[*]下载 emqx-5.3.1-el8-amd64.rpm。wget https://www.emqx.com/zh/downloads/broker/5.3.1/emqx-5.3.1-el8-amd64.rpm
[*]安装 EMQX。sudo yum install emqx-5.3.1-el8-amd64.rpm -y
启动 EMQX
您可通过如下 3 种方式启动 EMQX。
[*]直接启动:$ emqx start
EMQX 5.3.1 is started successfully!
$ emqx ctl status
Node 'emqx@127.0.0.1' 5.3.1 is started
[*]systemctl 启动:sudo systemctl start emqx
[*]service 启动:sudo service emqx start
卸载 EMQX
服务完成后,可通过如下命令卸载 EMQX:
sudo yum remove emqx
macOS下部署
本页将指导您如何通过 zip 包在 macOS 系统中下载安装并启动 EMQX。支持的操作系统:
[*]macOS 13 (只适用于 Homebrew 安装包)
[*]macOS 12
[*]macOS 11
使用 Homebrew 安装 EMQXHomebrew 是一个免费且开源的软件包管理系统,可简化在 macOS 上安装软件的过程。
[*]如果你的 Mac 上还没有安装 Homebrew,可以在终端中运行以下命令来进行安装:bashCopy code
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
[*]安装 EMQX:bashCopy code
brew install emqx
使用 Zip 软件包安装 EMQX下载 适用于你的操作系统和架构的 EMQX 软件包。这是适用于搭载 macOS 12(Monterey)和 Apple Silicon 的 Mac 电脑的 zip 软件包的链接:
[*]
wget https://www.emqx.com/zh/downloads/broker/5.3.1/emqx-5.3.1-macos12-arm64.zi
[*]安装 EMQX。mkdir -p emqx && unzip emqx-5.3.1-macos12-arm64.zip -d emqx
启动和停止 EMQX
EMQX 可以以守护进程模式、前台模式或交互模式启动。请注意,默认情况下只能同时运行一个 EMQX 实例。如果你使用 Homebrew 安装了 EMQX,请按照下面的指示使用 emqx 命令。如果你使用 zip 包安装了 EMQX,请使用 bin/emqx(假设你在解压 emqx 文件的目录中)。# 以守护进程模式启动
emqx start
# 以前台模式启动
emqx foreground
# 以交互模式启动,使用 Erlang shell
emqx console
如果以前台模式或交互模式启动,启动成功后,EMQX 将输出以下消息:EMQX 5.3.1 is running now!
你可能还会看到一些警告消息,这些消息是为生产环境的操作者准备的,如果 EMQX 在本地环境进行测试、实验或客户端开发,可以忽略这些消息:ERROR: DB Backend is RLOG, but an incompatible OTP version has been detected. Falling back to using Mnesia DB backend.
WARNING: ulimit -n is 256; 1024 is the recommended minimum.
WARNING: Default (insecure) Erlang cookie is in use.
WARNING: Configure node.cookie in /opt/homebrew/Cellar/emqx/5.3.1/etc/emqx.conf or override from environment variable EMQX_NODE__COOKIE
WARNING: NOTE: Use the same cookie for all nodes in the cluster.
你可以使用以下命令检查 EMQX 的状态:emqx ctl status
打开你的 Web 浏览器,在地址栏中输入 http://localhost:18083/(localhost 可替换为你的 IP 地址)访问 EMQX Dashboard,从中你可以连接到客户端或查看运行状态。
默认的用户名和密码为 admin 和 public。登录后,你将被要求更改默认密码。
要停止 EMQX:
[*]如果以守护进程模式启动,使用 emqx stop 或 bin/emqx stop。
[*]如果以前台模式启动,按下 Ctrl+C。
[*]如果以交互模式启动,连续按下两次 Ctrl+C。
windos下载部署
[*]下载 emqx-5.3.1-windows-amd64.zip,并解压缩。
[*]windos下载:
https://www.emqx.io/zh/downloads?os=Windows
[*]通过命令行下进入解压路径,通过以下命令启动 EMQX:
源码编译安装
环境依赖
EMQX 源码编译安装需要以下环境依赖:
[*]Erlang/OTP OTP 24 或 25 版本
[*]GCC 4.8 或更高版本
[*]Git
[*]make
[*]openssl-devel
[*]libcurl-devel
您可以使用 EMQX 提供的 Docker 编译环境EMQX Builder 从源码编译 EMQX。您可通过如下命令创建 EMQX Builder 容器,映射 EMQX 主要端口(可选)可以在编译完成后启动预览:docker run -d --name emqx-builder \
# -p 1883:1883 \
# -p 8083:8083 \
# -p 8084:8084 \
# -p 8883:8883 \
# -p 18083:18083 \
ghcr.io/emqx/emqx-builder/5.0-17:1.13.4-24.2.1-1-ubuntu20.04 \
bash -c "tail -f /dev/null"
编译并启动
EMQX 仓库位于https://github.com/emqx/emqx,其中 master 分支为最新的 EMQX 5.0 版本,main-* 分支则对应不同的次要版本(如 4.4.x、5.1.x)。以下是编译并启动 EMQX 5.x 最新版本的操作步骤:# docker exec -it emqx-builder bash
git clone https://github.com/emqx/emqx.git
cd emqx
make
_build/emqx/rel/emqx/bin/emqx console
MQTT 服务器信息
Broker:
TCP 端口:1883
WebSocket 端口:8083
SSL/TLS 端口:8883
WebSocket Secure 端口:8084
QUIC 端口:14567 mqtt web测试
http://www.emqx.io/online-mqtt-client#/recent_connections/0f72b6c0-3800-417b-bb89-d8c32cd01eff
页:
[1]