반응형

네트워크 로드밸런싱에서 주로 언급되는 로드밸런서 L4, L7, HAProxy 위주로 설명하겠다.

L4 (Transport Layer)

L4는 IP, Port, Session 기반으로 로드밸런싱하며 웬만한 서비스에서는 이것만으로 부하 분산이 충분히 가능하다.

주의해야할 점은 L4는 VIP(가상 IP주소)단위로만 로드밸런싱하기 때문에 반드시 하나의 VIP에 연결된 서버의 수가 비슷해야 한다. 만일 일부 서버에 문제가 생긴다면, 동일한 VIP에 연결된 다른 서버 역시 연달아 부하가 발생하여 더 심각한 문제가 발생할 수 있다.

또한 L4의 스펙상 최대 세션 수는 존재하나 세션을 맺는 시나리오에 따라 최대 성능이 다르다. 때문에 최대 세션 용량에 도달하지 않았어도 추가로 세션을 연결할 수 없는 문제가 발생하기도 한다.

통신사 장애 등으로 세션이 비정상 종료된 경우, 세션 서버에서는 클라이언트와 세션이 종료되고 정상적으로 다시 연결되었지만 L4에서는 세션 종료가 제대로 되지 않아 두 개의 세션을 동시에 유지하고 있어 L4 한계 용량을 초과할 수도 있다.


L7 (Application Layer)

Application Layer에서 동작하는 스위치로 HTTP URI, FTP 파일명, 쿠키정보 packet payload(관심있는 데이터)를 분석하여 좀 더 정교한 로드밸런싱이 가능하다. (콘텐츠 기반 스위칭)

L7 스위치는 L4 스위치보다 보안적으로 우수하다. 데이터 분석을 통해 DDos 공격 방어 및 감염 패킷의 필터링이 가능하다.

  • URL 스위칭 방식 : URL 주소를 확인하여 설정에 맞는 서버로 부하 분산
  • Cookie 스위칭 방식 : HTTP Header의 cookie값 설정에 따라 스위칭
  • Content 스위칭 : HTTP Header와 XML content를 기반으로 스위칭

세션 유지 방식

L4

  • 스위치가 세션을 관리함 (패킷을 확인하고 연결될 서버와 세션을 생성)
  • sticky session : 사용자가 특정 서버와 세션을 생성한 경우, 일정 시간 동안 해당 서버에 추가적인 연결을 시켜주는 기능

L7

  • 클라이언트와 서버 각각 세션을 맺고 두 세션을 연결시켜 관리한다.

 

NginX

트래픽이 많은 웹 사이트를 위해 네트워크 확장성을 주목적으로 설계한 경량 HTTP 서버로, 리버스 프록시로도 활용이 가능하기 때문에 로드밸런서로 소개한다.

동시접속자(약 700명) 이상이라면 서버를 증설하거나 Nginx 환경을 권장한다고 한다.

AWS 인스턴스에 NginX 설치: Nginx 이해하기 및 기본 환경설정 세팅하기

프록시로 NginX 사용하기 : Nginx를 사용하여 프록시 서버 만들기


HAProxy

HAProxy(High Availability Proxy)는 TCP와 HTTP 기반 어플리케이션을 위해 사용된다. 오픈소스 로드밸런싱의 표준 중 하나이며, 다양한 리눅스 버전에서 사용할 수 있다. 

트래픽이 굉장히 많은 경우 HAProxy를 통해 효과적인 부하 분산이 가능하다. 서버 사양에 따라 HAProxy의 성능 측정은 nGrinder(https://naver.github.io/ngrinder/)에서 확인이 가능하다.

HAProxy는 기본적으로 리버스 프록시(Reverse Proxy) 형태로 동작한다.

HAProxy 동작

  • 최초 접근 시 서버에 요청 전달
  • 응답 시 쿠키(cookie)에 서버 정보 추가 후 반환
  • 재요청시 Proxy에서 쿠키 정보 확인 및 최초 요청 서버로 전달
  • 다시 접근 시 쿠키 추가 없이 전달 (쿠키 재사용, 클라이언트에 쿠키 정보 계속 존재)

HAProxy HA(High availability) 구성

소프트웨어 기반 솔루션이기 때문에 HAProxy가 설치된 서버에 장애가 발생하면 하드웨어 L4보다 불안정할 수 있다. 때문에 master HAProxy에 문제가 생겨도 페일오버할 수 있도록 HA구성을 한다.

네이버 기술블로그 - L4/L7 스위치의 대안, 오픈 소스 로드 밸런서 HAProxy 내 이미지

HAProxy는 기본적으로 VRRP(Virtual Router Redundancy Protocol)를 지원한다.

 

HAProxy 설치하기

HAProxy 설치와 환경 구성이 용이하며, 유연성, 신뢰성, 성능 측면에서도 제공하는 것이 많다. 설치 과정은 Load Balancing with HAProxy 포스팅을 참고하여 정리하였다.

HAProxy 로드 밸런서에 연결된 두 대의 서버가 있다고 가정하고, 분산 알고리즘으로는 RR(라운드 로빈)을 선택한다.

  • HAProxy : 로드밸런서, Ubuntu 14.10 OS에 설치, VIP는 10.10.10.10
  • Server 1 : Ubuntu 14.10 OS, LAMP, VIP는 10.10.10.1
  • Server 2, Ubuntu 14.04 OS, LAMP, VIP는 10.10.10.2

- Ubuntu에 HAProxy 설치하기

apt-get install haproxy

- 초기화 스크립트를 통해 HAProxy 관리하려면 다음과 같이 변경 

nano /etc/default/haproxy
ENABLED=1

- 다음 옵션을 통해 초기화 스크립트로 관리 가능하다.

$ service haproxy

- HAProxy 환경 설정 예시

nano /etc/haproxy/haproxy.cfg
listen MaxCDN-HAProxy 10.10.10.10:80
mode http
stats enable
stats uri /haproxy?status
balance roundrobin
server Server01 10.10.10.1:80 check
server Server02 10.10.10.2:80 check
server Backup   10.10.10.3:80 backup

 

- 테스트 목적으로 서버의 응답을 받기 위해서는 각 서버에 있는 index.php 파일 (/var/www/html/index.php)을 다음과 같이 변경한다.

<h1>Server #1</h1> <?php phpinfo(); ?>
<h1>Server #2</h1> <?php phpinfo(); ?>

 

- 로드밸런싱 테스트하기 위해서는 HAProxy의 VIP를 주소로 브라우저에 접속한다.

주소창 : 10.10.10.10

 

- HAProxy 서버 상태와 가동 시간을 확인하는 방법

주소창 : 10.10.10.10/hproxy?status

 


참고문서

로드밸런서란?(L4, L7)

로드 밸런싱 2가지 타입 - Layer 4(L4), Layer 7(L7)

L4/L7 스위치의 대안, 오픈 소스 로드 밸런서 HAProxy - 네이버 기술블로그

부하분산 Load Balancing 

Load Balancing with HAProxy

 

반응형