[ 구성 ]
HAProxy 서버 ( Public VIP ) * 1EA
( CentOS 7 EPEL yum install HAProxy 1.5.18 )
하단에 공인망 스위치와 사설스위치 각각 1대씩.
사설단에 연결된 192.168.0.15 / 16 이 WEB1 , WEB2
[ Configure 기본 ]
# cat /etc/haproxy/haproxy.cfg
#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global # 프로세스 전체에 영향을 주는 내용
# to have these messages end up in /var/log/haproxy.log you will
# need to:
#
# 1) configure syslog to accept network log events. This is done
# by adding the '-r' option to the SYSLOGD_OPTIONS in
# /etc/sysconfig/syslog
#
# 2) configure local2 events to go to the /var/log/haproxy.log
# file. A line like the following can be added to
# /etc/sysconfig/syslog
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2 # Syslog. UDP 514 Open 필요.
chroot /var/lib/haproxy #서비스 Jail 경로. 수퍼유저로 프로세스 실행시, 모든 동작은 이 안에서만 수행됌. 보안 상승.
pidfile /var/run/haproxy.pid # 실행 피드명
maxconn 4000 # 프로세스 당 최대 연결 수치
user haproxy # Manage ID
group haproxy # Manage Group
daemon # BackGround Mode Process
# 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 #front , back , listen 에 관련된 전역 섹션
mode http # http 프로토콜을 사용하는 로드밸런싱 모드
log global # 로그는 global 의 설정에 따른다.
option httplog # 기본 Log 는 SIP,DIP와 Name 만 표기하므로, 이 옵션을 사용하여 디테일을 높임.
option dontlognull # 로그 비대화 방지를 위해, Probe(정찰,스캔)같은 잡다한 기록을 HAProxy Log 화하지 않는 옵션.
option http-server-close # 클라이언트와 리얼서버 연결 종료시, 디폴트로 유휴대기하지 않고, 서버에서 Handshake 를 종료하여, 더 빠른 새로운 세션을 준비할 수 있도록 함. 디폴트 옵션에 선언되어 있어도, 인스턴스 별로 no옵션으로 제외처리 가능함.
option forwardfor except 127.0.0.0/8 # 서버에 대한 응답을 HAProxy 가 받기 때문에(VIP), 리얼서버 IP를 HTTP헤더에 표기하기 위한 옵션.
option redispatch # mode HTTP에서 Cookie에 지정된 Real 서버가 다운되면, 외부 클라이언트가 쿠키를 플러시하기 전에는 서비스에 문제를 일으킬 수 있으므로, 이 옵션을 줘서, 프록시의 지속성을 무시하고 쿠키, 세션 재분배를 실행하게 된다. retries 값이 0보다 커야 한다.
retries 3
timeout http-request 10s # Request 시의 헤더에만 적용. DoS 방어를 위해, HTTP 요청 타임아웃시간 설정. ( 클라이언트의 연결 타임아웃과는 무관한, 서버(HAProxy) 의 옵션이다 )
timeout queue 1m # 서버의 maxconn 에 도달시, 무한정 보류상태로 두지 않고 HTTP 503 응답을 보내면서 연결을 버리기까지의 시간.
timeout connect 10s # TCP 패킷손실을 막기 위한 Real 서버로의 연결 최대 지연시간 설정. ( Backend 에 적용되나, 전역 설정 가능 )
timeout client 1m # 외부 클라이언트의 요청이나 데이터와의 연결 최대 시간. request 와 같이 사용하여, 서버 안정성을 구현.
timeout server 1m # 서버가 데이터를 승인하거나, 전송해야 할 때의 연결 최대 시간.
timeout http-keep-alive 10s # 클라이언트의 요청에 따른 응답 전송 후, 다음 요청까지의 대기 시간. http-request 가 선행함.
timeout check 10s # timeout server 와 동일하거나 작은 값을 가져야 한다.
maxconn 3000 # 프로세스당 최대 연결 개수
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:80 # 클라이언트의 연결을 받는 부분 처리. WAF 기능에 가깝다.
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 # acl 에서 정의한 style 들을 backend static으로 보낸다.
default_backend web # 위의 조건 이외는 backend web 으로 보낸다.
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static # 프론트엔드에서 acl 연결하는 실제 리얼서버 설정.
balance roundrobin
server static 192.168.0.15:80 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend web # 실제 접속시 로드밸런싱하는 서버
balance roundrobin # 순차적으로 로드밸런싱
server web1 192.168.0.15:80 check
server web2 192.168.0.16:80 check
#내부 사설서버들 반드시 방화벽 해제하던지, 포트 허용해둘 것.
#listen # 프론트/백엔드의 연결의 포트/옵션등을 정의함. TCP 제어나 Proxy 에 주로 사용.
listen stats # "stats"라는 이름으로 listen 지정
bind *:9000 # 접속 포트 지정
stats enable
stats realm Haproxy Statistics # 브라우저 타이틀
stats uri /haproxy_stats # stat 를 제공할 URI
#stats auth Username:Password # 인증이 필요하면 추가한다
HAProxy Configure 메뉴얼 보시면 아시겠지만, 정말 Flow 이해에 좋습니다.
너무나도 다양한 옵션이 있으나, 우선 이 정도로도 "동작" 은 합니다.
참고 해주시면 되겠습니다.
'Linux ( Cent OS )' 카테고리의 다른 글
0. HAProxy 1.8 Configure Manual ( 번역 중 .. ) (0) | 2019.06.19 |
---|---|
Docker 기본 커맨드 #01 - 컨테이너 생성 및 삭제 (0) | 2019.06.11 |