HAProxy는 로드 밸런서(reverse proxy)로서, 새 버전을 배포하는 동안에도 기존 서비스가 중단되지 않도록 트래픽을 관리한다.
v1이 실행 중일 때 v2를 배포하는 경우, HAProxy는 v2가 준비될 때까지 계속 v1으로 트래픽을 보낸다.v2)이 정상적으로 실행되는지 지속적으로 확인한다.v2가 아직 준비되지 않았다면, 기존 버전(v1)으로 계속 트래픽을 보낸다.v2)이 완전히 배포되면 트래픽을 전환한다.v2가 준비되면, 기존 요청을 끊지 않고 점진적으로 v1 → v2로 트래픽을 전환한다.v1이 더 이상 사용되지 않으면 제거할 수 있다.localhost:8080 → ha_prox_1(:8090) → nginx_1
: 즉, 8090으로 요청이 들어오면 ha proxy가 8080인 nginx 페이지로 전환한다.

#ha_proxy 설정파일 생성
echo -e "
frontend http_front
bind *:80
default_backend http_back #80포트 들어온 모든 요청을 http_back으로 보낸다
backend http_back
server app_server 172.17.0.1:8080
" > volumes/usr/local/etc/haproxy/haproxy.cfg
frontend와 backend는 HAProxy의 예약어(설정 블록 키워드)8080(nginx_1)과 8081(nginx_2)로 라운드로빈
echo -e "
frontend http_front
bind *:80
default_backend http_back
backend http_back
balance roundrobin #라운드로빈
server app_server_1 172.17.0.1:8080 check
server app_server_2 172.17.0.1:8081 check
" > ${PWD}/dockerProjects/ha_proxy_1/volumes/usr/local/etc/haproxy/haproxy.cfg

app1-127-0-0-1.nip.io => ha proxy => nginx_1:80
- 출력 : Web Server 1
app2-127-0-0-1.nip.io => ha proxy => nginx_2:80
- 출력 : Web Server 2
frontend http_front
bind *:80
acl host_app1 hdr(host) -i app1-127-0-0-1.nip.io
acl host_app2 hdr(host) -i app2-127-0-0-1.nip.io
use_backend http_back_1 if host_app1
use_backend http_back_2 if host_app2
backend http_back_1
server app_server_1 nginx_1:80 check
backend http_back_2
server app_server_2 nginx_2:80 check
" > ${PWD}/dockerProjects/ha_proxy_1/volumes/usr/local/etc/haproxy/haproxy.cfg

app1-127-0-0-1.nip.io > ha proxy => nginx_1_1:80 > Web Server 1-1 출력
app1-127-0-0-1.nip.io > ha proxy => nginx_1_2:80 > Web Server 1-2 출력
app2-127-0-0-1.nip.io > ha proxy => nginx_2_1:80 > Web Server 2-1 출력
app2-127-0-0-1.nip.io > ha proxy => nginx_2_2:80 > Web Server 2-2 출력
## 설정파일 생성
echo -e "
frontend http_front
bind *:80
acl host_app1 hdr(host) -i app1-127-0-0-1.nip.io
acl host_app2 hdr(host) -i app2-127-0-0-1.nip.io
use_backend http_back_1 if host_app1
use_backend http_back_2 if host_app2
backend http_back_1
balance roundrobin
server app_server_1_1 nginx_1_1:80 check
server app_server_1_2 nginx_1_2:80 check
backend http_back_2
balance roundrobin
server app_server_2_1 nginx_2_1:80 check
server app_server_2_2 nginx_2_2:80 check
" > ${PWD}/dockerProjects/ha_proxy_1/volumes/usr/local/etc/haproxy/haproxy.cfg
