NGINX - LoadBalancing
- L7 LB 수행 ( TCP/UDP : stream 활용 )
Upstream
공식 : http://nginx.org/en/docs/http/ngx_http_upstream_module.html
참고 URL
upstream : Pool Member
- 실제 리얼 서버의 집합
- 설정 대상 : −UNIX socket / −Domain name / −IP:Port
- NGINX Plus API 활용시, 별도 Pool Member 저장 경로 설정 필요
Code
state /var/lib/nginx/state/http_backend.state;
- 실제 리얼 서버의 집합
NGINX Plus
- HTTP 로 Upstream Server 구성 가능 ( 삭제/추가 )
- 상세 URL : http://nginx.org/en/docs/http/ngx_http_upstream_conf_module.html
Upstream Option ( PoolMember - HealthCheck Options )
- Official URL : http://nginx.org/en/docs/http/ngx_http_upstream_hc_module.html
- 중요 Paremeters
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
- OSS / Plus 마다 지원하는 알고리즘 다름
- 참고하기 좋은 사이트 : https://www.nginx.com/blog/nginx-power-of-two-choices-load-balancing-algorithm/
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;