Multi-Node Setup

This guide covers deploying session clustering in a production multi-node environment.

Deployment Architecture

spinner

Prerequisites

  • Redis 5.0+ (for reliable Pub/Sub)

  • All application nodes can reach Redis

  • Unique node identifiers for each instance

Configuration by Environment

Docker Compose

# docker-compose.yml
version: '3.8'

services:
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

  app1:
    build: .
    environment:
      - NODE_ID=app-node-1
      - REDIS_URL=redis://redis:6379
      - SESSION_SECRET=${SESSION_SECRET}
    depends_on:
      - redis

  app2:
    build: .
    environment:
      - NODE_ID=app-node-2
      - REDIS_URL=redis://redis:6379
      - SESSION_SECRET=${SESSION_SECRET}
    depends_on:
      - redis

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - app1
      - app2

volumes:
  redis_data:

Kubernetes

Application Configuration

Node ID Strategies

Using Environment Variables

Using Hostname

Using Kubernetes Pod Name

Generating Unique ID

Message Flow

spinner

Health Checks

Application Health Check

Kubernetes Probes

Graceful Shutdown

Monitoring

Metrics to Track

spinner

Prometheus Metrics Example

Troubleshooting

Sessions Not Syncing

  1. Check Redis connectivity from all nodes

  2. Verify channel name is identical across nodes

  3. Check node_id is unique per node

  4. Verify Pub/Sub is working:

High Cache Miss Rate

  1. Increase cache size if evictions are high

  2. Increase TTL if sessions aren't changing frequently

  3. Check invalidation frequency - too many invalidations?

Memory Issues

  1. Reduce cache size: local_cache_max_size

  2. Reduce TTL: Forces more frequent eviction

  3. Monitor with: store.cache_stats

Redis Connection Issues

  1. Enable circuit breaker to prevent cascading failures

  2. Configure retry logic for transient errors

  3. Use connection pooling for high-traffic apps

Best Practices

1. Use Consistent Node IDs

Ensure node IDs persist across restarts to avoid duplicate subscriptions:

2. Size Cache for Peak Load

3. Use Separate Redis for Sessions

4. Enable Encryption for Sensitive Data

5. Implement Graceful Degradation

Last updated

Was this helpful?