Commit b3bb14b5 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Corrige clustering usando servicio base

Define servicio inicial vernemq0 para que los demás puedan conectarse a
él. Por si mismo, no funciona con un solo servicio con más de una
réplica, tal y como se describe en el readme del proyecto vernemq.

Define porciones de configuración reutilizables y también volúmenes
diferenciados por servicio.
parent c77e0a53
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ PUBLIC_HOSTNAME=change.me

VERNEMQ_DATA_VOL_NAME=vernemq-data-vol
VERNEMQ_CONF_VOL_NAME=vernemq-conf-vol
VERNEMQ_LOG_VOL_NAME=vernemq-log-vol
REDIS_DATA_VOL_NAME=vernemq-redis-data-vol

VOL_DRIVER=local
+18 −2
Original line number Diff line number Diff line
volumes:
  vernemq0-data-vol:
    name: ${VERNEMQ_DATA_VOL_NAME}-0
    driver: ${VOL_DRIVER}
    driver_opts:
      type: ${VOL_TYPE}
      o: addr=${VOL_ADDR},${VOL_OPTS}
      device: ${VERNEMQ_DATA_VOL_DEVICE}0/

  vernemq-data-vol:
    name: ${VERNEMQ_DATA_VOL_NAME}-{{.Task.Slot}}
    driver: ${VOL_DRIVER}
    driver_opts:
      type: ${VOL_TYPE}
      o: addr=${VOL_ADDR},${VOL_OPTS}
      device: ${VERNEMQ_DATA_VOL_DEVICE}{{.Task.Slot}}
      device: ${VERNEMQ_DATA_VOL_DEVICE}{{.Task.Slot}}/

  vernemq0-conf-vol:
    name: ${VERNEMQ_CONF_VOL_NAME}-0
    driver: ${VOL_DRIVER}
    driver_opts:
      type: ${VOL_TYPE}
      o: addr=${VOL_ADDR},${VOL_OPTS}
      device: ${VERNEMQ_CONF_VOL_DEVICE}0/

  vernemq-conf-vol:
    name: ${VERNEMQ_CONF_VOL_NAME}-{{.Task.Slot}}
@@ -13,7 +29,7 @@ volumes:
    driver_opts:
      type: ${VOL_TYPE}
      o: addr=${VOL_ADDR},${VOL_OPTS}
      device: ${VERNEMQ_CONF_VOL_DEVICE}{{.Task.Slot}}
      device: ${VERNEMQ_CONF_VOL_DEVICE}{{.Task.Slot}}/

  redis-data-vol:
    name: ${REDIS_DATA_VOL_NAME}
+13 −0
Original line number Diff line number Diff line
@@ -12,6 +12,13 @@ services:
          - node.role == worker

volumes:
  vernemq0-data-vol:
    name: ${VERNEMQ_DATA_VOL_NAME}-0
    driver: 'cloudstor:aws'
    driver_opts:
      backing: shared
      perfmode: maxio

  vernemq-data-vol:
    name: ${VERNEMQ_DATA_VOL_NAME}-{{.Task.Slot}}
    driver: 'cloudstor:aws'
@@ -19,6 +26,12 @@ volumes:
      backing: shared
      perfmode: maxio

  vernemq0-conf-vol:
    name: ${VERNEMQ_CONF_VOL_NAME}-0
    driver: 'cloudstor:aws'
    driver_opts:
      backing: shared

  vernemq-conf-vol:
    name: ${VERNEMQ_CONF_VOL_NAME}-{{.Task.Slot}}
    driver: 'cloudstor:aws'
+86 −61
Original line number Diff line number Diff line
services:
  vmq-redis:
    image: ${REDIS_IMAGE_NAME:-redis}:${REDIS_IMAGE_TAG:-alpine}
    command: redis-server --appendonly yes
    networks:
      vernemq-net:
    volumes:
      - redis-data-vol:/data
    deploy:
      mode: replicated
      replicas: ${REDIS_REPLICAS:-1}
      restart_policy:
        delay: ${REDIS_RESTART_DELAY:-5s}
      update_config:
        delay: ${REDIS_UPDATE_DELAY:-1m}
      resources:
        limits:
          cpus: '${REDIS_RESOURCES_LIMITS_CPUS:-0.1}'
          memory: ${REDIS_RESOURCES_LIMITS_MEMORY:-32M}
        reservations:
          cpus: '${REDIS_RESOURCES_RESERVATIONS_CPUS:-0.001}'
          memory: ${REDIS_RESOURCES_RESERVATIONS_MEMORY:-8M}

  vernemq:
x-vernemq-base: &vernemq-base
  image: ${VERNEMQ_IMAGE_NAME:-vernemq/vernemq}:${VERNEMQ_IMAGE_TAG:-latest-alpine}
    environment:
      DOCKER_VERNEMQ_ALLOW_ANONYMOUS:
      DOCKER_IP_ADDRESS:
      DOCKER_VERNEMQ_PLUGINS__VMQ_PASSWD:
      DOCKER_VERNEMQ_PLUGINS__VMQ_ACL:
      DOCKER_VERNEMQ_PLUGINS__VMQ_DIVERSITY:
      DOCKER_VERNEMQ_VMQ_DIVERSITY__AUTH_REDIS__ENABLED:
      DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__HOST:
      DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__PORT:
      DOCKER_VERNEMQ_DISTRIBUTED_COOKIE:
      DOCKER_VERNEMQ_NODENAME: vernemq-{{.Task.Slot}}
      DOCKER_VERNEMQ_DISCOVERY_NODE: vernemq-1
      DOCKER_VERNEMQ_SWARM:
      DOCKER_VERNEMQ_ACCEPT_EULA:
    hostname: vernemq-{{.Task.Slot}}
  networks:
    vernemq-net:
    metric-net:
@@ -57,13 +19,23 @@ services:
    timeout: ${HEALTHCHECK_TIMEOUT:-15s}
    retries: ${HEALTHCHECK_RETRIES:-5}
    start_period: ${HEALTHCHECK_START_PERIOD:-1m}
    volumes:
      - vernemq-data-vol:/vernemq/data
      - vernemq-conf-vol:/vernemq/etc
      - vernemq-log-vol:/vernemq/log
    deploy:

x-vernemq-environment: &vernemq-environment
  DOCKER_VERNEMQ_ALLOW_ANONYMOUS:
  DOCKER_IP_ADDRESS:
  DOCKER_VERNEMQ_PLUGINS__VMQ_PASSWD:
  DOCKER_VERNEMQ_PLUGINS__VMQ_ACL:
  DOCKER_VERNEMQ_PLUGINS__VMQ_DIVERSITY:
  DOCKER_VERNEMQ_VMQ_DIVERSITY__AUTH_REDIS__ENABLED:
  DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__HOST:
  DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__PORT:
  DOCKER_VERNEMQ_DISTRIBUTED_COOKIE:
  DOCKER_VERNEMQ_NODENAME: vernemq-{{.Task.Slot}}
  DOCKER_VERNEMQ_SWARM:
  DOCKER_VERNEMQ_ACCEPT_EULA:

x-vernemq-deploy: &vernemq-deploy
  mode: replicated
      replicas: ${VERNEMQ_REPLICAS:-1}
  placement:
    max_replicas_per_node: 1
  restart_policy:
@@ -90,6 +62,56 @@ services:
      cpus: '${VERNEMQ_RESOURCES_RESERVATIONS_CPUS:-0.1}'
      memory: ${VERNEMQ_RESOURCES_RESERVATIONS_MEMORY:-128M}

services:
  vmq-redis:
    image: ${REDIS_IMAGE_NAME:-redis}:${REDIS_IMAGE_TAG:-alpine}
    command: redis-server --appendonly yes
    networks:
      vernemq-net:
    volumes:
      - redis-data-vol:/data
    deploy:
      mode: replicated
      replicas: ${REDIS_REPLICAS:-1}
      restart_policy:
        delay: ${REDIS_RESTART_DELAY:-5s}
      update_config:
        delay: ${REDIS_UPDATE_DELAY:-1m}
      resources:
        limits:
          cpus: '${REDIS_RESOURCES_LIMITS_CPUS:-0.1}'
          memory: ${REDIS_RESOURCES_LIMITS_MEMORY:-32M}
        reservations:
          cpus: '${REDIS_RESOURCES_RESERVATIONS_CPUS:-0.001}'
          memory: ${REDIS_RESOURCES_RESERVATIONS_MEMORY:-8M}

  vernemq0:
    << : *vernemq-base
    environment:
      << : *vernemq-environment
    hostname: vernemq0
    volumes:
      - vernemq0-data-vol:/vernemq/data
      - vernemq0-conf-vol:/vernemq/etc
      - vernemq0-log-vol:/vernemq/log
    deploy:
      << : *vernemq-deploy
      replicas: 1

  vernemq:
    << : *vernemq-base
    environment:
      << : *vernemq-environment
      DOCKER_VERNEMQ_DISCOVERY_NODE: vernemq0
    hostname: vernemq{{.Task.Slot}}
    volumes:
      - vernemq-data-vol:/vernemq/data
      - vernemq-conf-vol:/vernemq/etc
      - vernemq-log-vol:/vernemq/log
    deploy:
      << : *vernemq-deploy
      replicas: ${VERNEMQ_REPLICAS:-1}

networks:
  vernemq-net:
    name: ${VERNEMQ_NET_NAME:-vernemq-net}
@@ -107,5 +129,8 @@ networks:
    external: true

volumes:
  vernemq0-log-vol:
    name: ${VERNEMQ_LOG_VOL_NAME}-0

  vernemq-log-vol:
    name: ${VERNEMQ_LOG_VOL_NAME:-vernemq-log-vol}-{{.Task.Slot}}
    name: ${VERNEMQ_LOG_VOL_NAME}-{{.Task.Slot}}