SW/WEB WAS

[HAProxy] HAProxy를 이용한 로드 밸런싱 및 포트 포워딩 설정

yeit 2024. 1. 4. 19:50
728x90

 

Proxy란?

  • Proxy란 ‘대리’라는 의미로, 클라이언트와 서버 간의 통신을 중계하는 중간 매개체
  • 중계 기능을 수행하는 주체가 Proxy Server
  • Proxy Server는 클라이언트와 서버 사이에 위치하여 클라이언트의 요청을 받아서 서버로 전달하고, 서버의 응답을 받아서 클라이언트에게 전달

 

 

HAProxy란?

  • 고가용성 및 부하 분산을 위한 오픈 소스 TCP/HTTP 로드밸런서 소프트웨어
  • High Availability Proxy 고가용 프록시의 약자로, C언어로 작성된 고성능 오픈소스 소프트웨어
  • 장점 : 고가용성 및 부하 분산
              가상 호스트와 여러 네트워크 레이어(L4, L7)를 지원
              사용자가 트래픽을 세밀하게 제어 가능
  • 단점 : 단일 포인트 오브 실패(SPOF)
              Windows는 지원하지 않음

 

실습 구성 환경

HAProxy Server : centos-7.8, 223.130.X.X   => 로드 밸런서 및 포트 포워딩 해주는 역할

Web01 Server : centos-7.8, 175.45.X.X

Web02 Server : centos-7.8, 223.130.X.X

 

 

 

실습1. HAProxy를 이용한 로드 밸런싱

방화벽

HAProxy Server_Inbound : My IP  22포트,  My IP  80포트

web server_Inbound : My IP  22포트, MyIP  80포트,  HAProxy Server IP  80포트

 

web01-server, web02-server

Apache 설치

# yum install -y httpd

 

index.html 수정

web01-server)

# cd /var/www/html
# vi index.html
web01-server

:wq
web02-server)

# cd /var/www/html
# vi index.html
web02-server

:wq

 

Apache 서비스 시작

# systemctl start httpd.service

 

각각 web01-server, web02-server IP로 웹페이지 접속 확인

 

 

HAProxy Server

haproxy server 설치

# yum install -y haproxy

# haproxy -v    => HA Proxy 버전 확인

 

haproxy.cfg 수정

# vi /etc/haproxy/haproxy.cfg

...
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             app

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------

backend static
    balance     roundrobin
    server      server01 <web01-server ip>:80 check
    server      server02 <web02-server ip>:80 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server      server01 <web01-server ip>:80 check
    server      server02 <web02-server ip>:80 check

 

haproxy 서비스 재시작

# systemctl restart haproxy.service

 

haproxy-server IP로 웹페이지 접속 확인

새로고침을 하면 HAProxy가 로드밸런싱을 수행하여, 각각의 요청을 백엔드 서버로 번갈아가며 전달하는 것을 확인할 수 있다.

 

 

실습2. HAProxy를 이용한 포트 포워딩

방화벽

HAProxy Server_Inbound : My IP  22포트,  My IP  8333포트

web server_Inbound : My IP  22포트, HAProxy Server IP  80포트

 

 

HAProxy Server

haproxy.cfg 수정

# vi /etc/haproxy/haproxy.cfg

... 밑부분에 원래 있던 내용 삭제하고 추가

frontend front
    bind *:8333
    mode tcp
    default_backend back


backend back
    mode tcp
    balance roundrobin
    server server01 <web01-server ip>:80 check
    server server02 <web02-server ip>:80 check

  • frontend front: 프론트엔드 섹션의 이름을 'front'라고 지정
  • bind *:8333: 8333 포트에서 들어오는 트래픽을 받도록 설정
  • mode tcp: TCP 모드
  • default_backend back: 기본적으로 백엔드 서버 그룹인 'back'으로 연결을 전달
  • backend back: 백엔드 섹션의 이름으로 'back'으로 지정
  • mode tcp: TCP 모드
  • balance roundrobin: 라운드 로빈 방식으로 로드 밸런싱을 수행
  • server server01 175.45.X.X:80 : 'server01'이라는 이름의 첫 번째 서버를 정의
  • check : 해당 서버의 상태를 정기적으로 확인하라는 옵션

haproxy-server IP:8333로 웹페이지 접속 확인

새로고침을 하면 HAProxy가 로드밸런싱 및 포트포워딩을 수행하여 요청을 백엔드 서버로 분산하는 것을 확인할 수 있다.

 

 

 

 

 

 

 

 

728x90