HAProxy Install(디렉토리 지정 설치)
회사에서 Load Balance가 필요할때,
유료 로드밸런스를 구매해서 사용하기도 하지만, 돈이 없거나 잠시 사용 or 테스트 용으로 사용할때
무료로 사용하는 용도로 HAProxy를 자주 구성하여 활용합니다.
오늘은 HAProxy를 설치&구성하는 방법을 작성합니다.
OS와 APP의 영역을 구분하기 위해,
HAProxy를 yum을 통한 설치가 아닌 디렉토리를 지정하여 설치하는 방식으로 진행합니다.
[HAProxy의 Reverse Proxy 겸 Load Balance 동작 방식]
2020.12.10 - [IT Knowledge/HAProxy] - HAProxy, 오픈소스 로드 밸런서
[HAProxy Latest 버전 확인]
어떤 버전의 HAProxy를 설치할 것인가?
End of Life가 가장 긴 버전을 선택 2.4.12!
[Pre-Requirement 설치]
Yum install gcc pcre pcre-devel systemd-devel zlib zlib-devel opensssl openssl-devel
[HAProxy 설치]
설치 위치는 /haproxy 아래에 모두 설치
이후 HAProxy 관리는 /haproxy 폴더만 관리하면 된다.
[HAProxy Latest 다운로드 경로]
# mkdir /haproxy
# cd /haproxy
# wget https://www.haproxy.org/download/2.4/src/haproxy-2.4.12.tar.gz --no-check-certificate
# tar zxvf haproxy-2.4.12.tar.gz
# mv haproxy-2.4.12 haproxy-2.4.12-installed
[HAProxy 소스 빌드]
# cd haproxy-2.4.12-installed
# make TARGET=linux-glibc USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_PCRE=1
# make install PREFIX=/haproxy/haproxy-2.4.12
# ln -s /haproxy/haproxy-2.4.12 /haproxy/haproxy
설치 옵션 명 | 설명 | 비고 |
USE_OPENSSL | ssl 인증서 활성화 | |
USE_ZLIB | 압축을 사용할 경우 | |
USE_SYSTEMD | systemd를 통해서 서비스 컨트롤 | |
USE_PCRE | 펄 호환 정규식을 사용할 경우 |
sbin 등록
# cd /usr/sbin/
# ln -s /haproxy/haproxy/sbin/haproxy haproxy
설치된 haproxy 버전확인
# haproxy -vv
개별 폴더 생성
//haproxy 설정파일 폴더
# mkdir /haproxy/haproxy/config
//haproxy 에러페이지 모음
//haproxy.cfg 설정 파일 내 http status 상태 코드에 따른 error 안내 페이지 설정
# mkdir /haproxy/haproxy/errors
//haproxy SSL키파일 모음
//haproxy.cfg 설정 파일 내 인증서 파일 지정 위치에 key 파일 가져다 놓기
# mkdir /haproxy/haproxy/keys
//haproxy Log 파일 모음
# mkdir /haproxy/haproxy/log
//haproxy service 등록 파일 모음
# mkdir /haproxy/haproxy/systemd
[HAProxy 상세설정]
2022.01.24 - [IT Knowledge/HAProxy] - HAProxy Config파일 옵션 정리!!
# cd /haproxy/haproxy/config
# vi haproxy.cfg
# global Settings
global
daemon
maxconn 10000
log 127.0.0.1:514 local0
...
# defauls 섹션(frontend, backend, listen)에 공통으로 적용되는 설정
defaults
log global
mode http
option httplog
option forwardfor
errorfile 400 /haproxy/haproxy/errors/400.http
...
# frontend 클라이언트로부터 연결을 받아들이는 설정 ( 443 포트 )
frontend https-income
mode http
bind *:443 ssl crt /haproxy/haproxy/keys/certificate.pem #ssl 인증서 파일
acl host_xxx hdr(host) -i xxx.example.com
use_backend http-xxx if host_xxx
...
# backend 클라이언트의 연결을 서버로 전달하는 설정
backend http-xxx
balance roundrobin
#xxx server1
server xxx1 localhost:8888
#xxx server2
server xxx2 localhost:8889
...
Tip! haproxy config 설정 문법 체크 # haproxy -f <Config File Path> -c # haproxy -f /haproxy/haproxy/config/haproxy.cfg -c |
[서비스(systemd) 등록]
haproxy.service 파일 생성 및 작성
# vi /haproxy/haproxy/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=network.target
[Service]
Environment="CONFIG=/haproxy/haproxy/config/haproxy.cfg"
Environment="PIDFILE=/var/run/haproxy.pid"
ExecStartPre=/sbin/haproxy -f $CONFIG -c
ExecStart=/sbin/haproxy -Ws -f $CONFIG -p $PIDFILE
ExecReload=/sbin/haproxy -f $CONFIG -c -q
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
Restart=always
SuccessExitStatus=143
Type=notify
[Install]
WantedBy=multi-user.target
haproxy.service systemd 등록
# cd /etc/systemd/system/
# ln -s /haproxy/haproxy/systemd/system/haproxy.service haproxy.service
haproxy 서비스 enable/start/stop/reload/status
systemctl enable haproxy
systemctl start haproxy
systemctl stop haproxy
systemctl reload haproxy
systemctl status haproxy
[haproxy log 설정 ( rsyslog.d 이용 )]
# cd /etc/rsyslog.d/
# vi haproxy.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$template Haproxy, "%msg%\n"
local0.* /haproxy/haproxy/log/haproxy.log
local0.notice /haproxy/haproxy/log/haproxy-allbutinfo.log
# systemctl restart rsyslog