[HAProxy]HAProxy 란?
SW개발/IT 용어

[HAProxy]HAProxy 란?

HAProxy 란?

HAProxy는 기존의 하드웨어 스위치를 대체하는 소프트웨어 로드 밸런서로, 네트워크 스위치에서 제공하는 L4, L7 기능 및 로드 밸런서 기능을 제공한다.

설치가 쉽고 빠르기에 서비스 이중화(HA- High Availability)를 구성하는데 주로 사용한다.

 

HAProxy

 

로드 밸런싱이란?

HAProxy 기술을 알기전에 먼저 Load Balancing 이라는 기술을 알아야 한다.

Load Balancing 이란 부하 분산을 위해서 가상 IP를 통해 여러 대의 서버에 접속을 분배하는 기능을 말한다.

 

로드 밸런서를 사용해야 하는 이유

클라이언트의 수가 많아짐에 따라 요청의 수가 늘어나게 되면 서버에는 부하가 걸리게 된다.

이를 해결하기 위해선 크게 두가지의 방법이 존재한다. 

  • Scale-up : 서버의 사양을 높임
  • Scale-out : 부하를 여러 대의 서버에 분산함

 

로드 밸런서의 주요 기능
  • NAT(Network Address Translation) : 사설 IP 주소 -> 공인 IP 주소로 바꾸는데 사용함
  • DSR(Dynamic Source Routing protocol) : 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아 가는 경우 목적지 주소를 스위치의 IP 주소가 아닌
    클라이언트의 IP 주소로 전달해서 네트워크 스위치를 거치지 않고 클라이언트로 찾아감
  • Tunelling : 인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게함

즉,  HAProxy 는 Scale-out을 위해 로드밸런싱을 해주는 소프트 웨어라고 할 수 있다.

 

HAProxy 동작 방식

HAProxy는 기본적으로 reverse proxy 형태로 동작한다.

(reverse proxy는 서버로 들어오는 요청을 대신 받아서 서버에 전달하고 요청한 곳에 그 결과를 다시 전달해주는 역할을 함)

 

 

HAProxy 동작 흐름

HAProxy는 다음과 같은 흐름으로 동작한다.

  1. 최초 접근 시 서버에 요청 전달
  2. 응답 시 쿠키에 서버 정보 추가 후 반환
  3. 재요청 시 proxy 에서 쿠키 정보 확인 -> 최초 요청 서버로 전달
  4. 다시 접근 시 쿠키 없이 추가 전달 -> 클라이언트에 쿠키 정보가 계속 존재 (쿠키 재사용)

 

HAProxy 이중화(HA) 구성

HAProxy 무정지 구성

HAProxy의 이중화 구성을 통하여 master HAProxy에 문제가 생기는 경우 slave HAProxy에서 서비스가 원할하게 제공될 수 있도록 할 수 있다. 위의 그림에서 가상 IP 주소를 공유하는 Active HAProxy 서버와 Standby HAProxy 서버가 hearbeat을 주고 받으면서 서로 정상적으로 작동하는지 확인한다. 이 때 Active 상태의 서버에 문제가 발생하면 Standby 서버가 Active 상태로 변경되면서 기존 Acitve HAProxy가상 IP를 가져오면서 서비스를 정지 없이 유지할 수 있다.

 

HAProxy balance 옵션

더 많은 옵션과 설정에 대한 정보는 아래의 페이지에서 확인할 수 있다.

cbonte.github.io/haproxy-dconv/configuration-1.4.html#4-balance

 

HAProxy version 1.4.27 - Configuration Manual

HAProxy Configuration Manual version 1.4.27 willy tarreau 2016/03/13 HAProxy 1.4.27 – Configuration Manual 2016/03/13, willy tarreau

cbonte.github.io

Balance 옵션

로드 밸런싱의 경우 round robin 방식을 일반적으로 사용한다. 옵션에 적용할 수 있는 로드 밸런싱 알고리즘은 아래와 같다.

  • roundrobin : 순차적으로 분배 (최대 연결 가능 서버 4128개) / 각 서버는 가중치에 따라 차례로 사용됨 / 처리시간이 균등하게
    분산 되어 있을 때 가장 공정한 알고리즘
  • static-rr : 서버에 부여된 가중치에 따라서 분배
  • leastconn : 접속수가 가장 적은 서버로 분배
  • source : 운영중인 서버의 가중치를 나눠서 접속자 IP를 해싱(hashing)해서 분배
  • uri : 접속하는 URI를 해싱해서 운영중인 서버의 가중치를 나눠서 분배(URI의 length or depth로 해싱)
  • url_pattern : HTTP GET 요청에 대해서 특정 패턴이 있는지 여부 확인 후 조건에 맞는 서버로 분배 (조건 없음 -> roundrobin)
  • hdr : HTTP 헤더 에서 hdr(<name>)로 지정된 조건이 있는 경우에 대해서만 분배 (조건 없음 -> roundrobin)
  • rdp-cookie : TCP 요청에 대한 RDP 쿠키에 따른 분배

 

728x90

'SW개발 > IT 용어' 카테고리의 다른 글

[Kubernetes]쿠버네티스란?  (0) 2021.05.13
[Docker]Docker(도커)란? (feat. Linux 컨테이너)  (0) 2021.05.12
[WAS, WSGI, CGI]WAS, WSGI, CGI 란?  (0) 2021.02.24
[REST]REST API 란?  (0) 2021.01.13
[Docker]Docker 란?  (0) 2021.01.12