로드 밸런싱 - MoonGyeongHyeon/Keyword_Study GitHub Wiki

로드 밸런싱?

동일한 역할을 수행하는 서버 그룹을 VIP를 통해 관리하며, 서버로 향하는 트래픽을 일단 VIP를 가진 L4 스위치로 수신한 후, 분배 정책에 따라 적절한 서버에 분배해주는 것을 의미한다.

  • VIP: Virtual IP의 약자로, 서버 그룹의 대표 IP라 할 수 있다. 로드 밸런싱을 수행하는 L4 스위치가 VIP를 가지고 있다. 서버와 통신하고자 하는 클라이언트는 VIP를 향해 트래픽을 전송하고 L4 스위치가 이 트래픽을 받아 적절한 서버에 로드 밸런싱 해준다.
  • L4 스위치: 한마디로, 부하분산 장비(로드 밸런서)라 할 수 있다. 웬만한 사이트는 서버 한 대로 사용자들의 트래픽을 감당하기 어렵기 때문에 동일한 역할을 수행하는 서버를 여러 대 두어서 사용자들의 트래픽이 많아져도 유연하고 안정적으로 사이트를 운영하기 위해 L4 스위치를 통한 로드 밸런싱을 하고있다.

L4 스위치를 쓰는 이유

L4 스위치를 사용하는 이유는 크게 두 가지가 있다.

로드 분산

첫 번째 이유는 로드를 분산하기 위해서(로드 밸런싱)이다.

예를 들어, 웹 서비스(128.x.x.1, port: 80)를 하는 서버가 하나 있다고 하자. 서비스를 유지하면서 서버를 하나 더 증설해야 하는 상황이다. 하지만 서버를 분리시키면 IP가 하나 더 필요하게 되고 IP가 늘어나면 기존 서비스와 IP가 달라지는 문제가 생긴다. 이럴 때 사용하는 장비가 L4 스위치이다.

L4 스위치에 VIP 주소를 '128.x.x.1'로, 기존 서버를 '128.x.x.2'로, 새로운 서버를 '128.x.x.3'으로 할당한다. 그리고 L4 스위치에 로드 밸런싱이 가능하게 세팅한다. 그럼 이제 '128.x.x.1'로 요청하는 응답에 대해서 L4 스위치가 처리하게 된다. L4 스위치는 로드 밸런싱 분배 정책에 따라 기존 서버에서 응답할 수도, 새로운 서버에서 응답할 수도 있다.

이렇게 한 서버의 요청 건수를 줄여주어 실제로 한 대의 서버가 처리해야 할 요청을 두 대의 서버가 처리할 수 있게 된다. 또한, '128.x.x.1, port: 80' 에 대한 요청만을 받기 때문에, 80이 아닌 포트로 들어오는 공격을 막을 수 있다는 장점도 있다.

Fail over

두 번째 이유는 'Fail over' 기능을 제공하는 것이다. 서버, 시스템, 네트워크 등에서 이상이 생겼을 때 예비 시스템으로 자동 전환되는 기능을 'Fail over' 라고 한다.

예를 들어, 위와 같은 조건으로 서비스를 하고 있는 상태에서 기존 서버(128.x.x.2)에 장애가 발생하게 되더라도 새로운 서버(128.x.x.3)이 응답할 수 있게 된다.

이렇게 미리 동일한 작업을 수행하는 서버를 준비해 놓고 L4를 이용해서 Fail over 기능을 적용하면 첫 번째 서버에 장애가 있더라고 미리 준비해놓은 서버가 동작하게 되므로 실제로 서비스하는 데에는 문제가 없게 된다.

분배 정책

Round Robin

  • 사용자의 요구를 차례대로 각 서버에 균등하게 분배하는 방식이다.
  • 오픈 세션 수나 응답 시간에 상관 없이 그룹 내의 모든 서버를 동일하게 처리한다.
  • 가장 단순한 로드 밸런싱 알고리즘.
  • 5:5에 가까운 분산이 가능하다.
  • 클라이언트가 어떤 서버에 매칭이 될지에 대한 경로 보장이 안된다.

Least Connection

  • 서버의 오픈 세션 수를 고려한 다음, 가장 적은 수의 오픈 세션을 가진 서버로 세션을 맺어주는 방식이다.
  • Maximum Connections 옵션: 각 서버의 현재 세션 수가 설정된 Max Connection 수에 도달한 경우 더이상 새로운 세션이 할당되지 않는다. 만약 백업 서버가 설정된 경우 해당 서버가 대치되어 서비스한다.
  • 현재 세션이 가장 적은 쪽으로 요청 전송한다.
  • 현재 세션 수를 고려하기 때문에 약간의 메모리 자원을 소비한다.
  • 일반적인 서버 로드 밸런싱에서 많이 사용하는 방식이다.
  • 5:5에 가까운 분산이 가능하다.
  • 경로 보장이 안된다.

Weighted Least Connection

  • Least Connection 방식에 서버의 성능 가중치를 추가한 것이다.
  • 가중치가 높은 서버에서 더 많은 요청을 받게 된다.
  • 서로 다른 처리 능력을 가진 서버가 있을 경우 사용한다.

Fastest Response Time

  • 각 서버들이 서로 상이한 자원과 커넥션에 따른 시간과 데이터 양이 다른 환경에서 사용한다.
  • 서버와 통신을 하면서 그 응답 시간에 대한 학습을 하고, 그걸 이용하여 응답 시간이 빠른 쪽으로 더 많은 커넥션을 보내는 방식이다.

Hash

  • Hashing 알고리즘을 사용하여 로드 밸런싱 하는 기법이다.
  • 클라이언트의 IP가 서버 그룹 내의 서버에 대한 Index를 생성하는 요소로 사용된다.
  • 동일한 클라이언트의 요청은 동일한 서버로 연결된다.
  • 만약 서버에 오류가 발생하거나, 서버 그룹에 서버가 추가/제외된 경우 재할당한다.
  • 세션을 유지해야 할 필요가 있는 사이트(인증, 보안 등)에서 주로 사용한다.
  • 경로가 보장된다.
  • 메모리를 적게 사용하고 요구 절차가 간단하다.
  • 세션이 5:5로 분산되기 어렵다.

L7 스위치

L7은 어플리케이션 영역을 담당하고 있다. L7 스위치는 L4 스위치가 갖는 문제점들을 해결하기 위해 패킷의 IP, 포트 정보 뿐만 아니라 패킷의 URL 정보, 쿠키 정보 등을 종합적으로 검사하여 사용자 별로 연속적이고 차별화된 서비스를 제공할 수 있으며 더욱 효율적이고 정교한 로드 밸런싱이 가능하다.

  • L4 스위치의 문제점: VoIP나 P2P와 같은 어플리케이션에 대해 다향한 형태의 패킷 내용을 보기가 어렵고, 사용자의 IP가 수시로 변경되는 경우 해당 사용자에 대한 연속적인 서비스를 제공하기 어렵다.

L7 스위치는 L4 스위치가 가지고 있는 기능들을 모두 수용하면서, 불필요한 트래픽에 대한 차단이나 네트워크에 대한 공격을 완화시켜준다. 단, 가격이 L4 스위치보다 비싸다.

소프트웨어 로드 밸런서

HAProxy

HAProxy는 기존의 하드웨어 스위치를 대체하는 소프트웨어 로드 밸런서로, 네트워크 스위치에서 제공하는 L4, L7 기능 및 로드 밸런서 기능을 제공한다. HAProxy는 설치가 쉽고 환경 설정도 어렵지 않아 쉽게 적용할 수 있다는 장점이 있다.

동작 방식

HAProxy는 기본적으로 reverse proxy 형태로 동작한다. reverse proxy는 실제 서버 요청에 대해서 서버 앞단에 존재하며, 서버로 들어오는 요청을 대신 받아서 서버에 전달하고 요청한 곳에 그 결과를 다시 전달한다.

HAProxy HA(High Availability) 구성

HAProxy는 기본적으로 VRRP(Virtual Router Redundancy Protocol)를 지원한다. HAProxy의 성능 상 초당 8만 건 정도의 연결을 처리해도 크게 무리가 없지만, 소프트웨어 기반의 솔루션이기 때문에 HAProxy가 설치된 서버에 문제가 발생하면 하드웨어 L4보다 불안정할 수 있다. 따라서 HA 구성으로 Master HAProxy에 문제가 생길 경우, Slave HAProxy에서 서비스가 원활하게 제공될 수 있는 구성으로 이루어져 있다.

다음 그림과 같은 구성에서는 가상 IP 주소를 공유하는 active HAProxy 서버와 standby HAProxy 서버가 서로 정상적으로 동작하는지 여부를 확인한다. active 상태의 서버에 문제가 발생하면 standby 상태의 서버가 active 상태로 변경되면서 기존 active HAProxy의 가상 IP 주소를 가져와 서비스가 무정지 상태를 유지한다. 다만, 1초 정도의 끊김 현상은 발생할 수 있다.