서버 세팅 & 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
로드 밸런싱 알고리즘
주의) 로드밸런싱 알고리즘 중 세션을 보존할 수 있는게 있는데 새 서버를 추가하거나 제거하면 해시 키가 손실될 가능성이 높아서 세션 정보가 무효가 될 가능성이 있음
- round robin
- hash
- hash $request_uri
- -> /example 이 요청 uri 일 경우 항상 동일한 서버로
- 가중치도 같이 줄 수 있음
- ip_hash
- 고객의 ipv4/v6를 기반으로 해시 키 잡음. 동일한 서버로 라우팅함
- least_conn
- 제일 놀고 있는 서버에게 감
- least_time
- 가장 빠른 응답을 하는 서버에게, 헤더의 평균 응답시간 활
- 랜덤
세션 유지
(curl로하면 쿠키 저장이 안되서 바로 보기가 불가하고 브라우저 테스트 시 확인가능)
- sticky cookie
- 최초 요청 시 쿠키 생성하여 헤더에 세팅, 이후 요청에서는 헤더의 쿠키 값을 보고 해당 서버로 보냄
- 쿠키 만료 시간, 도메인, path 설정 가능
- sticky route 고정 경로
- nginx가 서버의 route 변수(쿠키나 uri에서 가져옴)를 확인하여 프록시 할 서버를 식별
- sticky learn
- reqeust/response를 검사해서 어디로 프록시할지 결정
728x90
반응형