하드웨어 기반인 LA/L7 스위치를 대체하기 위한 프록시 솔루션
TCP 및 http 기반으로 제공을 하며 SSL 지원, 로드밸런싱, 액티브 헬스체크, keep alived 등의 기능을 한다
L4 (전송계층) 스위치를 대체하는 경우 IP를 통한 트래픽 전달을 수행한다.
요청에 대한 처리는 라운드로빈 (round-robin) 방식을 기본으로 한다
L7 (응용계층) 스위치를 대체하는 경우 URI를 통한 트래픽 전달이 가능하다
$ docker network create haproxy-network
chadchae1009/haproxy:echo 설치
$ docker run -d --name=web1 --net=haproxy-network -h web1 chadchae1009/haproxy:echo
$ docker run -d --name=web2 --net=haproxy-network -h web2 chadchae1009/haproxy:echo
$ docker run -d --name=web3 --net=haproxy-network -h web3 chadchae1009/haproxy:echo
config 파일 생성
$ vi haproxy.cfg
global
stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners
log stdout format raw local0 info
defaults
mode http
timeout client 10s
timeout connect 5s
timeout server 10s
timeout http-request 10s
log global
frontend stats
bind *:8404
stats enable
stats uri /
stats refresh 10s
frontend myfrontend
bind :80
default_backend webservers
backend webservers
server s1 서버명:포트 check
server s2 서버명:포트 check
server s3 서버명:포트 check
-> 우리는 서버명 web1, 포트번호 8080으로 진행하였다.
$ docker run -d --name=haproxy-con --net=haproxy-network -p 80:80 -p 8404:8404 -v $(pwd):/usr/local/etc/haproxy:ro haproxytech/haproxy-alpine:2.5
haproxy 컨테이너 삭제
$ docker stop haproxy-con
$ docker rm haproxy-con
haproxy.cfg 파일 작성
global
stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners
log stdout format raw local0 info
defaults
mode http
timeout client 10s
timeout connect 5s
timeout server 10s
timeout http-request 10s
log global
frontend stats
bind *:8404
stats enable
stats uri /
stats refresh 10s
frontend myfrontend
bind :80
default_backend webservers
acl 서버명1 path_beg /서버명1
acl 서버명2 path_beg /서버명2
acl 서버명3 path_beg /서버명3
use_backend 서버명1_backend if 서버명1
use_backend 서버명2_backend if 서버명2
use_backend 서버명3_backend if 서버명3
backend webservers
balance roundrobin
server s1 서버명1:포트 check
server s2 서버명2:포트 check
server s3 서버명3:포트 check
backend 서버명1_backend
server s1 서버명1:포트 check
backend 서버명2_backend
server s2 서버명2:포트 check
backend 서버명3_backend
server s3 서버명3:포트 check
$ docker run -d --name=haproxy-con --net=haproxy-network -p 80:80 -p 8404:8404 -v $(pwd):/usr/local/etc/haproxy:ro haproxytech/haproxy-alpine:2.5
기존의 컨테이너와 웹서버 삭제 후 생성
haproxy.cfg 파일 작성
global
stats socker /var/run/api.sock user \
haproxy group haproxy mode 660 level admin expose-fd listeners
defaults
mode http
timeout client 10s
timeout connect 5s
timeout server 10s
timeouthttp-request 10s
log global
frontend stats
bind *:8404
stats enable
stats uri /
stats refresh 10s
frontend myfrontend
bind :80
default_backend webservers
acl 서버명1 path_beg /uri1
acl 서버명2 path_beg /uri1
acl 서버명3 path_beg /uri2
acl 서버명4 path_beg /uri2
use_backend 그룹명1_backend if 서버명1
use_backend 그룹명1_backend if 서버명2
use_backend 그룹명2_backend if 서버명3
use_backend 그룹명2_backend if 서버명4
backend webservers
balance roundrobin
server s1 서버명1:포트 check
server s2 서버명2:포트 check
server s3 서버명3:포트 check
server s4 서버명4:포트 check
backend 그룹명1_backend
server s1 서버명1:포트 check
server s2 서버명2:포트 check
backend 그룹명2_backend
server s3 서버명3:포트 check
server s4 서버명4:포트 check