서버 세팅 & tool/nginx

[nginx] load balancing

방푸린 2022. 3. 11. 16:06
반응형

 

로드밸런싱(load balancing)

  • 클라이언트와 백엔드 서비스 사이에 위치
  • 클라이언트로부터 요청을 받고 해당 요청을 수행할 수 있는 서비스나 인스턴스로 요청을 균등하게 전달하는 방법

 

서버의 로드밸런싱을 해주는 로드밸런서는 여러 장비/프로그램이 있을 수 있겠지만, 여기서는 nginx의 로드밸런싱에 대해 다루겠다.

https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

 

HTTP Load Balancing | NGINX Plus

HTTP Load Balancing Load balance HTTP traffic across web or application server groups, with several algorithms and advanced features like slow-start and session persistence. Overview Load balancing across multiple application instances is a commonly used t

docs.nginx.com

  • ip/port/domain 기반한 group/pool/service단위로 로드발랜싱 가능
  • proxy_pass 에 그룹으로 지정
  • http context 안에 든 upstream 에서 설정

 

로드밸런싱 룰

  • 사용자가 정한 방식에 의해 적절한 서버를 선택, 기본값은 라운드 로빈 알고리즘(균등)
  • weight를 따로줘서 가중치를 줄 수 있음. 서버가 받는 요청은 가중치에 비례함.
  • max_conns 최대 연결 서버 조정 가능, 나머지는 큐에
    • 관련하여 queue / timeout 설정 가능
  • 특정횟수만큼 실패하면 빠질 수 있음  max_fails/fail_timeouts

 

로드 밸런싱 알고리즘

주의) 로드밸런싱 알고리즘 중 세션을 보존할 수 있는게 있는데 새 서버를 추가하거나 제거하면 해시 키가 손실될 가능성이 높아서 세션 정보가 무효가 될 가능성이 있음

  1. round robin
  2. hash
    • hash $request_uri 
    • -> /example 이 요청 uri 일 경우 항상 동일한 서버로 
    • 가중치도 같이 줄 수 있음
  3. ip_hash
    • 고객의 ipv4/v6를 기반으로 해시 키 잡음. 동일한 서버로 라우팅함
  4. least_conn
    • 제일 놀고 있는 서버에게 감
  5. least_time
    • 가장 빠른 응답을 하는 서버에게, 헤더의 평균 응답시간 활
  6. 랜덤

 

세션 유지

(curl로하면 쿠키 저장이 안되서 바로 보기가 불가하고 브라우저 테스트 시 확인가능)

  • sticky cookie
    • 최초 요청 시 쿠키 생성하여 헤더에 세팅, 이후 요청에서는 헤더의 쿠키 값을 보고 해당 서버로 보냄
    • 쿠키 만료 시간, 도메인, path 설정 가능
  • sticky route 고정 경로
    • nginx가 서버의 route 변수(쿠키나 uri에서 가져옴)를 확인하여 프록시 할 서버를 식별
  • sticky learn
    • reqeust/response를 검사해서 어디로 프록시할지 결정

 

example .conf

728x90
반응형