c/c++语言开发共享EMQX4.1.0集群搭建带redis认证_docker版

一 、 环境说明环境 : docker:18.03.1-ceEMQ X Broker版本 : 4.1.0-alpine集群发现策略 : static(静态节点列表自动集群)认证方式 : redis方式密码加密 : SHA256二、部署架构这种部署模式下 EMQ X 单集群可轻松支持 100 万设备。这里我们使用haproxy作为 LB。EMQ X 默认开启的 MQTT 服务 TCP 端口:端口说明1883MQTT 协议端口8883MQTT/SSL 端口


一 、 环境说明

环境 : docker:18.03.1-ce

EMQ X Broker版本 : 4.1.0-alpine

集群发现策略 : static(静态节点列表自动集群)

认证方式 : redis方式

密码加密 : SHA256

二、部署架构

EMQX4.1.0集群搭建带redis认证_docker版

这种部署模式下 EMQ X 单集群可轻松支持 100 万设备。

这里我们使用haproxy作为 LB。

EMQ X 默认开启的 MQTT 服务 TCP 端口:

端口 说明
1883 MQTT 协议端口
8883 MQTT/SSL 端口
8083 MQTT/WebSocket 端口
8084 MQTT/WebSocket/SSL 端口
8081 管理 API 端口
18083 Dashboard 端口

防火墙根据使用的 MQTT 接入方式,开启上述端口的访问权限。

EMQ X 节点集群使用的 TCP 端口:

端口 说明
4369 集群节点发现端口 (EPMD)
4370 集群节点发现端口
5369 集群节点 PRC 通道
6369 集群节点控制通道

集群节点间如有防护墙,需开启上述 TCP 端口互访权限。

三、部署emqx集群

  1. 创建自定义网桥

    #创建网桥 docker network create --subnet=172.30.0.0/24 emqx #列出网桥 docker network list #查看指定网桥信息 docker inspect emqx 
  2. 在宿主机创建目录

    /opt
    ├── data
    │ └── appendonly.aof
    ├── emqx
    │ ├── node01
    │ │ ├── data
    │ │ ├── etc
    │ │ │ └── acl.conf
    │ │ └── log
    │ ├── node02
    │ │ ├── data
    │ │ ├── etc
    │ │ │ └── acl.conf
    │ │ └── log
    │ └── node03
    │ ├── data
    │ ├── etc
    │ │ └── acl.conf
    │ └── log
    └── haproxy
    └── haproxy.cfg

  3. 在/opt目录下启动redis容器

    docker run -d -p 6379:6379  	-v $PWD/data:/data  	--name emqx_redis  	--network emqx  	--ip 172.30.0.104  	redis:6.0.8-alpine  	redis-server  	--appendonly yes  	--requirepass "123456"   
  4. 在redis中进行acl配置

    ## 格式 HSET mqtt_acl:[username clientid] [topic] [access]  ## 结构 redis> hgetall mqtt_acl:emqx   topic1 1 

    默认配置下示例数据:

    HSET mqtt_acl:<username> topic1 1 HSET mqtt_acl:<username> topic2 2 HSET mqtt_acl:<username> topic3 3 

    NOTE: 1: subscribe, 2: publish, 3: pubsub

  5. 将认证账号密码写入redis,

    默认配置下示例数据如下:

    HMSET mqtt_user:emqx password 8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92 

    示例密码是经过sha256加密过的。启用 Redis 认证后,你可以通过用户名: emqx,密码:123456 连接。

  6. 分别在/opt/emqx/node01、/opt/emqx/node02、/opt/emqx/node03目录下启动emqx容器

    docker run -d --name emqx_node01 -p 18083:18083 -p 1883:1883 -p 4369:4369 -p 8084:8084 -p 7083:8083  	-e EMQX_NAME="emqx_node01"  	-e EMQX_HOST=172.30.0.101  	-e EMQX_JOIN__CLUSTER="emqx_node01@172.30.0.101"  	-e EMQX_CLUSTER__DISCOVERY="static"  	-e EMQX_LISTENER__TCP__EXTERNAL=1883  	-e EMQX_LOADED_PLUGINS="emqx_auth_redis,emqx_recon,emqx_retainer,emqx_management,emqx_dashboard"  	-e EMQX_AUTH__REDIS__SERVER="172.30.0.104:6379"  	-e EMQX_AUTH__REDIS__PASSWORD="123456"  	-e EMQX_AUTH__REDIS__PASSWORD_HASH=sha256  	-e EMQX_ALLOW_ANONYMOUS=false  	-e EMQX_CLUSTER__STATIC__SEEDS="emqx_node01@172.30.0.101,emqx_node02@172.30.0.102,emqx_node03@172.30.0.103"  	-e PLATFORM_ETC_DIR=/home/emqx/etc  	-e PLATFORM_LOG_DIR=/home/emqx/log  	-e PLATFORM_DATA_DIR=/home/emqx/data  	--mount type=bind,source="$(pwd)"/etc,target=/home/emqx/etc  	--mount type=bind,source="$(pwd)"/data,target=/home/emqx/data  	--mount type=bind,source="$(pwd)"/log,target=/home/emqx/log  	--network emqx  	--ip 172.30.0.101  	emqx/emqx:v4.1.0-alpine-amd64 

    emqx_node02

    docker run -d --name emqx_node02 -p 18084:18083 -p 1884:1883 -p 4370:4369 -p 8085:8084 -p 7084:8083  	-e EMQX_NAME="emqx_node02"  	-e EMQX_HOST=172.30.0.102  	-e EMQX_JOIN__CLUSTER="emqx_node02@172.30.0.102"  	-e EMQX_CLUSTER__DISCOVERY="static"  	-e EMQX_LISTENER__TCP__EXTERNAL=1883  	-e EMQX_LOADED_PLUGINS="emqx_auth_redis,emqx_recon,emqx_retainer,emqx_management,emqx_dashboard"  	-e EMQX_AUTH__REDIS__SERVER="172.30.0.104:6379"  	-e EMQX_AUTH__REDIS__PASSWORD="123456"  	-e EMQX_AUTH__REDIS__PASSWORD_HASH=sha256  	-e EMQX_ALLOW_ANONYMOUS=false  	-e EMQX_CLUSTER__STATIC__SEEDS="emqx_node01@172.30.0.101,emqx_node02@172.30.0.102,emqx_node03@172.30.0.103"  	-e PLATFORM_ETC_DIR=/home/emqx/etc  	-e PLATFORM_LOG_DIR=/home/emqx/log  	-e PLATFORM_DATA_DIR=/home/emqx/data  	--mount type=bind,source="$(pwd)"/etc,target=/home/emqx/etc  	--mount type=bind,source="$(pwd)"/data,target=/home/emqx/data  	--mount type=bind,source="$(pwd)"/log,target=/home/emqx/log  	--network emqx  	--ip 172.30.0.102  	emqx/emqx:v4.1.0-alpine-amd64	 

    emqx_node03

    docker run -d --name emqx_node03 -p 18085:18083 -p 1885:1883 -p 4371:4369 -p 8086:8084 -p 7085:8083  	-e EMQX_NAME="emqx_node03"  	-e EMQX_HOST=172.30.0.103  	-e EMQX_JOIN__CLUSTER="emqx_node02@172.30.0.103"  	-e EMQX_CLUSTER__DISCOVERY="static"  	-e EMQX_LISTENER__TCP__EXTERNAL=1883  	-e EMQX_LOADED_PLUGINS="emqx_auth_redis,emqx_recon,emqx_retainer,emqx_management,emqx_dashboard"  	-e EMQX_AUTH__REDIS__SERVER="172.30.0.104:6379"  	-e EMQX_AUTH__REDIS__PASSWORD="123456"  	-e EMQX_AUTH__REDIS__PASSWORD_HASH=sha256  	-e EMQX_ALLOW_ANONYMOUS=false  	-e EMQX_CLUSTER__STATIC__SEEDS="emqx_node01@172.30.0.101,emqx_node02@172.30.0.102,emqx_node03@172.30.0.103"  	-e PLATFORM_ETC_DIR=/home/emqx/etc  	-e PLATFORM_LOG_DIR=/home/emqx/log  	-e PLATFORM_DATA_DIR=/home/emqx/data  	--mount type=bind,source="$(pwd)"/etc,target=/home/emqx/etc  	--mount type=bind,source="$(pwd)"/data,target=/home/emqx/data  	--mount type=bind,source="$(pwd)"/log,target=/home/emqx/log  	--network emqx  	--ip 172.30.0.103  	emqx/emqx:v4.1.0-alpine-amd64 
  7. 查看集群状态

    docker exec -it <任意emqx容器id> sh -c "emqx_ctl cluster status" 
  8. 通过emqx配置文件配置ACL

    分别将emqx容器中的acl.conf文件拷贝到宿主机挂载的/etc目录下

    示例:

    docker cp <容器ID>:/opt/emqx/etc/acl.conf /opt/emqx/node01/etc/ 

    修改宿主机acl.conf文件即可更改ACL规则。

四、Haproxy 负载均衡

  1. 运行Haproxy

    docker run -d -p 1183:1183 -p 11083:11083 --name emqx_haproxy  	--network emqx  	--ip 172.30.0.105  	haproxy:2.1-alpine 

    因为Haproxy镜像中没有haproxy.cfg配置文件,第一次会启动失败。

    将宿主机haproxy.cfg文件拷贝到容器中。

    docker cp haproxy.cfg <容器ID>:/usr/local/etc/haproxy/ 

    将以下配置放入haproxy.cfg中

    backend emqx_tcp_back     balance roundrobin     server emqx_node_1 192.168.56.104:1883 check     server emqx_node_2 192.168.56.104:1884 check     server emqx_node_3 192.168.56.104:1885 check  backend emqx_dashboard_back     balance roundrobin     server emqx_node_1 192.168.56.104:18083 check     server emqx_node_2 192.168.56.104:18084 check     server emqx_node_3 192.168.56.104:18085 check frontend emqx_tcp     bind *:1183     option tcplog     mode tcp     default_backend emqx_tcp_back  frontend emqx_dashboard     bind *:11083     option tcplog     mode tcp     default_backend emqx_dashboard_back 

    Dashboard控制台:https://宿主机IP:11083。初始账号:admin 密码:public

    客户端通过连接 <Nginx宿主机 IP:1183> 地址,Nginx将连接负载到 EMQ X 节点.

五、测试

MQTT 5.0 桌面测试客户端:https://mqttx.app/

c/c++开发分享EMQX4.1.0集群搭建带redis认证_docker版地址:https://blog.csdn.net/ninja_/article/details/108843767

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/597466.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐