NGINX - LoadBalancing

  • L7 LB 수행 ( TCP/UDP : stream 활용 )

Upstream

Upstream Option ( PoolMember - HealthCheck Options )

Weight

  • 설명
    • 가중치 설정

    • Sample Code

      upstream myServers {       #LOAD
          server backend1 weight=5; 5/12  # Rquest 5EA Processing
           server backend2 weight=3; 3/12  # Rquest 3EA Processing
          server backend3 weight=4; 4/12  # Rquest 4EA Processing 
      }                   ### 12 
      

max_fails

  • 설명
    • 정의 : failed connection attempts before a server is marked unavailable

fail_timeout

  • 설명
    • 정의 : Time limit for failures / Duration for which server is unavailable

    • Sample Code

      upstream myServers {
          server backend1 weight=5 max_fails=10 fail_timeout=90s; 
          server backend2 weight=3 max_fails=4 fail_timeout=60s; 
          server backend3 weight=4 max_fails=2 fail_timeout=30s;
      }
      

Max_conn

  • 설명
    • Max Connection  설정 ( Default : 0 )
    • 제한 대상 : WorkerProcess 당 제한

slow_start

  • 설명

    Member Add , Slow Start

proxy_pass

  • Forward Request to Uptream Pool Member
  • 해당 Context 에서 Upstream 항목 지정

LB Method

Round Robin - Default

  • RoundRobin : 요청이 모든 서버에 동일한 수(또는 적절하게 가중치가 적용된 비율)로 분산되도록 보장

  • Round Robin

  • How to Usage

    upstream backend {
        server web1;
        server web2;
        server web3;
    }
    
    server {
        server_name www.example.com;
    
        location / {
           proxy_pass <http://backend>;
        }
    }
    

Least_conn

  • 현재 연결 수가 가장 적은 서버에 각 요청을 보냄

  • Least_conn

  • How to Usage

    upstream backend {
        least_conn;
    
        server web1;
        server web2;
        server web3;
    }
    
    server {
        server_name www.example.com;
    
        location / {
           proxy_pass <http://backend>;
        }
    }
    

Hash / ip_hash

  • Hash : 클라이언트 요청(해시 값에 캡처됨)과 특정 서버 간에 고정된 연결을 생성

  • ip Hash : 클라이언트의 IP 주소를 기반으로 하는 해시 방식

    • ipv4 : 앞 3개의 IP Address 를 기준으로 동작 ( 4개의 옥텟 활용시 $remote_addr 변수 활용 필요 )
  • Hash Algorithm

  • How to Usage - Hash

    upstream backend {
        hash $scheme$request_uri;
    
        server web1;
        server web2;
        server web3;
    }
    
    server {
        server_name www.example.com;
    
        location / {
           proxy_pass <http://backend>;
        }
    }
    
  • How to Usage - ipHash

    upstream backend {
        ip_hash;
    
        server web1;
        server web2;
        server web3;
    }
    
    server {
        server_name www.example.com;
    
        location / {
           proxy_pass <http://backend>;
        }
    }
    

least_time ( NGINX Plus )

  • 현재 활성 연결수 + 과거 요청에 대한 가중 평균 응답 시간 을 결합하여 가장 낮은 서버로 요청 보냄

  • Least_time

  • How to Usage

    upstream backend {
        least_time (header | last_byte);
    
        server web1;
        server web2;
        server web3;
    }
    
    server {
        server_name www.example.com;
    
        location / {
           proxy_pass <http://backend>;
        }
    }
    

Random ( NGINX Plus )

  • random : 여러 로드 밸런서가 동일한 백엔드 세트에 요청을 전달하는 분산 환경에 사용
  • 문법 : random [ two [methos] ];
    • Default : least_conn 활용
  • How to Usage
  • random two least_conn ## Default;
    random two least_time=header;
    random two least_time=last_byte;