linux_wiki:dns_load_balancing

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

linux_wiki:dns_load_balancing [2019/05/25 23:50]
linux_wiki:dns_load_balancing [2019/05/25 23:50] (current)
Line 1: Line 1:
 +====== DNS Load Balancing ======
 +
 +**General Information**
 +
 +DNS load balancing with Nginx streams. 
 +
 +**Checklist**
 +  * Install Nginx
 +
 +----
 +
 +====== Main Config File ======
 +
 +Replace the entire main config (/etc/nginx/nginx.conf) with:
 +<code bash>
 +## NGINX - Main Configuration ##
 +
 +# Context: Main - General Server Configuration
 +
 +# User that worker processes run as
 +user  nginx;
 +
 +# Number of worker processes (auto = set to number of CPUs)
 +worker_processes  auto;
 +
 +# Error logging and PID of main process
 +error_log  /var/log/nginx/error.log warn;
 +pid        /var/run/nginx.pid;
 +
 +# Load dynamic modules. See /usr/share/nginx/README.dynamic.
 +include /usr/share/nginx/modules/*.conf;
 +
 +# Include enabled configurations
 +include /etc/nginx/conf.d/enabled/*.conf;
 +
 +# Context: Events - Connection Processing
 +events {
 +  # Max number of connections per worker process
 +  worker_connections  1024;
 +}
 +
 +# No http contexts because we are doing stream processing with the included drop in files
 +</code>
 +
 +----
 +
 +====== Nginx DNS Load Balance Stream Config ======
 +
 +Stream config drop in file.
 +
 +/etc/nginx/conf.d/available/dns_loadbalance.conf
 +<code bash>
 +stream {
 +
 +    # Stream Logging Setup
 +    log_format proxy '"Src:$remote_addr" [$time_local] '
 +                 '"Prot:$protocol" "Status:$status" "Sent:$bytes_sent" "Recv:$bytes_received" '
 +                 '"SesTime:$session_time" "DNS:$upstream_addr" '
 +                 '"Sent:$upstream_bytes_sent" "Recv:$upstream_bytes_received" "ConnTime:$upstream_connect_time"';
 +
 +    # Log Location
 +    access_log  /var/log/nginx/dns_access.log proxy;
 +
 +    # Backend DNS Servers
 +    upstream dns_servers {
 +        # Balancing Type: Least Connections
 +        least_conn;
 +        # Passive Health Checks (defaults): fail_timeout=10, max_fails=1
 +        # (server marked down if 1 failure in 10 second period and stays down for 10 seconds)
 +        # weight=5 : use these dns servers 5 times more than others with no weight
 +        server 192.168.1.1:53 weight=5;
 +        server 192.168.1.2:53 weight=5;
 +        server 192.168.1.3:53;
 +    }
 +
 +    # Frontend listener
 +    server {
 +        listen     53 udp;
 +        proxy_pass dns_servers;
 +        # Bind response to interface request was received on
 +        proxy_bind $server_addr;
 +        proxy_timeout 1s;
 +        proxy_responses 1;
 +        error_log /var/log/nginx/dns_errors.log;
 +    }
 +}
 +</code>
 +
 +----
  
  • linux_wiki/dns_load_balancing.txt
  • Last modified: 2019/05/25 23:50
  • (external edit)