[Linux] HAproxy 사용법

Joseph's Engineering Blog·2023년 8월 1일
0
post-thumbnail

포스팅 이유

HAproxy 사용법에 대해 간단하게 알아보고자 함.



1. HAproxy란?

HAProxy는 Scale-out을 위한 Load Balancing을 해주는 SW Load Balancer입니다.

scale-out 이란?

횡으로 확장하여 부하를 분산하는 경우를 말합니다. 쉽게 말해 같은 서버(혹은 Pod)를 늘리고 부하를 분산하는 케이스입니다. 반대는 scale-up이라 하여 자체 스팩(사양)을 높이는 경우가 있습니다.

기존 HW Load Balancer의 경우

  • L2 스위치 (MAC 주소 기반 Load Balancing)
  • L3 스위치 (IP 주소 기반 Load Balancing)
  • L4 스위치 (Transport Layer(IP ,Port)단의 Load Balancing) - TCP, UDP
  • L7 스위치 (Application Layer(사용자 Request)단의 Load Balancing) - HTTP, HTTPS, FTP

가 있습니다.



2. HAproxy의 기능 및 동작

L4스위치와 L7 스위치가 제공하는 Load Balancing 기능을 제공합니다.

기본적으로 Reverse Proxy 형태로 동작합니다.

서버 앞단에서 서버로 오는 요청을 대신 받아 뒷단의 서버에 전달하고 결과를 리턴 받아 요청한 곳으로 다시 전달하는 역할을 합니다.



3. HAproxy 설치 및 사용법

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 으로 전달해주라고 정의되어 있습니다.

profile
Kubernetes / DevOps / Git / Network / AWS / Terraform / Opensource / Java / Springboot

0개의 댓글