emqx集群部署教程

10 篇文章 0 订阅
6 篇文章 0 订阅

一、EMQX介绍

EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。

Erlang/OTP是出色的软实时 (Soft-Realtime)、低延时 (Low-Latency)、分布式 (Distributed)的语言平台。

MQTT 是轻量的 (Lightweight)、发布订阅模式 (PubSub) 的物联网消息协议。

EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接,支持在海量物联网设备间低延时消息路由:

  1. 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。
  2. 分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。
  3. 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。
  4. 完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持。

二、配置说明

EMQ X 的配置文件通常以 .conf 作为后缀名,你可以在 etc 目录找到这些配置文件,主要配置文件包括:

配置文件说明
etc/emqx.confEMQ X 配置文件
etc/acl.confEMQ X 默认 ACL 规则配置文件
etc/plugins/*.confEMQ X 扩展插件配置文件

EMQ X集群默认占用的Tcp端口如下:

端口说明
1883MQTT/TCP 协议端口
11883MQTT/TCP 协议内部端口,仅用于本机客户端连接
8883MQTT/SSL 协议端口
8083MQTT/WS 协议端口
8084MQTT/WSS 协议端口
8081管理 API 端口
18083Dashboard 端口
4369集群节点发现端口 (EPMD 模式)
4370集群节点发现端口
5370集群节点 PRC 通道

三、集群安装部署

阿里云环境规划:

node-02 IP: 192.168.1.202
node-03 IP: 192.168.1.203

分布式集群部署规划:

首先配置好node-02和node-03两台单节点上的emqx,之后,依次启动;node-03执行集群加入命令,加入到node-02上集群;由于阿里云不提供VIP,最后采用阿里云提供负载均衡提供一个集群统一入口。

方法一:云环境机器zip动态手动安装部署集群

安装包下载地址:emqx安装包下载地址

# 下载安装包并解压
[root@node-02 opt]#  wget https://www.emqx.com/en/downloads/broker/v4.0.0/emqx-centos7-v4.0.0.zip
[root@node-02 opt]# unzip emqx-centos7-v4.0.0.zip 
# 修改配置文件
[root@node-02 emqx]# vim etc/emqx.conf 
....
cluster.name = emqxcl   # 集群名称
node.name = node-02@192.168.1.202 # 修改为本机主机名和IP
node.data_dir = data  # 数据存储目录
...
# 启动
[root@node-02 bin]# ./emqx start 
EMQ X Broker v4.0.0 is started successfully!
# 查看节点状态
[root@node-02 bin]# ./emqx_ctl status
Node 'node-02@192.168.1.202' is started
emqx 4.0.0 is running

node-03按照node-02配置进行修改,注意修改相应主机名和IP。

[root@node-03 bin]# ./emqx start 
EMQ X Broker v4.0.0 is started successfully!
# 查看节点状态
[root@node-03 bin]# ./emqx_ctl status
Node 'node-03@192.168.1.203' is started
emqx 4.0.0 is running

node-03执行集群加入命令:

[root@node-03 bin]# ./emqx_ctl cluster join node-02@192.168.1.202
=CRITICAL REPORT==== 16-Sep-2021::11:03:51.502636 ===
[EMQ X] emqx shutdown for join
Join the cluster successfully.
Cluster status: #{running_nodes =>
                      ['node-02@192.168.1.202','node-03@192.168.1.203'],
                  stopped_nodes => []}
# node-03上查看集群状态
[root@node-03 bin]# ./emqx_ctl cluster  status
Cluster status: #{running_nodes =>
                      ['node-02@192.168.1.202','node-03@192.168.1.203'],
                  stopped_nodes => []}
# node-02上查看集群状态
[root@node-02 bin]# ./emqx_ctl cluster  status
Cluster status: #{running_nodes =>
                      ['node-02@192.168.1.202','node-03@192.168.1.203'],
                  stopped_nodes => []}    

至此,云环境本机emqx集群部署完成,利用阿里云提供的负载均衡配置一个集群统一入口即可。

方法二: docker环境部署静态集群
docker安装部署参考博文:Centos7 安装 Docker

首先利用docker运行一个单节点emqx,将其中的配置文件复制出来

[root@node-02 ~]#  docker run -d --name emqx --rm emqx/emqx:v4.0.0
# 复制出配置文件
[root@node-02 ~]#  docker cp emqx:/opt/emqx/etc .
# 删除当前容器
[root@node-02 ~]# docker stop emqx
# 将配置文件复制到指定目录,为下一步运行挂载作准备
[root@node-02 ~]# mkdir -p  /data/emqx 
[root@node-02 ~]# mv etc /data/emqx

修改配置文件

[root@node-02 etc]# vim emqx.conf 
...
cluster.name = emqxcl 
cluster.discovery = static
cluster.static.seeds = node-02@192.168.1.202,node-03@192.168.1.203
node.name = node-02@192.168.1.202
...
# 修改下当前目前权限
[root@node-02 ~]#  chown -R 1000:1000 /data/emqx/ 

运行docker容器

[root@node-02 ~]# docker run -d --name emqx --network host -v /data/emqx/etc:/opt/emqx/etc -v /data/emqx/data:/data/emqx/data emqx/emqx:v4.0.0

node-03按照node-02配置进行修改,启动;查看集群状态

# node-02查看集群状态
[root@node-02 etc]# docker exec -it emqx /bin/sh /opt/emqx/bin/emqx_ctl cluster status
Cluster status: #{running_nodes =>
                      ['node-02@192.168.1.202','node-03@192.168.1.203'],
                  stopped_nodes => []}

方法三:使用 docker-compose 创建简单的 static 集群
docker-compose安装和常用命令参考博文:Docker-compose常用命令整理

创建 docker-compose.yaml 文件

version: '3'

services:
  emqx1:
    image: emqx/emqx:v4.0.0
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=node1.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io, emqx@node2.emqx.io"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node1.emqx.io

  emqx2:
    image: emqx/emqx:v4.0.0
    environment:
    - "EMQX_NAME=emqx"
    - "EMQX_HOST=node2.emqx.io"
    - "EMQX_CLUSTER__DISCOVERY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=emqx@node1.emqx.io, emqx@node2.emqx.io"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node2.emqx.io

networks:
  emqx-bridge:
    driver: bridge


2.启动 docker-compose 集群

$ docker-compose -p my_emqx up -d

3.查看集群

$ docker exec -it my_emqx_emqx1_1 sh -c "emqx_ctl cluster status"
Cluster status: #{running_nodes => ['emqx@node1.emqx.io','emqx@node2.emqx.io'],
                  stopped_nodes => []}

登录web查看emqx集群状态,登录地址为:http://node_IP:18083
初始账号密码为:admin/public
在这里插入图片描述

不要吝啬,点赞关注吧,么么哒!

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
要在 Docker 中部署 EMQ X 集群,可以使用 `docker run` 命令和 `emqx` 镜像。以下是一个简单的示例,演示如何使用 `docker run` 命令在单个节点上运行 EMQ X: ``` docker run -d --name emqx \ -p 1883:1883 -p 8083:8083 -p 8883:8883 \ -e EMQX_LISTENER__TCP__EXTERNAL=0.0.0.0:1883 \ -e EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management" \ emqx/emqx:latest ``` 上面的命令会在后台运行一个名为 `emqx` 的容器,并将 EMQ X 的 MQTT、WebSocket 和 MQTT over TLS 端口映射到主机的对应端口。我们还使用 `-e` 参数来定义一些环境变量,例如监听地址、加载的插件等。 要在 Docker 中部署 EMQ X 集群,需要使用多个 `docker run` 命令,并在每个容器中配置不同的节点名称、集群名称和节点地址等。以下是一个简单的示例,演示如何使用 `docker run` 命令在两个节点上运行 EMQ X 集群: ``` # 启动第一个节点 docker run -d --name emqx1 \ -p 1883:1883 -p 8083:8083 -p 8883:8883 \ -e EMQX_LISTENER__TCP__EXTERNAL=0.0.0.0:1883 \ -e EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management" \ -e EMQX_CLUSTER__DISCOVERY="static" \ -e EMQX_CLUSTER__STATIC__SEEDS="emqx[email protected]" \ -e EMQX_NODE__NAME="emqx1" \ -e EMQX_NODE__MACHINE="emqx1" \ emqx/emqx:latest # 启动第二个节点 docker run -d --name emqx2 \ -p 1884:1883 -p 8084:8083 -p 8884:8883 \ -e EMQX_LISTENER__TCP__EXTERNAL=0.0.0.0:1883 \ -e EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management" \ -e EMQX_CLUSTER__DISCOVERY="static" \ -e EMQX_CLUSTER__STATIC__SEEDS="emqx[email protected]" \ -e EMQX_NODE__NAME="emqx2" \ -e EMQX_NODE__MACHINE="emqx2" \ emqx/emqx:latest ``` 上面的命令会在两个容器中分别启动 EMQ X 节点,并将两个节点加入到同一个集群中。我们在每个容器中使用不同的节点名称、集群名称和节点地址等参数,以确保 EMQ X 能够正确地运行和通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张折耳

此处应有打赏,就看兄弟你的了!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值