Load Balancer란?
- Load(부하) Balancing(분산) 기술을 제공해주는 장치 혹은 기술을 의미합니다.
Load Balancing란?
- 인터넷 서비스에 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버에 부하가 집중되지 않도록 하는 기술
1. Load balancing의 종류
1.1 L4 Load Balancer
-
L4 Load Balancer는 Transport(전송)계층으로 IP주소, Port번호를 기준으로 스케줄링 알고리즘을 통해 부하를 분산합니다.
-
클라이언트에서 로드밸런서(DNS)로 요청을 보냈을 때 최적의 서버로 요청을 전송하고 결과를 클라이언트에게 줍니다. 즉, 요청하는 서비스의 종류와 상관 없이 공장을 여러 개 돌리는 것입니다.
1.2 L7 Load Balancer
-
L7 Load Balancer는 Application(응용)계층으로 IP, Port 이외에도
URI, Payload, Http Header, Cookie 등의 내용을 기준으로 부하를 분산합니다. 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능합니다. 콘텐츠 기반 스위칭이라고도 합니다.
-
L4 Load Balancer는 단지 부하를 분산시키는 것이라면, L7 Load Balancer는 요청의 세부적인 사항을 두고 결제만 담당하는 서버, 회원 가입만을 담당하는 서버 등으로 분리해서 가볍고 작은 단위로 여러 개의 서비스를 운영하고 요청을 각각의 서버에 분산할 수 있는 것입니다.
-
L7 Load Balancer는 L4 Load Balancer와 다르게 데이터를 분석해서 처리가 가능하기 때문에 악의적이거나 비 정상적인 콘텐츠를 감지해 보안 지점을 구축할 수도 있는 장점이 있고, 그 만큼 자원 소모가 크다는 단점이 있습니다.
2 스케일 업과 스케일 아웃
- 서버 하나가 있을때 많은 사람들이 몰리게 되면 서버가 부하를 감당하지 못하는 경우가 있다. 이때 서버의 성능을 높이는 Scale-up과 서버를 여러개 증가 시키는 Scale-out 방식이 있다. Scale-up은 한계가 있기 마련이기에 분산 처리를 위해서 여러 서버를 증가 시키는 scale-up을 하는데 이 기술을 로드 밸런싱이라고 한다.
2.1 스케일 인과 스케일 아웃
스케일 업
- 기존의 서버를 보다 높은 사양으로 업그레이드하는 것을 말한다. 하드웨어적인 예를 들면, 성능이나 용량 증강을 목적으로 하나의 서버에 디스크를 추가하거나 CPU나 메모리를 업그레이드 시키는 것입니다.
스케일 다운
- 인스턴스의 부품을 즉 해당 임대한 컴퓨터의 CPU나 각종 성능 관련 부품을 다운 그레이드 하는것 (비용감소)
2.2 스케일 인과 스케일 아웃
스케일 인
- Scale Out으로 늘렸던 컴퓨팅 수를 줄이는 것
스케일 아웃
-
장비를 추가해서 확장하는 방식을 말한다.
-
기존 서버만으로 용량이나 성능의 한계에 도달했을 때, 비슷한 사양의 서버를 추가로 연결해 처리할 수 있는 데이터 용량이 증가할 뿐만 아니라 기존 서버의 부하를 분담해 성능 향상의 효과와 무중단 서비스를 기대할 수 있다.
-
서버를 추가로 확장하기 때문에 수평 스케일링(horizontal scaling)이라고도 불린다.
-
클라우드 서비스에서는 자원 사용량을 모니터링하여 자동으로 서버를 증설(Scale Out)하는 Auto Scaling 기능도 있음
3. Load balancer의 주요 기능
https://nesoy.github.io/assets/posts/20180602/8.gif
- 이중화 된 load balancer는 서로 Health check를 한다.
- Primary Load Balancer가 동작하지 않게 되면 가상IP(VIP, Virtual IP)는 여분의
Secondary Load Balancer로 변경되어 운영된다.
3.1 Health Check(상태 확인)
-
로드 밸런서는 서버들에 대한 주기적인 상태 확인을 통해 서버들의 장애 여부를 판단할 수 있다. 이로 인해, 서버에 이상이 생기면 정상적으로 동작하는 서버로 트래픽을 보내 주는 Fail-Over가 가능하며, 또한 TCP/UDP 분석이 가능하기 때문에 방화벽의 역할도 수행할 수 있다.
-
L4 체크: TCP의 3-way handshaking을 통해 각 서버의 포트 상태를 확인한다.
-
L7 체크: 애플리케이션 계층에서 체크하는 방법으로 실제 웹 페이지에 통신을 시도해 이상 유무를 파악한다.
3.2 Tunneling
-
터널링은 인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념이다. 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
-
로드 밸런서의 가상IP(VIP)주소로 향하는 요구 패킷이 로드 밸런싱 서버로 전달되면 로드 밸런싱 서버에서 패킷의 목적지 주소와 포트를 검사하여 가상 서버 정책과 일치할 경우, 스케줄링에 따라 실제 작업 서버로 전달하게 된다. 이때 패킷을 일반적인 스트림 방식으로 전달하는 것이 아닌 캡슐 형식으로 감싸서 전달하게 된다. 이렇게 전달되면 작업 서버에서는 감싸진 패킷을 다시 풀고 요청을 처리한다.
3.3 NAT (Network Address Translation)
- IP 주소를 변환해 주는 기능이다. 내부 네트워크에서 사용하던 사설 IP 주소를 로드 밸런서 외부의 공인 IP 주소로 변경해 주며, 반대 과정도 가능하다. 이렇게 하면 부족한 공인 IP 주소를 효율적으로 사용할 수 있지만, 로드 밸런싱 관점에서는 여러 개의 호스트가 하나의 공인 IP 주소 (VIP)를 통해 접속하는 것이 주 목적이다
3.4 DSR (Direct Server Routing)
- 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크 장비(스위치)나 로드 밸런서를 거치지 않고 바로 클라이언트로 찾아가는 방식이다. 이 경우, 로드 밸런서의 부하를 줄여줄 수 있는 장점이 있다.
aws 에서 Load Balancer
alb → L7의 (data) 주소를 보고 부하를 분산하는 방식(k8s에서 ingress와 유사)
listen : HTTP, HTTPS, gRPC
target : IP, Instance, Lambda
가장 기본적인 로드 밸런서
nlb → L4의 PDU(segment) 중 포트 번호를 확인하고 부하를 분산하는 방식
listen : TCP, UDP, TLS
target : IP, Instance
탁월한 성능의 로드 밸런서
로드 밸런싱 알고리즘 종류
1. 라운드 로빈 방식(Round Robin Method)
- 클라이언트로부터 받은 요청을 서버에 들어온 순서대로 배정하는 방식
- 서버의 성능이 동일하고, 서버와의 연결(세션)이 오래 지속되지 않은 경우
2. 가중 라운드로빈 방식(Weighted Round Robin Method)
- 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분하는 방식
- 주로 서버 트래픽 처리 능력이 상이할때 사용되는 부하 분산 방식
- a서버의 가중치가 2 B서버의 가중치가 1일때 라운드 로빈 방식으로 a서버 2개, b서버 1개로 요청을 전달
3. IP 해시 방식(IP Hash Method)
- 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식
- 사용자의 IP를 해싱(Hashing)하여 부하를 분산하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장.
- 경로가 보장되고, 접속자 수가 많을수록 분산 및 효율이 뛰어남.
해싱: 임이의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는것
4. 최소 연결 방식(Least Connection Method)
- 요청이 들어온 시점에 가장 적은 연결(세션) 상태를 보이는 서버에 우선적으로 트래픽을 배분하는 방식
- 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합
5. 최소 리스폰타임(Least Response Time Method)
- 서버의 현재 연결 상태와 응답시간(Response Time)을 모두 고려하여, 가장 짧은 응답 시간을 보내는 서버로 트래픽을 배분하는 방식
- 각 서버의 가용한 리소스와 성능, 처리 중인 데이터 양이 상이할 경우 적합
Response Time - 서버에 요청을 보내고 최초 응답을 받을 때까지 소요되는 시간