로드밸런싱(Load Balancing)이란?
부하분산 또는 로드 밸런싱(load balancing)은 컴퓨터 네트워크 기술의 일종으로 둘 혹은 셋이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미한다.
즉, 여러서버가 분산처리하는 것을 로드 밸런싱이라고 한다.
Scale-up & Scale-out
- Scale-up의 경우 서버 자체의 성능을 확장하는 것을 의미합니다.
- 비유하자면 CPU가 i3인 컴퓨터를 i7으로 업그레이드하는 것과 같습니다.
- 반면 Scale-out의 경우 기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것을 의미합니다.
- CPU가 i3인 컴퓨터를 여러 대 추가 구입해 운영하 것에 비유할 수 있습니다.
Scale-out의 방식으로 서버를 증설하기로 결정했다면 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요합니다.
로드 밸런싱의 종류
- L4 : Transport 계층을 사용, IP 주소와 포트 번호 부하 분산이 가능
- L7 : Application 계층을 사용, URL 또는 HTTP 헤더에서 부하 분산이 가능
NLB & ALB
로드 밸런서는 몇 계층에서 분산작업을 수행하느냐에 따라 NLB(Network LoadBalancer)와 ALB(Application LoadBalancer)로 나눌 수 있습니다.
즉 L4 -> NLB | L7 -> ALB입니다.
NLB(Network LoadBalnacer)
- L4의 특성을 이용하는 로드밸런서이다. 즉, TCP와 UDP를 사용하는 요청을 받아들여 부하분산을 실시한다.
- HTTP가 아닌 하위 Layer인 TCP Layer에서 처리하므로 HTTP 헤더를 해석하지 못한다.
- 보안 그룹 설정을 안한다. => Backend에서의 SG Rule을 따름
-
NLB에서 대상을 인스턴스로 지정하면 Client IP 확인이 가능하다.
⇒ tcpdump로 서버에서 확인 가능
-
NLB에서 대상을 IP로 등록시 NLB 내부 IP를 찍는다 !!
⇒ 클라이언트 IP로 확인이 안됨 ( NLB는 L4라 안된다. )
⇒ Proxy Protocol 활성화해서 사용해야 한다.
⇒ 웹서버에서 Proxy Protocol 활성화 설정해 확인이 가능
ALB(Application LoadBalancer)
- HTTP, HTTPS의 특성을 주로 다루는 로드밸런서
- HTTP의 헤더 정보를 이용해 부하 분산을 실시하는 것이 ALB의 주요 특징이다.
- SSL 인증서를 탑재할 수 있어 대상 그룹의 EC2를 대신하여 SSL 암/복호화를 대신 진행할 수 있음
- ALB는 라운드 로빈 방식으로 서버에 접속한다.
- ELB — WEB — ELB — WAS의 경우 세션에 관한 정보들은 Redis, Memcached 사용 권장
- 외부 방화벽에서 특정 IP만 허용이 필요할 때 ALB 앞단에 NLB를 두거나 AWS Global Accelerator를 설정한다. (NLB만 IP를 고정할 수 있다.)
- ALB는 ALB 자신의 IP를 웹서버 혹은 Tomcat 서버 내부 access_log에 찍힌다. Client의 IP를 보내지 않으므로 Apache 기본 로그 설정에서 X-Forwarded-For를 추가하여 Client IP를 확인 가능
- 타겟 유형이 Instance나 ip, Lambda도 가능하다.
- Least Outstanding Requests (LOR) 알고리즘을 통해 미처리 요청이 가장 적은 대상으로 Client의 Request를 보낼 수 있다.
- 요청에 따라 대상그룹에 특정 서버로 가게 할 수 있다.
로드밸런싱 알고리즘 종류
라운드 로빈 방식
- 라운드 로빈(Round Robin Method)은 클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 순서대로 할당받는 방식입니다.
- 첫 번째 요청은 첫 번째 서버, 두 번째 요청은 두 번째 서버, 세 번째 요청은 세 번째 서버에 할당합니다. * 로드밸러닝 대상 서버의 성능이 동일하고 처리 시간이 짧은 애플리케이션의 경우, 균등하게 분산이 이루어지기 때문에 이 방식을 사용합니다.
가중 라운드 로빈 방식
- 가중 라운드 로빈 방식(Weighted Round Robin Method)은 실제 서버에 서로 다른 처리 용량을 지정할 수 있습니다.
- 각 서버에 가중치를 부여할 수 있으며, 여기서 지정한 값을 통해 처리 용량을 정합니다.
최소 연결 방식
- 최소 연결 방식은 연결 수가 가장 적은 서버에 네트워크 연결방향을 정합니다.
- 동적인 분산 알고리즘으로 각 서버에 대한 현재 연결 수를 동적으로 카운트할 수 있고, 동적으로 변하는 요청에 대한 부하를 분산시킬 수 있습니다.
참고
https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/
https://nyyang.tistory.com/96
https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903