EMQX集群搭建+Redis認證+haproxy代理

一、前言背景

由于公司產(chǎn)品發(fā)展需要,需要一款消息推送的服務(wù),通過網(wǎng)上查詢資料,以及將來在Iot方面的應(yīng)用前景,隧選定使用EMQ服務(wù)。

二、EMQX集群搭建

為了方便,所有的按照搭建都是在docker容器環(huán)境下進行的,使用docker-compose進行的服務(wù)管理

EMQX靜態(tài)模式集群搭建開始

廢話不多說,各種心酸流程略過……docker-compose.yml配置文件如下

三、為增加EMQX集群增加Redis認證

首先在上面的配置文件中,增加redis認證的配置

四、為emqx集群增加haproxy代理

配置詳解:


注意:這里使用的haproxy鏡像是有ssl證書的,官方鏡像上我沒有找到,是自己構(gòu)建的一個鏡像,在構(gòu)建這個鏡像過程中,遇到很多問題,也是由于第一次構(gòu)建鏡像,經(jīng)驗不足,在進行docker build過程中,總是報I/0異常,換了阿里的鏡像源和科大的都還是不行,但是鏡像運行起來后,進入鏡像然后執(zhí)行apk update等是沒有問題,所以我中這種方式構(gòu)建了一個新的ssl鏡像。

haproxy代理配置詳解:


五、查看haproxy監(jiān)控平臺和訪問emqx的dashboard

訪問:http://localhost:8404/haproxy?stats? 用戶名/密碼:admin/password


訪問emqx的控制臺:http://localhost:18083


六、完整配置文件如下:

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"

? ? - "EMQX_LOADED_PLUGINS=emqx_auth_redis,emqx_recon,emqx_rule_engine,emqx_retainer,emqx_management,emqx_dashboard"

? ? - "EMQX_ALLOW_ANONYMOUS=false"

? ? - "EMQX_AUTH__REDIS__SERVER=emqx_redis:6379"

? ? - "EMQX_AUTH__REDIS__DATABASE=0"

? ? - "EMQX_AUTH__REDIS__PASSWORD=123456"

? ? - "EMQX_AUTH__REDIS__PASSWORD_HASH=salt,sha256"

? ? - "EMQX_AUTH__REDIS__AUTH_CMD=HMGET mqtt_user:%u password salt"

? ? - "EMQX_ZONE__EXTERNAL__RETRY_INTERVAL=2s"

? ? - "EMQX_MQTT__MAX_TOPIC_ALIAS=10"

? ? - "EMQX_MQTT__MAX_PACKET_SIZE=1MB"

? ? security_opt:

? ? ? ? - apparmor=unconfined

? ? healthcheck:

? ? ? test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]

? ? ? interval: 5s

? ? ? timeout: 25s

? ? ? retries: 5

? ? depends_on:

? ? - emqx_redis

? ? 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"

? ? - "EMQX_LOADED_PLUGINS=emqx_auth_redis,emqx_recon,emqx_rule_engine,emqx_retainer,emqx_management,emqx_dashboard"

? ? - "EMQX_ALLOW_ANONYMOUS=false"

? ? - "EMQX_AUTH__REDIS__SERVER=emqx_redis:6379"

? ? - "EMQX_AUTH__REDIS__DATABASE=0"

? ? - "EMQX_AUTH__REDIS__PASSWORD=123456"

? ? - "EMQX_AUTH__REDIS__PASSWORD_HASH=salt,sha256"

? ? - "EMQX_AUTH__REDIS__AUTH_CMD=HMGET mqtt_user:%u password salt"

? ? - "EMQX_ZONE__EXTERNAL__RETRY_INTERVAL=2s"

? ? - "EMQX_MQTT__MAX_TOPIC_ALIAS=10"

? ? - "EMQX_MQTT__MAX_PACKET_SIZE=1MB"

? ? security_opt:

? ? ? ? - apparmor=unconfined

? ? healthcheck:

? ? ? test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]

? ? ? interval: 5s

? ? ? timeout: 25s

? ? ? retries: 5

? ? depends_on:

? ? - emqx_redis

? ? networks:

? ? ? emqx-bridge:

? ? ? ? aliases:

? ? ? ? - node2.emqx.io

? emqx_redis:

? ? image: redis:latest

? ? ports:

? ? - 6379:6379

? ? security_opt:

? ? ? ? - apparmor=unconfined

? ? volumes:

? ? ? - /media/liuzk/本地磁盤2/docker-container/redis/emqx_redis/data:/data:rw

? ? command: redis-server --appendonly yes --requirepass "123456"

? ? networks:

? ? ? - emqx-bridge

? emqx_haproxy:

? ? image: ssl-haproxy-2.3:latest

? ? security_opt:

? ? ? - apparmor=unconfined

? ? ports:

? ? ? - 1883:1883

? ? ? - 8404:8404

? ? ? - 8883:8883

? ? ? - 18083:18083

? ? volumes:

? ? ? - ./haproxy:/usr/local/etc/haproxy:ro

? ? depends_on:

? ? - emqx1

? ? - emqx2

? ? networks:

? ? ? - emqx-bridge


networks:

? emqx-bridge:

? ? driver: bridge


haproxy配置文件如下:

global

? log 127.0.0.1? local0

? log 127.0.0.1? local1 notice

? user root

? group root

? daemon


listen admin_stats

? stats enable

? bind *:8404

? mode http

? option httplog

? log global

? maxconn 10

? timeout client 5000

? stats hide-version

? stats refresh 30s

? stats show-node

? stats realm haproxy

? stats auth admin:password

? stats uri /haproxy?stats

frontend emqx_tcp

? bind *:1883

? mode tcp

? maxconn 500000

? timeout client 3h

? option tcplog

? log-format %T\ %t\ Some\ Text

? default_backend emqx_tcp_cluster


frontend emqx_tcp_ssl

? bind *:8883 ssl crt /etc/ssl/xip.io/xip.io.pem no-sslv3

? mode tcp

? maxconn 500000

? timeout client 3h

? option tcplog

? log-format %T\ %t\ Some\ Text

? default_backend emqx_tcp_cluster

frontend emqx_dashboard

? bind *:18083

? mode http

? maxconn 50

? timeout client 5000

? default_backend emqx_dashboard_server


backend emqx_tcp_cluster

? mode tcp

? option clitcpka

? balance leastconn

? timeout connect 5000

? timeout server 3h

? timeout check 5000

? server emqx1 emqx1:1883 check inter 2000 fall 2 rise 5 weight 1

? server emqx2 emqx2:1883 check inter 2000 fall 2 rise 5 weight 1

backend emqx_dashboard_server

? mode http

? option http-keep-alive

? balance source

? timeout connect 50000

? timeout server 50000

? timeout check 5000

? server emqx1 emqx1:18083 check inter 2000 fall 2 rise 5 weight 1

? server emqx2 emqx2:18083 check inter 2000 fall 2 rise 5 weight 1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容