Deploy EMQX cluster with docker-compose

To create an EMQX cluster to provide MQTT service and keep it as simple as much, we can do it with docker and docker-compose only.

Create /volumes/emqx-data/ on each node for persistent storage of configuration. Make sure to give write permissions.

On the first node (192.168.31.61), create a docker-compose.yaml file with content below

version: '3'

services:
  emqx1:
    image: emqx:5.5.0
    container_name: emqx1
    environment:
    - "EMQX_NAME=emqx1"
    - "EMQX_HOST=192.168.31.61"
    - "EMQX_NODE_NAME=emqx1@192.168.31.61"
    - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=[emqx1@192.168.31.61,emqx2@192.168.31.62,emqx3@192.168.31.63]"
    network_mode: "host"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    volumes:
      - /volumes/emqx-data/emqx1_data:/opt/emqx/data

On the second node (192.168.31.62), create a similar docker-compose.yaml file with content below

version: '3'

services:
  emqx1:
    image: emqx:5.5.0
    container_name: emqx2
    environment:
    - "EMQX_NAME=emqx2"
    - "EMQX_HOST=192.168.31.62"
    - "EMQX_NODE_NAME=emqx2@192.168.31.62"
    - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=[emqx1@192.168.31.61,emqx2@192.168.31.62,emqx3@192.168.31.63]"
    network_mode: "host"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    volumes:
      - /volumes/emqx-data/emqx2_data:/opt/emqx/data

On the third node (192.168.31.63), similarly

version: '3'

services:
  emqx1:
    image: emqx:5.5.0
    container_name: emqx3
    environment:
    - "EMQX_NAME=emqx3"
    - "EMQX_HOST=192.168.31.63"
    - "EMQX_NODE_NAME=emqx3@192.168.31.63"
    - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static"
    - "EMQX_CLUSTER__STATIC__SEEDS=[emqx1@192.168.31.61,emqx2@192.168.31.62,emqx3@192.168.31.63]"
    network_mode: "host"
    healthcheck:
      test: ["CMD", "/opt/emqx/bin/emqx_ctl", "status"]
      interval: 5s
      timeout: 25s
      retries: 5
    volumes:
      - /volumes/emqx-data/emqx3_data:/opt/emqx/data

Enter the folder where the docker-compose.yaml file is located, execute docker compose up -d

If nothing goes wrong, you should be able to see a running container with STATUS as healthy.

By visiting the webpage http://192.168.31.61:18083 (default credentials: admin/public), you should be able to see 3 nodes in cluster.

If you need high-availability, you should carry on deploying nginx or HAProxy, or alternatively, utilize load balancers on cloud to distribute traffic to ports on these EMQX nodes.

One comment on “Deploy EMQX cluster with docker-compose”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据