Skip to main content

Implementing High Availability

1. Configuring Nginx Active-Passive

Directive Description Example
upstream Defines a group of servers upstream backend { server 192.168.1.10:80; server 192.168.1.11:80; }
server Defines a server in the upstream group server 192.168.1.10:80 weight=1;
keepalive Enables persistent connections to upstream servers keepalive 32;

Example: Active-Passive Configuration

upstream backend {
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s backup;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

2. Implementing Active-Active Setup

Directive Description Example
upstream Defines a group of servers upstream backend { server 192.168.1.10:80; server 192.168.1.11:80; }
least_conn Load balancing based on least connections upstream backend { least_conn; server 192.168.1.10:80; server 192.168.1.11:80; }
ip_hash Uses client IP to determine server upstream backend { ip_hash; server 192.168.1.10:80; server 192.168.1.11:80; }

Example: Active-Active Configuration

upstream backend {
    least_conn;
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

3. Using Virtual IP

Directive Description Example
virtual_server Defines a virtual server in the upstream group virtual_server 192.168.1.50:80;
ip_hash Uses client IP to determine server ip_hash;
keepalive Enables persistent connections to upstream servers keepalive 32;

Example: Virtual IP Configuration

upstream backend {
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
}

server {
    listen 192.168.1.50:80;
    location / {
        proxy_pass http://backend;
    }
}

4. Configuring Health Check Scripts

Directive Description Example
health_check Enables health checks for upstream servers health_check interval=30s fails=2 passes=1;
interval Interval between health checks health_check interval=30s;
fails Number of failed checks before marking server as down health_check fails=2;

Example: Health Check Configuration

upstream backend {
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
    health_check interval=30s fails=2 passes=1;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

5. Implementing Session Persistence

Directive Description Example
ip_hash Uses client IP to determine server ip_hash;
sticky_cookie Uses cookie to maintain session sticky_cookie srv_id expires=1h;
keepalive Enables persistent connections to upstream servers keepalive 32;

Example: Session Persistence Configuration

upstream backend {
    ip_hash;
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

6. Using DNS Round Robin

Directive Description Example
resolver Defines DNS resolver for resolving hostnames resolver 8.8.8.8;
resolver_timeout Timeout for DNS resolution resolver_timeout 5s;
upstream Defines a group of servers upstream backend { server example.com; }

Example: DNS Round Robin Configuration

upstream backend {
    resolver 8.8.8.8;
    server example.com:80 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

7. Configuring Upstream Retry

Directive Description Example
proxy_next_upstream Defines conditions under which to retry upstream requests proxy_next_upstream error timeout invalid_header http_500 http_502;
proxy_next_upstream_tries Number of retries to attempt proxy_next_upstream_tries 3;
proxy_next_upstream_timeout Timeout for retries proxy_next_upstream_timeout 10s;

Example: Upstream Retry Configuration

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_next_upstream error timeout invalid_header http_500 http_502;
        proxy_next_upstream_tries 3;
        proxy_next_upstream_timeout 10s;
    }
}

8. Implementing Circuit Breaker Pattern

Directive Description Example
max_fails Number of failed requests before marking server as down server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
fail_timeout Time to wait before retrying a failed server server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
backup Marks server as backup for failover server 192.168.1.11:80 backup;

Example: Circuit Breaker Configuration

upstream backend {
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s backup;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

9. Using Zone Sync for Cluster State

Directive Description Example
zone Defines a shared memory zone for storing state zone 128k;
shared Enables shared memory zones shared zone=backend:128k;
keepalive Enables persistent connections to upstream servers keepalive 32;

Example: Zone Sync Configuration

upstream backend {
    zone 128k;
    server 192.168.1.10:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
    }
}

10. Monitoring Failover Events

Directive Description Example
error_log Enables logging of errors and events error_log /var/log/nginx/error.log;
log_format Defines custom log format log_format failover '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_addr';
access_log Enables access logging with custom format access_log /var/log/nginx/access.log failover;

Example: Failover Monitoring Configuration

log_format failover '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_addr';

server {
    listen 80;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log failover;

    location / {
        proxy_pass http://backend;
    }
}

11. Implementing Graceful Degradation

Directive Description Example
proxy_next_upstream Defines conditions under which to retry upstream requests proxy_next_upstream error timeout invalid_header http_500 http_502;
proxy_next_upstream_tries Number of retries to attempt proxy_next_upstream_tries 3;
proxy_next_upstream_timeout Timeout for retries proxy_next_upstream_timeout 10s;

Example: Graceful Degradation Configuration

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_next_upstream error timeout invalid_header http_500 http_502;
        proxy_next_upstream_tries 3;
        proxy_next_upstream_timeout 10s;
    }
}

12. Configuring Connection Draining

Directive Description Example
keepalive Enables persistent connections to upstream servers keepalive 32;
proxy_http_version Specifies HTTP version to use for proxying proxy_http_version 1.1;
proxy_set_header Sets custom headers for proxy requests proxy_set_header Connection ""; proxy_set_header Host $host;

Example: Connection Draining Configuration

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header Host $host;
    }
}

Was this article helpful?