개요
HAProxy는 여러 서버에 대해 요청을 확산시키는 TCP 및 HTTP 기반 애플리케이션들을 위해 고가용성 로드밸런서와 리버스 프록시를 제공하는 자유-오픈 소스 소프트웨어이다. C 프로그래밍 언어로 개발되어 있으며 빠르고 효율적인 것으로 유명하다.
공식 사이트 참조

haproxy를 통해 부하를 분산하는 등의 용도로 서비스 효율을 높일 수 있다.
설치
여기에서 다운 받아도 되며, yum epel-release에 포함되어 있으므로 epel-release 리포지터리 추가 후 yum 이나 dnf 명령 등을 통해 설치할 수 있다.
sudo dnf install -y haproxy 마지막 메타자료 만료확인 7:58:42 이전인: 2022년 07월 28일 (목) 오전 12시 23분 23 초. 종속성이 해결되었습니다. ================================================================================ 꾸러미 구조 버전 레포지터리 크기 ================================================================================ 설치 중: haproxy x86_64 1.8.27-4.el8 appstream 1.4 M 연결 요약 ================================================================================ 설치 1 꾸러미 총계 내려받기 크기: 1.4 M 설치된 크기 : 4.2 M ...중략... 설치되었습니다: haproxy-1.8.27-4.el8.x86_64 완료되었습니다!
서비스가 구동 될 모든 서버에 설치해준다.
자동으로 서비스가 구동될 수있도록 서비스를 등록 해준다.
sudo systemctl enable haproxy.service 또는 sudo service haproxy start
설정
기본적으로 /etc/haproxy/haproxy.cfg 가 존재한다.
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# status web 설정
# haproxy 서비스 상태, 백엔드 서비스의 상태 등을 웹을 통해 확인할 수 있다.
# 필수는 아니다.
#---------------------------------------------------------------------
listen hastats
mode http
bind *:8088
stats enable
stats show-legends
stats uri /hastat
# 서버 주소가 192.168.0.1이라면 http://192.168.0.1/hastat으로 접속한다.
stats auth admin:admin
# hastats 웹에 접속 시 인증으로 제한하려면 계정과 패스워드를 지정한다.
#---------------------------------------------------------------------
# 프론트 엔드 설정
# 프론트 엔드에서 설정한 포트로 연결이 들어올 경우 백엔드로 보낸다
#---------------------------------------------------------------------
# 외부에서 haproxy를 통해 연결을 시도할 때 사용하는 포트
frontend kubeproxy
bind *:16443
default_backend kubeproxy
mode tcp
#---------------------------------------------------------------------
# 백엔드 설정
# 프론트엔드에서 defaultbackend 타겟으로 설정 된 백엔드 정보
#---------------------------------------------------------------------
backend kubeproxy
balance roundrobin
# Balance Option
# Roundrobin : 순차적으로 분배
# static-rr : 서버에 부여된 가중치에 따라서 분배
# leastconn : 접속수가 가장 적은 서버로 분배
# source : 운영중인 서버의 가중치를 나눠서 접속자 IP 해싱(hashing)해서 분배
# uri : 접속하는 URI를 해싱해서 운영중인 서버의 가중치를 나눠서 분배 (URI의 길이 또는 depth로 해싱)
# url_param : HTTP GET 요청에 대해서 특정 패턴이 있는지 여부 확인 후 조건에 맞는 서버로 분배 (조건 없는 경우 round_robin으로 처리)
# hdr : HTTP 헤더에서 hdr(<name>)으로 지정된 조건이 있는 경우에 대해서만 분배 (조건없는 경우 round robin 으로 처리)
# rdp-cookie : TCP 요청에 대한 RDP 쿠키에 따른 분배
mode tcp
option tcp-check
option tcplog
# 외부에서 16443 포트로 연결을 시도하면 아래의 서버에 순차적으로 연결해준다.
server storage01 192.168.0.1:6443 check
server storage02 192.168.0.2:6443 check
server storage03 192.168.0.3:6443 check
frontend web-console
bind *:18080
default_backend web-console
mode tcp
backend web-console
balance roundrobin
mode tcp
option tcp-check
option tcplog
server storage01 192.168.1.1:8080 check
server storage02 192.168.1.2:8080 check
server storage03 192.168.1.3:8080 check
백엔드로 동작할 모든 서버에 동일한 설정 파일을 넣어준다.
확인
haproxy 웹 서비스를 통해 정보 확인이 가능한다.

