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 밸런싱 (프론트-백엔드) 설정

- 포트 및 역할
프론트엔드 명 | 포트 | 백엔드 | 역할 |
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