Haproxy
Note :
HAProxy
는TCP
,HTTP
기반의high availability
,load balancing
오픈소스 어플리케이션이다. 예를 들어 여러대의 웹서버들에 대해 부하분산이 필요하다면 웹서버들 앞단에HAProxy
를 설치해 부하를 분산시키거나failover
할 수 있다.
더 자세한 정보는 http://www.haproxy.org/에서 확인 할 수 있다.
다운로드
Note : 현재 stable 최신 version인
1.6.1
버전을 다운 받는다.
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.1.tar.gz
필요한 패키지 설치
Note : 본 문서에서는
HAProxy
를 소스컴파일 방법으로 설치 하는 방법을 설명하고 있기 때문에 컴파일에 필요한 컴파일러와 기타 라이브러리들을 설치한다.
yum -y install make gcc gcc-c++ pcre-devel openssl-devel
압축 해제
tar -xvzf haproxy-1.6.1.tar.gz
cd haproxy-1.6.1
컴파일
make TARGET=linux26 USE_OPENSSL=1 ADDLIB=-lz CPU=native USE_PCRE=1 USE_LIBCRYPT=1 USE_LINUX_SPLICE=1 USE_LINUX_TPROXY=1
컴파일 후 openssl 라이브러리 연결 확인
ldd haproxy | grep ssl
결과
libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007fb32e528000)
바이너리 인스톨
make PREFIX=/usr/local/haproxy install
install -d "/usr/local/haproxy/sbin"
install haproxy "/usr/local/haproxy/sbin"
install haproxy-systemd-wrapper "/usr/local/haproxy/sbin"
install -d "/usr/local/haproxy/share/man"/man1
install -m 644 doc/haproxy.1 "/usr/local/haproxy/share/man"/man1
install -d "/usr/local/haproxy/doc/haproxy"
for x in architecture close-options configuration cookie-options intro linux-syn-cookies management network-namespaces proxy-protocol; do \
install -m 644 doc/$x.txt "/usr/local/haproxy/doc/haproxy" ; \
done
haproxy에서 사용 할 인증서 만들기
Note: 보통
SSL
인증서의 형태는 key파일과 인증서 파일이 별개로 되어있지만HAProxy
에 적용을 하기 위해서는 key와 인증서가 합쳐진pem
형태의 파일로 만들어야 한다. key 파일과 인증서 파일의 확장자는 경우에 따라 다를 수 있으니 자신의 환경에 맞게 두 파일을 병합하다.
cat cert.key cert.crt > cert.pem
설정파일 예제
cat /etc/haproxy.cfg
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 50000 # 최대 동시접속 설정, 1G 메모리에 40000 ~ 50000만
user haproxy # 실행 유저
group haproxy # 실행 그룹
tune.bufsize 65536
tune.ssl.default-dh-param 2048
nbproc 1 # 실행시킬 프로세스 개수
daemon # daemon 모드로 실행(권장)
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
defaults
mode http # instance 운영 모드 ( http, tcp, health 가 있음)
retries 3 # 서버 접속 실패시 재시도 횟수
log global # logging 설정, global 설정 따름
maxconn 50000
option dontlognull # null connections 에 대한 로깅 안함.
option httpclose # keepalive 비활성화.
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
timeout connect 15s
timeout client 15s
timeout server 15s
frontend www.domain.com
bind 192.168.0.10:80
log global
option httplog
option accept-invalid-http-request
default_backend backend_www.domain.com
frontend https_www.domain.com
bind 192.168.0.10:443 ssl crt /usr/local/haproxy/SSL/cert.pem
mode http
option httpclose
option forwardfor
option accept-invalid-http-request
reqadd X-Forwarded-Proto:\ https
default_backend backend_www.domain.com
backend backend_www.domain.com
balance source
server ww01.domain.com 192.168.0.11:80 check inter 10000 rise 3 fall 3
server ww02.domain.com 192.168.0.12:80 check inter 10000 rise 3 fall 3
option httpchk HEAD /check.html HTTP/1.1\r\nHost:\ www.domain.com
listen stats 0.0.0.0:8000
mode http
stats enable
stats uri /haproxy
stats realm HAProxy
stats auth id:password