HA Proxy

별빛사막·2025년 3월 19일
0

HAPROXY

목록 보기
1/1
post-thumbnail

✅ HAProxy의 역할과 동작 방식

HAProxy는 로드 밸런서(reverse proxy)로서, 새 버전을 배포하는 동안에도 기존 서비스가 중단되지 않도록 트래픽을 관리한다.

1. 트래픽을 현재 사용 가능한(healthy) 서버로 보낸다.

  • 예를 들어, v1이 실행 중일 때 v2를 배포하는 경우, HAProxy는 v2가 준비될 때까지 계속 v1으로 트래픽을 보낸다.

2. Health Check(상태 검사)를 수행하여 정상적인 서버만 사용한다.

  • 새 버전(v2)이 정상적으로 실행되는지 지속적으로 확인한다.
  • 만약 v2가 아직 준비되지 않았다면, 기존 버전(v1)으로 계속 트래픽을 보낸다.

3. 새 버전(v2)이 완전히 배포되면 트래픽을 전환한다.

  • v2가 준비되면, 기존 요청을 끊지 않고 점진적으로 v1 → v2로 트래픽을 전환한다.
  • v1이 더 이상 사용되지 않으면 제거할 수 있다.

실습1

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
  • frontendbackend는 HAProxy의 예약어(설정 블록 키워드)
  • http_front와 http_back은 사용자가 설정한 변수명임

실습2

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
  • localhost:8090으로 요청할 때, 8080(nginx_1)과 8081(nginx_2)이 번갈아가면서 응답


실습3

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으로 들어오면, host_app1에 넣는다.


실습4

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
  • server app_server_1_1 nginx_1_1:8081 check에서 app_server_1_1은 변수(X), 그냥 식별자(O)
  • server app_server_1_1을 server site_server_1_1처럼 바꿔도 된다!
    ✔ 그 이유는 app_server_1_1은 변수(X), 단순한 HAProxy 내부 식별자(O)이기 때문이다.

profile
조금씩 매일 성장하자

0개의 댓글