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