HAProxy

HAProxy 구성

Dev.Congsik 2025. 4. 7. 12:13
728x90

 

HAProxy?

  • 고가용성 및 로드 밸런싱을 위한 오픈 소스 소프트웨어 로드 밸런서 및 프록시 서버
  • 주요 목적은 웹 서버, 애플리케이션 서버 등과 같은 백엔드 서버로의 트래픽을 분산시키는 것
  • 이를 통해 네트워크 트래픽을 관리하고 백엔드 서버의 가용성을 향상

 

HAProxy의 사용 목적

  • 로드 밸런싱 → 단일 서버에 가해지는 부하를 분산시켜 전체 서비스의 성능과 가용성을 향상
    • 여러 대의 서버 사이에서 트래픽을 균형있게 분배하여 각 서버에 대한 부하를 조절
  • 고가용성 → 단일 지점 장애(SPOF, Single Point of Failure)를 방지하고 서비스의 신뢰성 증대
    • 장애가 발생한 서버를 감지하고 해당 서버로의 트래픽을 다른 서버로 전달하여 시스템 전체의 가용성을 유지
  • SSL 종단점→ 보안 통신을 지원하고 데이터의 안전성을 유지
    • SSL/TLS 종단점으로 동작하여 암호화된 트래픽을 백엔드 서버로 전달하거나 암호화된 트래픽을 클라이언트에게 반환
  • 웹 애플리케이션 방화벽
    • 웹 애플리케이션 방화벽(WAF) 기능을 제공하여 악의적인 트래픽을 감지하고 차단, 이를 통해 웹 애플리케이션의 보안을 강화

 

HAProxy flow

1. 최초 접근 시 서버에 요청 전달

2. 응답 시 쿠키에 서버 정보 추가 후 반환

3. 재요청 시 proxy에서 쿠키 정보 확인 -> 최초 요청 서버로 전달

4. 다시 접근 시 쿠키 없이 추가 전달 -> 클라이언트에 쿠키 정보가 계속 존재 (쿠키 재사용)

 

Load Balancing?

  • 부하 분산을 위해 가상 IP를 통해 여러 대의 서버에 접속을 분배하는 기능
  • 클라이언트의 수가 많아질수록 서버에 부하가 걸릴 가능성이 높아진다.
  • 이를 해결하기 위해서는 서버의 사양을 높이거나(scale-up), 부하를 여러 대의 서버로 분산(scale-out)해야 한다.
  • Load Balancing의 주요 기능
    • NAT : 사설 IP주소를 공인 IP 주소로 바꾸는데 사용
    • DSR : 로드 밸런서 사용 시 서버에서 클라이언트로 돌아가는 경우 목적지 주소를 스위치 IP의 주소가 아닌 클라이언트 주소 IP
    • Tunelling : 인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신 가능하게 함

 

Load Balancing 알고리즘

  • Round Robin(RR) : 클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 가중치에 따라 순차적으로 할당받는 방식
  • static-rr : 서버에 부여된 가중치에 따라서 할당
  • leastconn : 접속 수가 가장 적은 서버로 할당
  • source : 서버의 가중치를 나누어 접속  IP 해싱 후 할당
  • uri : 접속 uri를 해싱하여 가중치를 나눈 후 할당
  • uri_pattern : http get 요청에서 특정 패턴 여부 확인하여 조건에 맞는 서버로 할당 (조건 없을 시 RR 방식으로 할당)
  • hdr : http 헤더에서 hdr(<name>)로 지정된 조건이 있는 경우에 대해서만 할당 (조건 없을 시 RR 방식으로 할당)
  • rdp-cookie : tcp 요청에 대한 rdp 쿠키에 따른 할당 

 

HAProxy Install

  • yum install
yum install haproxy

 

  • HAProxy conf
    • roundrobin 밸런싱 (프론트-백엔드) 설정

port fowarding을 위한 cfg 설정 (frontend에 명시된 서버로 트래픽이 들어오면, backend에 명시된 서버로 부하를 분산)

  • 포트 및 역할
프론트엔드 명 포트 백엔드 역할
dbfront 3307 be-dbfront / be-dbbackup 기본 DB 프록시
dbrw 3308 be-dbrw / be-dbbackup 읽기/쓰기 (마스터)
dbro 3309 be-dbro 읽기 전용

 

dbfront 설정 분석 (포트 3307)

  • frontend dbfront에서 요청을 be-dbfront 백엔드로 보냄.
  • be-dbfront 백엔드:
    • 기본적으로 (xx.xxx.xx.133:3306) 서버 사용.
    • (xx.xxx.xx.132:3306) 서버는 백업 서버로 설정됨 (backup 옵션).
    • mysql-check user haproxy → MySQL 서버가 살아있는지 haproxy 사용자로 체크.

 

dbrw 설정 분석 (포트 3308)

  • frontend dbrw에서 요청을 be-dbrw 백엔드로 보냄.
  • be-dbrw 백엔드:
    • (xx.xxx.xx.131:3306) 가 기본 마스터 서버.
    • (xx.xxx.xx.132:3306) 가 백업 서버 (backup 옵션).
    • MySQL Health Check 활성화.

 

dbro 설정 분석 (포트 3309)

  • 읽기 전용(Read-Only) 쿼리를 처리하는 역할.
  • 백엔드 be-dbro에 연결

 

백업 노드 전환 (Failover)

  • acl use_backup nbsrv(be-dbfront) lt 1
  • use_backend be-dbbackup if use_backup
  • 만약 be-dbfront 또는 be-dbrw의 모든 노드가 다운되면 be-dbbackup으로 전환.

 

HAProxy 서비스 기동

  • systemctl start haproxy
  • systemctl status haproxy
  • systemctl enable haproxy  
728x90