PC, 스마트폰, 태블릿 등 어디서든 인터넷으로 원하는 사이트에 접속할 수 있는 현대 사회는 순식간에 많은 사람들이 웹 사이트에 접속하게 된다.
특히, 블랙프라이데이나 특정 이벤트가 있는 날(ex. 콘서트 예매, 치킨 할인 쿠폰 받기 등)은 해당 웹 사이트의 트래픽은 평소보다 더 많이 치솟는다.
만약, 위와 같은 상황에서 서비스를 제공하는 측의 서버가 1대라면..?
서버는 트래픽을 견디지 못하고 죽어버리게 된다.. OMG...
수만명의 접속자를 감당하기 위해서 서비스를 제공하는 측에서는 미리 트래픽을 예측하고 서버와 네트워크를 증설하거나 기존 서버의 성능을 확장하려고 할 것이다.
상황을 해결할 수 있는 방법은 2가지가 있다.
첫번째 방법은 스케일업(Scale-up) - 기존의 서버 성능을 확장하는 방식
두번째 방법은 스케일아웃(Scale-out) - 기존의 서버와 동일하거나 낮은 성능의 서버를 증설하는 방식
한 서버의 성능을 높이는 스케일업(Scale-up) 작업은 그 한계가 있으므로 분산 처리를 위해 여러 대의 서버들을 놓게 되는 스케일아웃(Scale-out) 작업을 하게 된다.
이 때 여러 서버들로 대규모의 네트워크 트래픽을 분산 처리하는 기술을 로드밸런싱(Load Balancing)이라고 하며, 로드밸런싱 기술을 제공하는 장치나 서비스를 로드밸런서(Load Balancer)라고 한다.
로드밸런싱(Load Balancing)이란?
로드밸런싱은 네트워크 또는 서버에 가해지는 부하(==로드)를 분산(==밸런싱)해주는 기술을 의미한다.
로드밸런싱 기술을 제공하는 서비스 또는 장치(로드밸런서)는 클라이언트와 네트워크 트래픽이 집중되는 서버들(Server Pool) 또는 네트워크 허브 사이에 위치하며, VIP(Virtual IP)와 함께 구성된다.
* VIP(Virtual IP)란?
로드밸런싱의 대상이 되는 여러 서버를 대표하는 가상의 IP
클라이언트들은 서버의 IP로 직접 요청을 하는 것이 아니라 로드밸런서가 가지고 있는 VIP를 대상으로 요청
로드밸런서는 설정된 부하 부산 방법에 따라 각 서버로 요청을 분산
특정 서버 또는 네트워크 허브에 부하가 집중되지 않도록 트래픽을 다양한 방법으로 분산하여 서버나 네트워크 허브들의 성능을 최적인 상태로 유지할 수 있도록 한다.
로드밸런서의 기본 기능
(1) Health Check
기본적으로 보통의 로드밸런서는 서버들(또는 다음 노드)에 대한 주기적인 Health Check를 통해 서버들의 장애 여부를 판단할 수 있다. 이로 인해 로드밸런서가 있을 때 서버 몇 대에 이상이 생기더라도 다른 정상 동작중인 서버로 트래픽을 보내주는 Fail-over가 가능하며, 또한 TCP/UDP 분석이 가능하기 때문에 Firewall의 역할도 수행할 수 있다.
> L3 체크 : ICMP를 이용하여 서버의 IP 주소가 통신 가능한 상태인지 확인
> L4 체크 : TCP는 3 Way-Handshaking을 기반으로 통신. TCP의 특성을 바탕으로 각 포트 상태를 체크하는 방식.
ex) HTTP 웹 서버의 경우 80 포트를 사용하므로 TCP 80 포트에 대한 체크를 통해 서버가 살아있는 상태인지 확인
> L7 체크 : 어플리케이션 계층에서 체크. 즉, 실제 웹페이지(ex. ../index.html)에 통신을 시도하여 이상 유무를 파악
(2) Tunneling
눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
로드밸런서는 클라이언트와 서버 간 중간에서 터널링을 제공
즉, 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제하게 만든다.
(3) NAT(Network Address Translation)
Private IP를 Public IP로 바꿔주는 통신망의 주소 변조기 == IP 주소를 변환해주는 기능
(목적지와 수신지의 IP 주소와 TCP/UDP 포트를 재기록하여 변환하며 네트워크 트래픽을 주고 받을 수 있음)
예를 들어, 내부 네트워크에서 사용하던 사설 IP 주소를 로드밸런서 외부의 공인 IP 주소로 변경(반대로도 가능) 해주면 부족한 공인 IP 주소를 효율적으로 사용할 수 있지만, 로드밸런싱 관점에서는 여러 개의 호스트가 하나의 공인 IP 주소(VIP)를 통해 접속하는 것이 주 목적이다.
☞ SNAT(Source Network Address Translation)
내부에서 외부로 트래픽이 나가는 경우
내부 사설 IP 주소를 외부의 공인 IP 주소로 변환하는 방식
ex) 집에서 사용하는 공유기
☞ DNAT(Destination Network Address Translation)
외부에서 내부로 트래픽이 되돌아가는 경우
외부 공인 IP 주소를 내부의 사설 IP 주소로 변환하는 방식ex) 로드밸런서
(4) DSR(Direct Server Routing)
서버에서 클라이언트로 되돌아가는 경우, 목적지를 클라이언트로 설정한 다음 네트워크 장비나 로드밸런서를 거치지않고 바로 클라이언트를 찾아가는 방식이다.
이런 경우 로드밸런서의 부하를 줄여줄 수 있는 장점이 있다.
로드밸런서의 기본 동작 방식
(1) 클라이언트가 브라우저에서 'www.yelin1217.tistory.com' 이라고 입력
(2) 클라이언트에 설정된 메인 DNS 서버로 www.yelin1217.tistory.com의 IP 주소를 문의
(3) 메인 DNS 서버는 www.yelin1217.tistory.com 주소를 관리하는 별도의 DNS 서버에 IP 주소 문의
(4) 별도 관리 DNS 서버는 로드밸런서의 IP(Virtual IP) 주소를 메인 DNS 서버에게 알려줌
(5) 메인 DNS 서버는 획득한 VIP 주소를 클라이언트에 전송
(6) 클라이언트에서 로드밸런서의 VIP 주소로 http 요청
(7) 로드밸런서는 별도 로드밸런싱 방법(ex. 라운드 로빈 등)을 통하여 서버에게 요청을 전송
(8) 서버의 작업 결과를 받은 로드밸런서는 전달받은 http 결과를 클라이언트에게 전송
설정한 mode에 따라 동작하는 방법
Bridge / Transparent Mode
기초적인 방법인 Bridge/Transparent Mode에서는 사용자가 서버에 서비스를 요청할 때 중간에서 로드밸런서가 NAT를 통해 IP/MAC주소를 변조한다. 즉, 요청과 응답이 모드 로드밸런서를 경유한다.
- 요청
- 사용자가 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 주소는 변경되지 않는다.
Router Mode, One Arm Mode, DSR(Direct Server Return) Mode 는 아래 참조 링크를 확인!
https://steady-coding.tistory.com/535#Router_Mode
https://steady-coding.tistory.com/535#One_Arm_Mode
https://steady-coding.tistory.com/535#DSR_(Direct_Server_Return)_Mode
로드밸런서의 종류와 로드밸런싱의 방법
로드 밸런서는 OSI 7 계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 나뉜다.
2 계층을 기준으로 부하를 분산한다면 L2 방식 / 3 계층을 기준으로 분산한다면 L3 방식이다.
상위 계층으로 갈수록 섬세한 부하 분산이 가능하지만, 가격과 성능에 드는 비용이 증가한다.
부하 분산에는 L4 로드 밸런서와 L7 로드 밸런서가 가장 많이 활용된다.
그 이유는 L4부터 포트 정보를 바탕으로 분산하는 것이 가능하기 때문이다.
한 대의 서버에 각각 다른 포트 번호를 부여하여 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 이상을 사용해야 한다.
1) 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)
- 사용자의 IP를 해싱한 후 그 결과에 따라 서버로 요청을 분배하기 때문에 특정 클라이언트는 특정 서버로만 할당하는 방식이다.
- 대역폭 (Bandwidth) 기반
- 서버들과의 대역폭을 고려하여 트래픽을 분산하는 방식이다.
2) L7 로드밸런싱
L7 로드 밸런서는 L4 로드 밸런서의 기능을 포함하는 것 뿐만 아니라 애플리케이션 계층 (HTTP, SMTP, FTP)의 정보를 바탕으로도 분산 처리가 가능하다. 쉽게 말해서 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능하다.
아래 그림과 같이 URL에 따라 부하를 분산하거나, HTTP 헤더의 쿠키 값에 따라 부하를 분산하는 등 클라이언트의 요청을 보다 세분화해 서버에 전달할 수 있다. 또한, L7 로드 밸런서의 경우 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있으며, Dos/DDoS와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용되고 있다.
- URL 스위칭 방식 (URL Switching)
- 특정 하위 URL들은 특정 서버로 처리하는 방식이다. 예를 들어, '.../images' 또는 '.../video'와 같은 URL은 서버가 아닌 별도의 스토리지에 있는 객체 데이터로 바로 연결되도록 구성할 수 있다.
- 컨텍스트 스위칭 방식 (Context Switching)
- 클라이언트가 요청한 특정 리소스에 따라 특정 서버로 연결할 수 있다. 예를 들어, 이미지 파일에 대해서는 확장자를 참조해 별도로 구성된 이미지 파일이 있는 서버 또는 스토리지 직접 연결해 줄 수 있다.
- 쿠키 지속성 (Persistence with Cookies)
- 쿠키 정보를 바탕으로 클라이언트가 연결했었던 서버에 계속 할당해 주는 방식이다.
* L4 로드 밸런서와 L7 로드 밸런서 한 눈에 비교하기!
로드밸런서 주요 성능 지표
초당 연결 수 (Connections per second)
> 최대 처리 가능한 초당 TCP 세션 개수를 의미한다.
동시 연결 수 (Concurrent connections)
> 동시에 유지할 수 있는 최대 세션 개수를 의미한다.
처리 용량 (Throughput)
> UDP 프로토콜에 대한 로드 밸런싱 성능 지표
> FWLB (Firewall Load Balancing)에서 중요
> 단위는 bps (bit per second) 또는 pps (packet per second) 사용
로드밸런서 장애 대비
갑작스러운 장애에 대비해 로드밸런서 서버는 아래와 같이 이중화를 기본으로 구성한다.
로드밸런서에 장애가 발생했을 때의 시나리오는 다음과 같다.
1) 이중화된 로드밸런서들은 서로 상태를 확인
2) Master 서버가 Fail되면 Standby 서버가 자동으로 Master 서버의 역할을 함
3) standby 서버는 평상 시에는 대기 상태로 있다가 Master 서버가 Fail 되었을 경우에만 작동
이 구성을 Fail Over라고 한다.
참고
https://tecoble.techcourse.co.kr/post/2021-11-07-load-balancing/
https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903
'TIL > CS' 카테고리의 다른 글
[TIL/CS] 도메인과 아키텍처 (0) | 2023.03.09 |
---|---|
[TIL/CS] OSI 7 계층 (0) | 2022.12.07 |
[TIL/CS] 웹 서버(Web Server)와 웹 어플리케이션 서버(WAS) (0) | 2022.11.02 |
[TIL/CS] 외부망, DMZ, 내부망이란? (0) | 2022.10.07 |