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

chxxrin·2024년 5월 17일
0

Network

목록 보기
10/13

로드밸런싱이 왜 필요할까?

서버가 단 하나만 존재할 때 수천만명의 사람들이 서버에 동시 접속하면 어떻게 될까요?
하나의 서버는 부하를 감당하지 못할 수도 있을 것입니다.

Client가 한 두명인 경우에는 어떨까요?

  • Server는 여유롭게 사용자가 원하는 결과를 응답 해줄 수 있다.

하지만 Client가 한 두명이 아닌 수천만명이라면 어떨까요?

  • Server는 모든 사람들의 응답을 해주려고 노력하지만 결국엔 지치게 되어 동작을 멈추게 된다.
  • 요즘 시대에는 웹사이트에 접속하는 인원이 급격히 늘어나게 되어서 모든 트래픽을 감당하기엔 1대의 서버로는 부족하다.

대응 방안

  1. Scale-up : Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법
  2. Scale-out : 하나의 Server 보다는 여러 대의 Server가 나눠서 일을 하는 방법
--> Scale-up : 장비를 업그레이드
--> scale-out : 장비를 여러개 사용

Scale-out 방식

Scale-out 방식으로 여러 서버를 둔다면 해당 서비스에 접근하기 위해서는 서버마다 존재하는 다른 IP가 필요할 것입니다. 서버마다 다른 공인 IP를 부여한다면 사용자들마다 각각 다른 IP로 접속할 것이고, 개발자가 원하는 방식대로 부하를 분산하기 어려워집니다.
예를 들어 100명의 사용자가 존재하고 2대의 서버가 있다면 99명의 사용자가 서버 1에 접속하고 1명의 사용자가 서버 2에 접속할 수도 있는 것이니까요.

Scale-out 의 장점(Scale-up보다 Scale-out이 효과적)

  • 하드웨어 향상하는 비용보다 서버 한대 추가 비용이 더 적다.
  • 여러 대의 Server 덕분에 무중단 서비스를 제공할 수 있다.

-> Scale-out에 추가적으로여러 대의 Server에게 균등하게 Traffic을 분산시켜주는 역할을 하는 것이 Load Balancer

이를 방지하기 위해 서버를 분산하고 가해지는 부하를 적절하게 분산하는 작업이 필요합니다.
개발자가 의도한 대로 부하가 서버마다 골고루 분산되어야 각 서버가 적절하게 부하를 담당할 수 있을 것입니다.

로드 밸런싱(Load Balancing)

  • 두 개 이상의 컴퓨터 자원에 작업을 나누는 것
  • 하나의 인터넷 서비스가 발생하는 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율 증가, 부하량, 속도저하 등을 고려하여 적절히 분산처리하여 해결해주는 서비스
  • 웹 서버의 부하(load)를 해결하기 위해 둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것
  • 로드 밸런싱은 분산식 웹 서비스로, 여러 서버에 부하(Load)를 나누어주는 역할을 한다.
  • Load Balancer클라이언트와 서버 사이에 두고, 부하가 일어나지 않도록 여러 서버에 분산시켜주는 방식이다.
  • 서비스를 운영하는 사이트의 규모에 따라 웹 서버를 추가로 증설하면서 로드 밸런서로 관리해주면 웹 서버의 부하를 해결할 수 있다.

로드 밸런서(Load Balancer)

-작업을 담당하는 장비

로드 밸런서의 종류

로드밸런서는 OSI 7계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 나뉩니다.
2 계층을 기준으로 부하를 분산한다면 L2,
3 계층을 기준으로 부하를 분산한다면 L3인 방식입니다.
상위 계층으로 갈수록 섬세한 부하 분산이 가능하지만 가격이 비싸집니다.
하위 계층으로 갈수록 간단한 부하 분산이 가능하고 가격이 저렴해집니다.

  • Mac주소를 바탕으로 Load Balancing합니다.
    * Mac 주소 : 고유의 Mac 주소, 변경 불가능

L3(3 : Network)

  • IP주소를 바탕으로 Load Balancing합니다.
    * IP 주소 : 컴퓨터나 핸드폰을 인터넷에 연결하면 IP주소가 생성됨, 변경 가능

L4(4 : Transport)

  • Port를 바탕으로 Load Balancing을 합니다.
    * Port 주소 : 내가 어떤 서버를 만들 때, 어떤 포트로 들어오면 이 프로그램으로 들어올 수 있도록 만들어주는 길
  • TCP, UDP
  • 내가 데이터를 받아서 전송계층까지만 열어보고 분산함

L7(7 : Application) => 사용자의 요청

  • 요청(URL) 을 바탕으로 Load Balancing을 합니다.
  • HTTP, HTTPS, FTP
  • 내가 데이터를 받아서 응용계층까지 끝까지 다 열어보고 분산함
  • 7계층의 정보를 모두 알고 있어서 정보를 가지고 로드를 분산함
  • 다 패킷을 열어보고 나서 분산하므로 비정상적인 DDOS 공격을 방어할 수 있음
  • DDOS : 계속 새로고침을 함으로써 내가 유튜부 서버에 계속 요청을 보냄. 그러면 서버 과부하가 되어서 에러가 남. 즉, 계속 요청을 보내서 서버 과부하가 되는 것.


로드 밸랜서의 3가지 주요 기능

로드밸런서는 3가지의 주요 기능을 통해 로드밸런싱을 진행합니다.

1. NAT(Network Address Translation)

  • 사설 IP 주소를 공인 IP 주소로 바꾸는 데 사용하는 통신망의 주소 변조기입니다.
  • Private IP -> Public IP

2. Tunneling

  • 인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
    -데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있습니다.
  • 데이터를 캡슐화하여 연결된 노드만 캡슐을 해제할 수 있게 만든다.

3. DSR(Dynamic Source Routing protocol)

  • 요청에 대한 응답을 할 때 로드밸런서가 아닌 클라이언트의 IP로 응답
  • 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념입니다.

로드 밸랜서의 동작

기초적인 방법인 Bridge/Transparent Mode에서는 사용자가 서버에 서비스를 요청할 때 중간에서 로드밸런서가 NAT를 통해 IP/MAC주소를 변조합니다.
요청과 응답이 모두 Load Balancer를 경유 합니다.

아키텍처

HTTP

X-Forwarded-For

  • HTTP 또는 HTTPS 로드 밸런서를 사용할 때 클라이언트의 IP 주소를 식별하는 데 도움을 줍니다.

X-Forwarded-Proto

  • 클라이언트가 로드 밸런서 연결에 사용한 프로토콜(HTTP 또는 HTTPS)을 식별하는 데 도움을 줍니다.

X-Forwarded-Port

  • 클라이언트가 로드 밸런서 연결에 사용한 포트를 식별하는 데 도움을 줍니다.

로드 밸런서가 서버를 선택하는 방식

1. 라운드 로빈(Round Robin)

  • 단순히 CPU 스케줄링의 라운드 로빈 방식 활용해서 분산
  • 요청이 들어오는 대로 서버마다 균등하게 요청을 분배합니다.
  • 가장 단순한 분배 방식입니다.

2. Weighted Round Robin Scheduling

  • Round Robin방식으로 분배하지만
  • 서버의 가중치에 따라 요청을 더 분배하기도, 덜 분배하기도 합니다.
  • 서버 가중치는 사용자가 지정할 수 있고 동적으로 조정되기도 합니다.

3. Least Connections

  • 연결 개수가 가장 적은 서버 선택
  • 트래픽으로 인해 세션이 길어지는 경우 권장
  • 서버마다 연결된 커넥션이 몇개인지 체크하여 커넥션이 가장 적은 서버로 요청을 분배하는 방식입니다.

4. Weighted Least Connections

  • Least Connection방식으로 분배하지만
  • 서버 가중치에 따라 요청을 더 분배하기도, 덜 분배하기도 합니다.
  • 서버 가중치는 사용자가 지정할 수 있고 동적으로 조정되기도 합니다.
  • 서버 풀에 존재하는 서버들의 사양이 일관적이지 않고 다양한 경우 이 방법이 효과적입니다.

5. Fastest Resonse Time

  • 서버가 요청에 대해 응답하는 시간을 체크하여 응답 시간이 가장 빠른 서버로 요청을 분배하는 방식입니다.

6. Source Hash Scheduling

  • 사용자의 IP를 해싱한 후 그 결과에 따라 서버로 요청을 분배합니다.
  • 사용자의 IP는 고정되어 있기 때문에 항상 같은 서버로 연결된다는 보장을 받을 수 있습니다.

로드 밸런서 장애 대비

  • 서버를 분배하는 로드 밸런서에 문제가 생길 수 있기 때문에 로드 밸런서를 Active/Passive로 이중화하여 대비한다.

장애가 났을 경우 시나리오

  • 이중화된 Load Balancer들은 서로 Health Check를 합니다.
  • Main Load Balancer가 동작하지 않으면 가상IP(VIP, Virtual IP)여분의 Load Balancer로 변경됩니다.
  • 여분의 Load Balancer로 운영하게 됩니다.

    https://nesoy.github.io/assets/posts/20180602/8.gif

면접 질문 : 로드밸런서란?

로드밸런서는 서버의 부하를 분산시켜주는 시스템입니다. 크게 L4로드밸런서와, L7로드밸런서가 있는데요, L4 로드밸런서는 4계층 이하의 정보를 가지고 로드를 분산해줍니다. 특히 MAC주소, IP주소, 포트정보를 가지고 트래픽을 분산해주고요, L7 로드 밸런서는 응용계층의 정보를 가지고 로드 분산을 해줘요. 패킷 내용을 확인하고 분산해서 DDOS같은 비정상적인 트래픽도 필터링할 수 있습니다.

[출처]

0개의 댓글