Load Balancing

Distribute traffic across multiple RouteMQ instances for high availability and optimal performance.

Load Balancing Overview

RouteMQ supports multiple load balancing strategies:

  • MQTT Broker Load Balancing: Distribute MQTT connections

  • Application Load Balancing: Balance HTTP/API traffic

  • Database Load Balancing: Distribute database queries

  • Geographic Load Balancing: Route based on location

  • Failover and High Availability: Automatic failover mechanisms

MQTT Load Balancing

MQTT Broker Clustering

Mosquitto Cluster Setup

# docker-compose.mqtt-cluster.yml
version: '3.8'

services:
  mosquitto-1:
    image: eclipse-mosquitto:2.0
    container_name: mosquitto-node-1
    ports:
      - "1883:1883"
      - "9001:9001"
    volumes:
      - ./docker/mosquitto/node1.conf:/mosquitto/config/mosquitto.conf:ro
      - ./docker/mosquitto/cluster-key:/mosquitto/config/cluster-key:ro
      - mosquitto1_data:/mosquitto/data
    environment:
      - MOSQUITTO_NODE_ID=1
    networks:
      - mqtt-cluster

  mosquitto-2:
    image: eclipse-mosquitto:2.0
    container_name: mosquitto-node-2
    ports:
      - "1884:1883"
      - "9002:9001"
    volumes:
      - ./docker/mosquitto/node2.conf:/mosquitto/config/mosquitto.conf:ro
      - ./docker/mosquitto/cluster-key:/mosquitto/config/cluster-key:ro
      - mosquitto2_data:/mosquitto/data
    environment:
      - MOSQUITTO_NODE_ID=2
    networks:
      - mqtt-cluster

  mosquitto-3:
    image: eclipse-mosquitto:2.0
    container_name: mosquitto-node-3
    ports:
      - "1885:1883"
      - "9003:9001"
    volumes:
      - ./docker/mosquitto/node3.conf:/mosquitto/config/mosquitto.conf:ro
      - ./docker/mosquitto/cluster-key:/mosquitto/config/cluster-key:ro
      - mosquitto3_data:/mosquitto/data
    environment:
      - MOSQUITTO_NODE_ID=3
    networks:
      - mqtt-cluster

  mqtt-load-balancer:
    image: nginx:alpine
    container_name: mqtt-lb
    ports:
      - "1880:1883"  # Load balanced MQTT port
    volumes:
      - ./docker/nginx/mqtt-lb.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - mosquitto-1
      - mosquitto-2
      - mosquitto-3
    networks:
      - mqtt-cluster

volumes:
  mosquitto1_data:
  mosquitto2_data:
  mosquitto3_data:

networks:
  mqtt-cluster:
    driver: bridge

NGINX MQTT Load Balancer

HAProxy MQTT Load Balancer

Client-Side Load Balancing

Application Load Balancing

HTTP API Load Balancing

Kubernetes Service Load Balancing

Database Load Balancing

Read/Write Split

Database Connection Pooling

Geographic Load Balancing

DNS-Based Geographic Routing

Application-Level Geographic Routing

Health Checks and Failover

Advanced Health Monitoring

Load Balancing Best Practices

Configuration Guidelines

  1. Health Checks: Always implement comprehensive health checks

  2. Graceful Degradation: Plan for partial service failures

  3. Session Persistence: Use sticky sessions when needed

  4. Connection Pooling: Optimize connection reuse

  5. Monitoring: Monitor load balancer performance

  6. Failover Speed: Minimize failover detection time

Performance Optimization

Monitoring and Alerting

Next Steps

Last updated