EMQX-5.3.1单机集群部署并基于Nginx实现负载均衡

本例单机集群部署使用三个节点,分别为node1、node2、node3

一、安装与配置

1 创建数据目录

复制代码
mkdir -p node1/data  node1/logs
mkdir -p node2/data  node2/logs
mkdir -p mode3/data  node3/logs

2 数据目录授权

复制代码
chown 1000 node1/ node2/ node3/
chown 1000 node1/data/ node1/logs/
chown 1000 node2/data/ node2/logs/
chown 1000 node3/data/ node3/logs/

3 创建docker-compose.yml文件

复制代码
version: '3'
services:
  emqx1:
    image: emqx:5.3.1
    container_name: emqx1
    environment:
    - "[email protected]"
    - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=[[email protected],[email protected],[email protected]]"
    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:
      - /etc/localtime:/etc/localtime:ro
      - ./node1/logs:/opt/emqx/log
      - ./node1/data:/opt/emqx/data

  emqx2:
    image: emqx:5.3.1
    container_name: emqx2
    environment:
    - "[email protected]"
    - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=[[email protected],[email protected],[email protected]]"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node2.emqx.io
    ports:
      - 1873:1883
      - 8073:8083
      - 8074:8084
      - 8873:8883
      - 18073:18083
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./node2/logs:/opt/emqx/log
      - ./node2/data:/opt/emqx/data

  emqx3:
    image: emqx:5.3.1
    container_name: emqx3
    environment:
    - "[email protected]"
    - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=[[email protected],[email protected],[email protected]]"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    networks:
      emqx-bridge:
        aliases:
        - node3.emqx.io
    ports:
      - 1863:1883
      - 8063:8083
      - 8064:8084
      - 8863:8883
      - 18063:18083
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./node3/logs:/opt/emqx/log
      - ./node3/data:/opt/emqx/data

networks:
  emqx-bridge:
    driver: bridge

4 启动运行EMQX

复制代码
docker-compose up -d

5 EMQX的Dashboard访问地址 http://${ip}:${port} 参考:http://192.168.1.xxx:18083/

默认用户名: admin

默认密码: public

登录后提示修改密码

6 配置Nginx的负载均衡策略

nginx.conf内容如下:

复制代码
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

stream {
  upstream emqx_tcp_cluster {
     server 10.10.1.100:1883 weight=1 max_fails=3 fail_timeout=30s;
     server 10.10.1.110:1873 weight=1 max_fails=3 fail_timeout=30s;
     server 10.10.1.120:1863 weight=1 max_fails=3 fail_timeout=30s;
 }
  server {
    listen 1893;
    proxy_pass emqx_tcp_cluster;
    proxy_buffer_size 8k;
    tcp_nodelay on;
  }
}

7 扩展其他负载均衡策略

随机轮询

随机轮询就是从待选列表中随机分配连接

复制代码
upstream emqx_tcp_cluster {
      random;
      # emqx的三个实例
      server 10.10.1.100:1883;
      server 10.10.1.110:1873;
      server 10.10.1.120:1863;
}

带权轮询

部署的服务器存在性能差异,我们可以通过配置权重 weight 来修改轮询的几率

复制代码
upstream emqx_tcp_cluster {
      # emqx的三个实例
      server 10.10.1.100:1883 weight=1;
      server 10.10.1.110:1873 weight=2;
      server 10.10.1.120:1863 weight=3;
}

least_conn 策略

最小连接数策略,优先分配给获得连接数较少的服务器

复制代码
upstream emqx_tcp_cluster {
       least_conn;
      # emqx的三个实例
      server 10.10.1.100:1883;
      server 10.10.1.110:1873;
      server 10.10.1.120:1863;
}

IP Hash 策略

有特殊需求,希望同一个客户端连接至同一个服务器,则可以使用 IP Hash 策略

复制代码
upstream emqx_tcp_cluster {
       ip_hash;
      # emqx的三个实例
      server 10.10.1.100:1883;
      server 10.10.1.110:1873;
      server 10.10.1.120:1863;
}
相关推荐
Sonetto19999 小时前
Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?
运维·前端·nginx
白总Server1 天前
Nginx 中间件
大数据·linux·运维·服务器·nginx·bash·web
异常君1 天前
HTTP头中的Accept-Encoding与Content-Encoding深度剖析
后端·nginx·http
生命有所坚持而生存可以随遇而安1 天前
https nginx 负载均衡配置
服务器·nginx·负载均衡
Python私教1 天前
CentOS 7 基于 Nginx 的 HTML 部署全流程指南
nginx·centos·html
五号厂房2 天前
客户端收到413 Request Entity Too Large错误该如何解决?
nginx
大胆刁民2 天前
nginx
nginx
王者鳜錸2 天前
2024从Maven-MySQL-Nginx部署
mysql·nginx·maven
中国lanwp2 天前
Pingora vs. Nginx vs. 其他主流代理服务器性能对比
运维·nginx
李菠菜2 天前
利用Nginx实现高性能的前端打点采集服务(支持GET和POST)
linux·前端·nginx