HAproxy 사용법에 대해 간단하게 알아보고자 함.
HAProxy는 Scale-out을 위한 Load Balancing을 해주는 SW Load Balancer입니다.
scale-out 이란?
횡으로 확장하여 부하를 분산하는 경우를 말합니다. 쉽게 말해 같은 서버(혹은 Pod)를 늘리고 부하를 분산하는 케이스입니다. 반대는 scale-up이라 하여 자체 스팩(사양)을 높이는 경우가 있습니다.
기존 HW Load Balancer의 경우
가 있습니다.
L4스위치와 L7 스위치가 제공하는 Load Balancing 기능을 제공합니다.
기본적으로 Reverse Proxy 형태로 동작합니다.
서버 앞단에서 서버로 오는 요청을 대신 받아 뒷단의 서버에 전달하고 결과를 리턴 받아 요청한 곳으로 다시 전달하는 역할을 합니다.
yum install haproxy
설치는 매우 간편합니다. Yum repo만 잡혀 있다면 yum command를 통해 설치가 가능합니다.
저는 Port forwarding을 목적으로 Haproxy를 사용했습니다.
Port forwarding을 하기 위해 haproxy.cfg 파일을 수정했습니다.
설정을 살펴보면
frontend { frontend 명(custom) }
bind *:{ 들어오는 port }
mode tcp
default_backend { backend 명(custom }
backend { backend 명(custom) }
mode tcp
balance roundrobin # Load Balance 형태
server { server명(custom) } { target IP }:{ target PORT } check
fontend쪽에는 설치된 서버의 어떤 Port를 통해 들어오는 트래픽을 어떤 backend와 매핑시킬지 정의합니다.
backend쪽에는 frontend를 통해 들어온 트래픽을 어떤 Server, 어떤 Port로 forwarding 해줄지 정의합니다.
backend쪽에 server를 추가하면 balance에 정의해준 방법으로(여기선 roundrobin) target server들에 부하 분산을 해줍니다.
실제 harpoxy.cfg 파일을 살펴보면
vi /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# https://www.haproxy.org/download/1.8/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
...
frontend tomcat-in
bind *:8082
mode tcp
default_backend tomcat-backend
backend tomcat-backend
mode tcp
balance roundrobin
server server2 10.1.2.2:8080 check
frontend tomcat-in-w1
bind *:8081
mode tcp
default_backend tomcat-backend-w1
backend tomcat-backend-w1
mode tcp
balance roundrobin
server server1 10.1.2.1:8080 check
...
다음과 같습니다.
이를 풀어보면 8082 포트를 통해 들어오는 트래픽을 10.1.2.2:8080으로 전달해주고, 8081 포트를 통해 들어오는 트래픽은 10.1.2.1:8080 으로 전달해주라고 정의되어 있습니다.