개요
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 웹 서비스를 통해 정보 확인이 가능한다.