HAProxy 란
- 하드웨어 로드밸런서를 대체하는
Reverse Proxy
기반의 소프트웨어 로드 밸런서
- 네트워크 스위치에서 제공하는 L4, L7 기능과 로드 밸런서 기능 제공
- 이중화(HA-High Availability) 구성에 주로 사용
로드 밸런싱이란
- 간략하게, 부하 분산을 위해 가상 IP를 통해 여러 대의 서버에 접속을 분배하는 기능
사용하는 이유
- 요청의 수가 늘어나며 서버에는 부하가 걸리고 이를 해결하기 위한 방법은 2가지 존재
- Scale-up : 서버의 사양 높임
- Scale-out : 부하를 여러 대의 서버에 분산
로드 밸런싱의 주요 기능
- NAT(Network Address Translation) : 사설 IP 주소를 공인 IP 주소로 바꾸는데 사용
- DSR(Dynamic Source Routing protocol)
- 로드 밸런서 사용 시, 서버에서 클라이언트로 되돌아 가는 경우에
목적지 주소를 스위치의 IP 주소가 아니라
클라이언트의 IP 주소로 전달해서 네트워크 스위치 거치지 않고 클라이언트로 감
- Tunelling
- 인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 함
- 데이터를 캡슐화 하여 연결된 상호 간에 캡슐화된 패킷을 구별해 캡슐화 해제
동작 방식
- 기본적으로 reverse proxy 형태로 동작
- reverse proxy : 서버로 들어오는 요청을 대신 받아서 서버에 전달하고 요청한 곳에 그 결과를 다시 전달해주는 역할
- 동작 흐름

- 클라이언트가 서버에 최초 접근 시, 서버에 요청 전달
- 해당 요청에 대한 응답을 할 때 쿠키에 서버 정보를 추가하여 반환
- 다시 요청 시 Proxy 에서 쿠키 정보 확인하여, 최초 요청 서버로 전달
- 서버가 클라이언트에 응답 시 쿠키 없이 추가 전달
클라이언트에 쿠키 정보가 계속 존재하므로 재사용
- HAProxy HA
- HA로 설정된 HAProxy의 동작 흐름이 단일 HAProxy와 다른점은
최초 접근 시 쿠키에 바로 서버 정보를 입력하지 않고,
서버에서 Jsessionid가 전달될 때 서버 정보를 합쳐서 전달

- 쿠키에 정보가 없고
X-Forwarded-For
에 정보 추가
- 쿠키에 추가 없음
- Jsessionid 추가
- 서버 정보와 Jesessionid를 쿠키에 추가
- 쿠키에서 서버를 판별 후에 Jsessionid만 전달
참고