로드밸런서
서버나 장비의 부하를 분산하기 위해 사용하는 장비
- 트래픽을 분배해주는 기능
- 4계층 이상에서 동작하며 IP 주소나, 4계층 정보, 애플리케이션 정보를 확인, 수정 하는 기능이 있다.
- 로드밸런서가 서비스에 사용되는 대표 IP 주소를 서비스 IP로 갖고 그 밑에 시스템이 늘어나면 로드 밸런서가 각 시스템의 실제 IP로 변경해 요청을 보낸다.
로드 밸런서에서 부하 분산을 위한 그룹을 만들 때는 IP 주소뿐만 아니라 서비스 포트까지 지정해 만든다. → L4 스위치
7계층 정보까지 확인해 처리하는 기능 → L7 스위치
- 서로 다른 VIP ( Virtual IP)로도 구성할 수 있음
- 또한, 로드 밸런서의 VIP에 설정된 서비스 포트와 실제 서버의 서비스 포트는 반드시 같을 필요가 없다.
구성 방식
- 원암(One-Arm)구성
- 인라인(Inline) 구성
One-Arm
- 로드 밸런서가 스위치 옆에 있는 형태
- 서버로 들어가거나 나오는 트래픽이 로드 밸런서를 경유하거나 경유하지 않을 수 있다.
- 로드 밸런서를 경유하는지 여부는 부하 분산을 이용한 트래픽인지 여부로 구분할 수 있다.
- 부하 분산을 이용하는 트래픽 : 서비스 IP 정보를 로드 밸런서가 가지고 있다.
- 서비스 IP에 대해 실제로
Destination NAT
뿐만 아니라 서비스를 호출한 사용자 IP가 아니라 로드 밸런서가 가진 IP로 Source NAT
도 함께 이루어져야 한다.
- Source NAT를 사용하지 않으려면 DSR(Direct Server Return)을 사용하면 된다.
- 장점 : 부하 분산을 이용하는 트래픽만 처리할 수 있어
로드밸런서의 부하
를 줄일 수 있다.
- 단점 : 로드 밸런서와
스위치 간에 연결된 인터페이스
에서 인바운드 트래픽과 아웃 바운드 트래픽을 모두 수용해야 한다.
Inline
- 로드 밸런서가 스위치에서 서버까지 가는 일직선상 경로에 있는 형태
- 트래픽이 흐르는 경로에 있어 모든 트래픽이 로드 밸런서를 통과한다.
- 구성이 직관적이고 이해하기 쉽다.
- 처리 용량이 커지면서 가격도 많이 상승한다.
동작 모드
- 트랜스패런트(Transparent ) or 브릿지 (Bridge)
- 라우티드(Routed)
- DSR(Direct Server Return)
헬스 체크
- VIP에 연결된 리얼 서버의 헬스를 체크하여 요청을 보낼지 말지 결정해야 한다.
ICMP ( PING )
- 단순히 서버가 살아 있는지 여부만 체크하는 방법으로 잘 사용하지 않는다.
TCP 서비스 포트
- 로드 밸런서에 설정된 서버의 서비스 포트를 확인
- 서비스 포트 2000번이 등록되어 있다고 가정
- 리얼 IP의 2000번 포트로 SYN을 보내고, SYN, ACK을 받으면, ACK로 응답하고 FIN을 보냄
TCP : Half Open
- 헬스 체크로 인한 부하를 줄이거나 정상적인 종료 방식보다 빨리 헬스 체크 세션을 끊기 위해 TCP Half Open 방식을 사용하기도 한다.
- SYN을 보냄 → SYN, ACK 수신 → RST를 보내 세션을 종료
HTTP 상태코드
- 웹 서비스를 할 때, 서비스 포트까지는 TCP로 정상적으로 열리지만 웹 서비스에 대한 응답을 정상적으로 해주지 못하는 경우가 있다.
- HTTP 요청을 통해 정상적인 상태 코드를 응답하는지 여부를 판단한다.
L4 VS L7
L4 로드 밸런싱
- 일반적인 로드 밸런서가 동작하는 방식
TCP UDP 정보 ( 특히 포트 번호 )
를 기반으로 로드 밸런싱을 수행
- 최근 로드 밸런서는 L4, L7의 기능을 모두 지원한다.
- L7 지원 여부와 상관없이 4계층에 대한 정보로만 분산 처리하는 경우를 L4 로드 밸런싱이라한다.
L7 로드 밸런싱
- HTTP, FTP, SMTP와 같은
애플리케이션 프로토콜 정보
를 기반으로 로드 밸런싱을 수행
- HTTP 헤더 정보나 URI와 같은 정보를 기반으로 프로토콜을 이해한 후 부하를 분산
- 이런 장비를 ADC ( Application Delivery Controller )라고 부르며
Proxy
역할을 수행
- 스쿼드(Squid)나 Nginx에서 수행하는 Reverse Proxy 와 유사한 기능을 갖고 있다.
로드밸런서 알고리즘
Least Connection
- 세션 부하를 확인해 그것에 맞게 부하를 분산하는 방식
- 로드 밸런서에서는 서비스 요청을 각 장비로 보낼때 마다 세션 테이블이 생성되므로 각 장비에 연결된 현재 세션 수를 알 수 있다.
Hash
- 서버의 부하를 고려하지 않고 클라이언트가 같은 서버에 지속적으로 접속하도록 하기 위해 사용하는 방식
- 알고리즘 계산에 사용되는 값을 지정할 수 있다.
주로 ( 출발 IP, 목적 IP, 출발 포트, 목적 포트)를 사용
- 장점 :
- 처음 요청과 다음 요청의 분산된 서버가 같아 서버에서 세션을 유지하기 편리하다.