로드밸런싱
로드밸런싱이란
- Load Balancing. 부하 분산
- 여러 대의 서버나 네트워크 장비에 작업을 나누어 처리하는 기술을 의미함.
- 특정 서버에 과도한 부하가 집중되는 것을 방지.
- 전체 시스템의 가용성을 높이고 응답시간을 최적화해, 사용자 경험을 크게 향상시킴.
로드밸런싱의 주요 이점
이점 | 설명 |
---|---|
성능 향상 | - 여러 서버가 작업을 나누어 처리하여, 단일 서버가 감당할 부하가 감소 - 따라서 전반적인 처리 속도가 빨라짐 |
가용성 증가 | - 특정 서버에 장애가 발생해도 로드 밸런서가 다른 정상 서버에 요청 - 이를 통해 서비스 중단을 최소화 |
확장성 증대 | - 새로운 서버를 추가하여 시스템 용량을 유연하게 확장할 수 있음 |
비용 효율성 | - 비용 효율성 : 필요에 따라 서버 추가 제거 가능 - 자원 활용 최적화 |
대표적인 부하분산 툴
- 대표적인 부하분산 툴은 L4 스위치, HAProxyt, Nginx 를 꼽을 수 있다.
- L4 스위치 : 하드웨어 기반 로드밸런서. 4계층 (전송 계층)에서 동작. IP와 포트 기반 로드밸런싱.
- HAProxy : 소프트웨어 기반 로드밸런서. 4계층 및 7계층에서 동작. 성능 뛰어나고 무료.
- Nginx : 웹서버이면서 로드 밸런싱 기능도 제공. 7계층에서 동작.
- 자세한 내용은 : 로드밸런싱 - L4스위치, Nginx, HAProxy
Nginx 로드밸런스 설정 방법
작성 예시
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# nginx.conf 파일
http {
upstream backend { # -- (1)
least_conn; # -- (2)
server backend1.example.com; # -- (3)
server backend2.example.com weight=5; # -- (4)
server 192.0.0.1 backup; # -- (5)
}
}
server {
listen 80;
location / {
proxy_pass http://backend # -- (6)
}
}
항목 설명
No | 명칭 | 설명 | 예시 |
---|---|---|---|
1 | upstream | - 서비스 요청을 처리할 수 있는 백엔드 서버의 그룹 정의 - 로드 밸런싱 기능을 수행한다. - 리버시 프록시 요청도 이 서버들 중 하나로 전달된다. - 백업서버를 지정할 수 있다. (다른 서버 장애시 백업으로) |
upstream abc |
2 | algorithm | - 로드밸런싱 알고리즘을 지정 - 알고리즘은 아래 별도 표 참고 |
|
3 | server | - 요청을 처리할 서버 - server 지시어 다음 호스트 (도메인 혹은 IP) 를 지정한다. |
server abc.com |
4 | weight | - 이 서버에 얼마나 많은 요청을 분배할지 지정하는 옵션 - weight가 높을수록 더 많은 요청이 분배된다. - 기본값은 weight=1 - weight=5 면 기본서버 대비 5배의 요청을 받게 된다. |
weight=5 |
5 | backup | - 백업 서버로 지정하는 지시어 - upstream 그룹 내의 다른 모든 서버가 다운되거나 - 모두 응답하지 않을 경우에만 백업 서버로 요청이 간다. |
backup |
6 | proxy_pass | - 들어온 요청을 다른 서버로 프록시(전달)하는 지시어 - 즉, 받은 요청을 지정한 서버로 proxy_pass 한다. - proxy_pass : 경유해서 넘겨주다 |
코드블럭 참고 |
알고리즘
알고리즘 | 표현 | 설명 |
---|---|---|
라운드로빈 | - (서버 가중치를 고려해) 요청을 서버들에게 균등하게 분배 - 아무것도 쓰지 않으면 라운드로빈으로 작동함 |
|
최소 연결 | least_conn; | - 활성 연결 수가 가장 적은 서버에게 요청을 전달 - 이 때에도 서버 가중치가 고려됨 |
IP 해시 | ip_hash; | - 클라이언트 IP 주소에 따라 요청을 받는 서버가 결정됨 - IPv4의 처음 세 옥텟 또는 IPv6 전체가 해시값 계산에 사용됨 - 같은 IP는 같은 서버에 요청이 들어가게 됨 |
일반 해시 | hash; | - 사용자 정의 키에 의해 요청을 받는 서버가 결정됨 - 키는 IP주소-포트 쌍 혹은 URI 가능 |
최소 시간 | least_time | - NGINX Plus 전용 - 평균 지연 시간 및 활성 연결 수가 가장 적은 서버에 요청이 전송됨 - 가장 낮은 평균 지연시간의 기준은 least_time 다음에 기재 least_time header; : 서버로부터 첫 번째 byte를 받는 데 걸린 시간least_time last_byte : 전체 응답을 받는 데 걸린 시간 |
Random | random | - 무작위로 요청을 받는 서버가 결정됨 - two 매개변수가 지정되면 서버 가중치 고려해 두 서버를 선택 후 - 지정된 방법을 사용해 두 서버 중 하나를 선택함 e.g. eandom two least_time=last_byte |
Comments