본문 바로가기
ComputerScience/Network

[Network] 3.로드밸런싱(Load Balancing)

by Develaniper 2021. 5. 27.

1.로드밸런싱

서버가 수천만명의 사람들의 접속을 감당하지 못하면 어떻게 해야할까? 이를 해결 하는 방식에는 2가지가 있다.

1. 장비를 업그레이드 하는 Scale-up방식

2. 장비를 여러개 두는 Scale-out방식

2번의 경우 장비를 여러개 두게 된다면 장비마다 다른 IP를 가지게 되어 어떤 서버에 누가 얼마나 들어가는지 설정하지 못하기 때문에 각 서버에 부하를 적절하게 분산해야한다.

 개발자의 의도대로 각 서버가 부하를 적절하게 나누는 것을 로드밸런싱(load balancing)이라고 한다. 이때 로드밸런싱을 담당하는 장비를 로드밸런서(load balancer)라고 한다.

2. 로드밸런서의 종류

로드밸런서는 OSI 7계층을 기준으로 부하를 분산하는 방법에 따

라 종류가 나뉜다.

계층 방법 프로토콜
L2 Data link 계층을 사용, Mac주소 기반 부하 분산  
L3 Network 계층을 사용, IP주소 기반 부하 분산  
L4 Transport 계층을 사용, Port 기반 부하 분산 TCP, UDP
L7 Application 계층을 사용, 요청(URL) 기반 부하 분산 HTTP, HTTPS 등

하층으로 갈 수 록 부하 분산이 가능하고 가격이 저렴해진다.

 

 

포트기반 로드밸런싱은 포트를 확인 한 후 각 포트에 맞는 서버로 트래픽을 분산하는 방법이다. 위 그림에서는 같은 223.130.195.200으로 요청하더라도 1111번 포트로 요청 시 IP가 223.130.195.201인 서버로, 2222번 포트로 요청시 IP가 223.130.195.203인 서버로 부하를 분산시키고 있다.

 

 

URL기반 로드밸런싱은 포트를 확인 한 후 각 포트에 맞는 서버로 트래픽을 분산하는 방법이다. 위 그림에서는 같은 223.130.195.200으로 요청하더라도 /cafe 요청 시 IP가 223.130.195.201인 서버로, /blog 요청시 IP가 223.130.195.203인 서버로 부하를 분산시키고 있다.

 

  L4 로드밸런서 L7 로드밸런서
네트워크 계층 Layer 4
전송계층(Transport Layer)
Layer 7
응용계층(Application layer)
특징 TCP/UDP 포트 정보를 바탕으로 함 TCP/UDP 정보와 HTTP의 URL, FTP의 파일면, 쿠키정보등을 바탕으로 함
장점 데이터 안을 들여다보지 않고 패킷 레벨에서만 로드를 분산하기 때문에 속도가 빠르고 효율이 높음

데이터 내용을 복화화 하지 않아 안전함

L7보다 저렴함
상위계층에서 로드를 분산하기 때문에 훨씬 섬세한 라우팅이 가능함

캐싱 기능을 제공함

비정상적인 트래픽을 사전에 필터링할 수 있어 안정성이 높음
단점 패킷의 내용을 살펴볼 수 없어 섬세한 라우팅이 불가능 함

사용자의 IP가 수시로 바뀌는 경우 연속적인 서비스 제공이 어려움
패킷의 내용을 복호화해야 하기 대문에 더 높은 비용이 듦

클라이언트가 로드밸런서와 인증서를 공유해야하기 때문에 공격자가 로드밸런서를 통하여 클라이언트 데이터에 접근할 위험성이 있음

 

3. 로드밸런서 기능

 

1. Health Check

서버들의 장애여부를 판단하기 위해 주기적인 Health Check가 진행됩니다. 때문에 로드밸런서가 있다면 이상이 생긴 서버가 있더라도 다른 정상 서버로 트래픽을 돌려주는 Fail-over가 가능하며, TCP/UDP 분석을 수행하며 방화벽 역할을 수행 할 수 있습니다.

 

L3체크 : ICMP를 이용하여 서버의 IP주소가 통신 가능한 상태인지 확인합니다.

L4체크 : TCP 3way-handshaking 을 기반으로 TCP체크합니다.(각 포트 체크)

L7체크 : 애플리케이션 계층에서 체크, 실제 웹페이지에 통신을 시도하여 이상 유무를 파악.

2. Tunneling

눈에 보이지 않는(가상의) 통로를 만들어 통신할 수 있게 하는 개념, 로드밸런서는 클라이언트와 서버 간 중간에서 터널링을 제공해줌. 즉, 연결된 상호간(양쪽 끝)에만 캡슐화된 패킷을 구별해 캡슐화를 해제함.

3. NAT(Network Address Translation)

IP 주소를 변환해 주는 기능으로 로드밸런서를 기준으로 외부 IP -> 사설IP, 사설IP-> 외부 IP로 변환하는 기능이다. 여러개의 호스트(클라이언트)가 공인IP주소 1개만을 가지고  접속하는 것이 목적이다.

  • SNAT(Source Network Address Translation) [ 내부(사설)IP -> 외부(공인)IP ]
    • 내부에서 외부로 트래픽이 나가는 경우, 내부 사설 IP 주소를 외부의 공인 IP 주소로 변환하는 방식(대표적으로 집에서 사용하는 공유기가 있다.)
  • DNAT(Destination Network Address Translation)[ 외부(공인)IP -> 내부(사설)IP ]
    • 외부에서 내부로 트래픽이 들어올 때 외부 공인 IP주소를 내부 사설 IP주소로 변환하는 방식(대표적으로 로드밸런서가 있다.)

4. DSR(Direct Server Return(Routing))

 

 서버에서 클라이언트로 되돌아가는 경우, 목적지를 클라이언트로 설정한 후 네트워크 장비나 로드밸런서를 거치지 않고 바로 클라이언트를 찾아가는 방식-> 로드밸런서의 부하를 줄여줄 수 있다.

위 그림은 NAT와 DSR을 표시한 그림이다. 로드 밸런서를 경유하여 요청을 받고 있는 서버는 로드 밸런서를 거치지 않고 바로 클라이언트에게 응답을 하고 있다(DSR). 또한 클라이언트는 Destination IP를 B라고 보냈지만 로드밸런서를 거치며  자신의 IP인 B대신 B-1로 수정되어 전달되고있다(DNAT). 또한 Destination은 자신의 IP를 B-1대신 B로 변경하여 응답을 보내고 있다(SNAT).

 

5. 처리방식

1) 라운드 로빈(Round Robin)

 단순히 순서에 따라 세션을 할당하는 방법으로 경로별(서버별)로 같은 처리량이 보장되지 않는다. (서버별로 가볍고 무거운 요청이 동등하게 가지 않기 때문) 따라서 여러대의 서버가 동일한 스펙을 갖고 있을 때 세션이 오래지속되지 않을경우 적합한 방식이다.

2) 가중치 및 비율 할당 방식(가중 라운드 로빈)

 서버마다 비율을 정해두고 비율만큼 세션을 맺어주는 방식이다. 예를 들어, 성능이 뛰어난 서버가 있으면 해당 서버에 세션을 많이 맺어주도록 가중치를 설정하고 나머지 서버에는 적은 세션이 맺어지도록 가중치를 설정한다. 예를들어 A의 가중치가 3 B의 가중치가 1이라면 A에 3개의 트래픽을 보내고 B에 1나를 보내는 식으로 진행한다.

3) 응답시간

가장 빠른 응답 시간을 보내는 서버로 트래픽을 우선 보내주는 방식이다. 이때 빠른 응답시간의 척도는 가용 리소스와 성능, 처리중인 데이터 양 등을 조합하여 산정한다.

4) 최소연결

 세션연결의 수가 가장 적은 서버로 트래픽을 보내는 방식으로 가장 많이 사용되는 방식이다.

5) 해시(Hash)기반

 ip를 해싱한 후 그 값에 따라 특정 클라이언트는 특정 서버로만 할당시키는 방식이다. 경로가 보장되며 접속자 수가 많을 수록 분산 및 효율이 뛰어나다.

6) 대역폭(bandwith) 기반

 서버들과의 대역폭을 고려하여 트래픽을 분산하는 방식이다.

 

 

 

참고

https://deveric.tistory.com/91
https://m.post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903
https://www.stevenjlee.net/2020/06/30/이해하기-네트워크의-부하분산-로드밸런싱-load-balancing-그/ 

차후 볼만한 자료들

https://www.ncloud.com/product/networking/loadBalancer
https://d2.naver.com/helloworld/6070967

 

댓글