로드 밸런싱
로드 밸런서 (LB, Load Balancer)
로드 밸런싱 기술을 제공하는 서비스 또는 장치
클라이언트와 네트워크 트래픽이 집중되는 서버들 사이에 위치하며 VIP (Virtual IP)와 함께 구성된다.
특정 서버에 부하가 집중되지 않도록 트래픽을 다양한 방법으로 분산하여 서버들의 성능을 최적인 상태로 유지할 수 있도록 한다.
- VIP란?
- VIP란 로드 밸런싱의 대상이 되는 여러 서버를 대표하는 가상의 IP이다.
- 클라이언트들은 서버의 IP로 직접 요청을 하는 것이 아니라 LB가 가지고 있는 VIP를 대상으로 요청한다.
- 그리고 LB는 설정된 부하 분산 방법에 따라 각 서버로 요청을 분산한다.
로드 밸런서는 서버들에 대한 주기적인 상태 확인을 통해 서버들의 장애 여부를 판단할 수 있다.
종류
L3 체크: ICMP를 이용해 서버의 IP 주소가 통신 가능한 상태인지 확인한다.
L4 체크: TCP의 3-way handshaking을 통해 각 서버의 포트 상태를 확인한다.
L7 체크: 애플리케이션 계층에서 체크하는 방법으로 실제 웹 페이지에 통신을 시도해 이상 유무를 파악한다.
터널링 (Tunneling)
인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념이다.
데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
로드 밸런서의 VIP 주소로 향하는 요구 패킷이 로드 밸런싱 서버로 전달되면 로드 밸런싱 서버에서 패킷의 목적지 주소와 포트를 검사하여 가상 서버 정책과 일치할 경우, 스케줄링에 따라 실제 작업 서버로 전달하게 된다.
이때 패킷을 일반적인 스트림 방식으로 전달하는 것이 아닌 캡슐 형식으로 감싸서 전달하게 된다.
이렇게 전달되면 작업 서버에서는 감싸진 패킷을 다시 풀고 요청을 처리한다.
NAT (Network Address Translation)
IP 주소를 변환해 주는 기능이다.
예를 들어, 내부 네트워크에서 사용하던 사설 IP 주소를 로드 밸런서 외부의 공인 IP 주소로 변경해 주며, 반대 과정도 가능하다.
이렇게 하면 부족한 공인 IP 주소를 효율적으로 사용할 수 있지만, 로드 밸런싱 관점에서는 여러 개의 호스트가 하나의 공인 IP 주소 (VIP)를 통해 접속하는 것이 주 목적이다.
SNAT (Source Network Address Translation)
내부에서 외부로 트래픽이 나가는 경우, 내부 사설 IP 주소를 외부 공인 IP 주소로 변환하는 방식이다.
집에서 사용하는 공유기가 대표적인 예시이다.
DNAT (Destination Network Address Translation)
흔히 집에서 사용하는 인터넷 공유기를 통해 외부에 있는 웹 서버로 접근하고자 하는 경우, 해당 요청 패킷은 반드시 해당 공
유기 (게이트웨이) 를 거치게 되어 있습니다. 이 때, 출발지의 사설망 IP 주소가 그대로 외부 인터넷에 나가게 될 경우 수신 측
(웹 서버) 는 알 수 없는 사설망의 IP 주소 이므로 최종적으로 패킷을 어디로 보내줘야 할 지 알 수 없게 됩니다.
(1) 패킷 헤더에 출발지와 목적지의 주소를 기록합니다. 이 때, 출발지는 자신의 사설망 IP 주소를 기록합니다.
(2) 기본 게이트웨이 (공유기 등) 에서는 외부로 나가는 패킷을 인식하게 되면, 출발지의 IP 주소를 게이트웨이 자신의 공인
IP 주소로 변경합니다. 이 때, 별도의 NAT 테이블을 보관합니다.
(3) 웹 서버에서 수신한 데이터를 처리한 후, 응답하여 보내는 패킷에 출발지와 목적지의 IP 주소를 아래와 같이 기록하여 보
냅니다. 특히 이 때 목적지의 IP 주소는 호스트의 기본 게이트웨이 공인 IP 주소가 됩니다.
(4) 호스트의 기본 게이트웨이에서 웹 서버가 보낸 패킷을 받으면, 기록해두었던 NAT 테이블을 참조하여 최종 목적지인 호
스트의 사설 IP 주소로 변경하여 해당 호스트로 패킷을 전달합니다.
단, 사설 네트워크에 한 대의 호스트가 아닌 여러 대의 호스트가 같은 목적지와 통신하고자 할 때, 되돌아오는 패킷의 최종
목적지가 어디가 되어야 하는지 모르는 혼선이 생길 수 있습니다. 이를 해결하기 위해서는 별도의 추가 포트를 설정하여 패
킷을 구분하는 PAT (또는 NAPT) 방식을 사용하게 됩니다. (아래 NAT 종류 구분에서 별도 상세 설명)
아울러, NAT 과정에서는 패킷에 변화가 생기기 때문에 IP 나 TCP/UDP 의 체크섬(Checksum) 도 다시 계산되어 재기록해야하며 이에 필연적으로 네트워크의 성능에 영향을 미치게 됩니다.
서버에서 클라이언트로 되돌아가는 경우, 목적지를 클라이언트로 설정한 다음 네트워크 장비나 로드 밸런서를 거치지 않고 바로 클라이언트로 찾아가는 방식이다.
이 경우, 로드 밸런서의 부하를 줄여줄 수 있는 장점이 있다.
로드 밸런서는 OSI 7 계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 나뉜다.
2 계층을 기준으로 부하를 분산한다면 L2, 3 계층을 기준으로 분산한다면 L3인 방식이다.
부하 분산에는 L4 로드 밸런서와 L7 로드 밸런서가 가장 많이 활용된다.
그 이유는 L4부터 포트 정보를 바탕으로 분산하는 것이 가능하기 때문이다.
L4 로드 밸런서는 L4 계층에서 동작하며, 네트워크 계층 (IP, IPX)이나 트랜스포트 계층 (TCP, UDP)의 정보를 바탕으로 부하를 분산한다.
즉, IP 주소나 포트 번호, MAC 주소, 전송 프로토콜 등에 따라 트래픽을 나누고 분산 처리하는 것이 가능하다.
이러한 이유로 L4 로드 밸런서를 CLB (Connection Load Balancer) 혹은 SLB (Session Load Balancer)라고 부르기도 한다.
로드 밸런싱 방법
라운드 로빈 (Round Robin)
요청이 들어오는 대로 서버마다 균등하게 요청을 분배한다.
단순히 순서에 따라 세션을 할당하므로 경우에 따라 경로 별로 같은 처리량이 보장되지 않는다.
가중치 및 비율 할당 방식 (Weighted Round Robin Scheduling)
라운드 로빈 방식으로 분배하지만, 서버의 가중치에 따라 요청을 더 분배하기도, 덜 분배하기도 한다.
서버 가중치는 사용자가 지정할 수 있고, 동적으로 조정되기도 한다. 특정 서버의 성능이 월등히 뛰어나다면 해당 서버에게 높은 가중치를 부여한다.
최소 연결 (Least Connection)
가장 적은 세션을 가진 서버로 트래픽을 보내는 방식이다.
가장 많이 사용되는 방식이라고 한다.
가장 빠른 응답 시간 (Fastest Response Time)
가장 빠른 응답 시간을 보내는 서버로 트래픽을 보내 주는 방식이다.
각 서버들의 가용 가능한 리소스와 성능, 그리고 처리 중인 데이터 등이 다를 경우 적합한 방식이다.
해시 기반 스케줄링 (Source hash Scheduling)
대역폭 (Bandwidth) 기반
L7 로드 밸런서는 L4 로드 밸런서의 기능을 포함하는 것 뿐만 아니라 애플리케이션 계층 (HTTP, SMTP, FTP)의 정보를 바탕으로도 분산 처리가 가능하다.
그림과 같이 URL에 따라 부하를 분산하거나, HTTP 헤더의 쿠키 값에 따라 부하를 분산하는 등 클라이언트의 요청을 보다 세분화해 서버에 전달할 수 있다.
L7 로드 밸런서의 경우 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있으며, Dos/DDoS와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용되고 있다.
L7 로드 밸런서에는 다음과 같은 로드 밸런싱 방법이 있다.
URL 스위칭 방식 (URL Switching)
컨텍스트 스위칭 방식 (Context Switching)
클라이언트가 요청한 특정 리소스에 따라 특정 서버로 연결할 수 있다.
예를 들어, 이미지 파일에 대해서는 확장자를 참조해 별도로 구성된 이미지 파일이 있는 서버 또는 스토리지 직접 연결해 줄 수 있다.
쿠키 지속성 (Persistence with Cookies)
클라이언트가 브라우저에서 www.google.com
이라고 입력하면 PC에 설정된 DNS 서버로 DNS 쿼리를 보내고,
로컬 DNS 서버는 www.google.com
을 관리하는 DNS 서버로부터 L4의 VIP 주소를 획득한다.
로컬 DNS는 획득한 VIP 주소를 클라이언트에게 전송한다.
클라이언트는 획득한 DNS를 기반으로 L4 VIP로 http(s) 요청을 한다.
LB는 최적의 서비스 서버를 내부 알고리즘을 통하여 선별한 후 요청을 전송하고, 서버 작업 결과를 LB에게 전송한다.
전달 받은 결과를 LB를 통해 클라이언트에게 전송한다.
종류
Bridge / Transparent Mode
Router Mode
One Arm Mode
DSR (Direct Server Return) Mode
요청
사용자가 L4의 VIP로 요청을 전송한다.
L4에서 Real Server로 전송 시, Destination IP를 VIP에서 Real Server IP로 NAT 수행한다.
동일한 네트워크 대역이므로 Destination MAC 주소만 변경된다.
응답
Real Server에서 서비스 응답 시, Destination IP가 다른 대역의 IP이므로 Gateway (Router)로 전송한다.
Real Server에서 L4를 거치면서 Source IP를 VIP로 NAT 수행한다.
동일한 네트워크 대역이므로 MAC 주소는 변경되지 않는다.
L4를 중심으로 상/하단의 IP 대역이 서로 다르게 구성되며, L4는 Server 대역 네트워크의 Gateway 역할을 한다.
요청
사용자가 L4의 VIP로 요청을 전송한다.
L4에서 Real Server로 전송 시, Destination IP를 VIP에서 Real Server IP로 NAT 수행한다.
네트워크 대역이 변경되었으므로, Source와 Destination MAC 주소 모두 변경된다.
응답
Real Server에서 서비스 응답 시, Destination IP가 다른 대역의 IP이므로 Gateway (L4)로 전송한다.
L4에서 Source IP를 VIP로 NAT 수행한다.
One Arm Mode는 클라이언트의 IP가 Server에 전달되지 않기 때문에 Server가 실제 클라이언트의 IP를 이용해야 할 경우 부적합한 기법이다. 일반적으로 권고되지 않는 구성 방법이다.
요청
사용자가 L4의 VIP로 요청을 전송한다.
L4에서 Real Server로 전송 시, Destination IP를 VIP에서 Real Server IP로 NAT 수행한다.
Destination으로 전송하기 위해서 Destination MAC 주소도 변경된다.
Real Server에서 L4로의 전송을 위해서 Source IP도 L4의 IP Pool의 IP로 NAT 수행한다.
방금 위에서 소개한 기법들은 모두 Inbound, Outbound 패킷이 LB를 거치기 때문에 LB에 많은 부하가 발생한다.
DSR은 Outbound 패킷이 LB를 거치지 않고, 클라이언트에 바로 전달하게 만들어 LB의 부하를 줄일 수 있다.
초당 연결 수 (Connections per second)
동시 연결 수 (Concurrent connections)
처리 용량 (Throughput)
UDP 프로토콜에 대한 로드 밸런싱 성능 지표
FWLB (Firewall Load Balancing)에서 중요
단위는 bps (bit per second) 또는 pps (packet per second) 사용
로드 밸런서에 장애가 발생했을 시의 시나리오는 다음과 같다.
이중화된 로드 밸런서들은 서로 상태 확인을 한다.
Master 서버가 Fail되면 Standby 서버가 자동으로 Master 서버의 역할을 한다.
Standby 서버는 평상 시에는 대기 상태로 있다가 Master 서버가 Fail 되었을 경우에만 작동한다.