로드밸런서(Load Balancer)

로드 밸런서가 필요한 이유

  • 한 서버에 트래픽 과다로 인한 시스템 성능 저하 문제

    • 현대의 모든 정보는 인터넷으로 연결되어 있고, 인터넷의 발달로 데이터 통신이 더 발달하면서 폭발적인 트래픽의 증가로 이어짐

    • 이때 사용자가 원하는 정보(결과)를 응답해주는 역할을 서버가 담당하는데, 아무리 성능이 뛰어난 서버라도 모든 트랙픽을 감당할 수 없음

    • 서버가 하나인데, 수천만개의 요청이 오게된다면 과부하가 걸려 서비스가 작동을 멈출 수 있음(문제 발생)

  • 해결 방법

    • Scale-Up(수직적 확장): 서버가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법

      • 기존 서버 자체의 성능을 향상(확장)함

      • ex) CPU나 메모리 업그레이드 등

    • Scale-Out(수평적 확장): 하나의 서버보다는 여러 대의 서버가 나누서 일을 처리하는 방법

      • 기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증성하여 운영하는 것

      • 이때 서버가 여러 대이기 때문에 각 서버로 쏱아지는 트래픽을 균등하게 분산해주는 로드밸런싱 기술이 필요하고, 이 역할을 하는 것이 로드 밸런서

로드 밸런서란?

부하분산 또는 로드 밸런싱(load balancing)은 컴퓨터 네트워크 기술의 일종으로, 둘 이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미

  • 개념

    • 서버에 가해지는 부하(로드)를 분산(밸런싱)해주는 장치 또는 기술을 통칭함

      • 로드밸런싱 기술을 제공하는 서비스 또는 장치

    • 클라이언트와 서버풀 사이에 위치하며, 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해서 각각의 서버가 최적의 포퍼먼스를 보일 수 있도록 함

      • 서버풀(Server Pool): 분산 네트워크를 구성하는 서버들의 그룹

  • VIP(Virtual IP)와 함께 구성됨

    • VIP: 로드밸런싱의 대상이 되는 여러 서버들을 대표하는 가상의 IP

    • 클라이언트들은 서버에게 IP로 직접 요청 하는 것이 아니라 로드밸런서가 가지고 있는 VIP를 대상으로 요청을 함

    • 이후 로드밸런서는 설정된 부하 분산 방법에 따라 각 서버로 요청을 분산시킴

  • 역할

    • 특정 서버의 부하를 줄임

      • 네트워크 트래픽 또는 클라이언트의 요청을 여러 서버에 적절하게 분배함

    • 높은 가용성과 신뢰성 보장

      • Active한 서버에게만 요청을 전송하고, 서버가 다운되면 리다이렉션함

    • 유연성 제공

      • 서비스 중단 없이 서버를 추가하거나 뺄 수 있게 해줌

    • 보안

      • DDOS 공격이나 악성 컨텐츠를 사전에 차단할 수 있음

      • 추가 보안을 위해 네트워크 방화벽 그룹을 통해 인입되는 요청을 제한할 수 있음

로드밸런서 기본 기능

  • Health Check (상태 확인)

    • 서버들에 대한 주기적인 Health Check를 통해 서버들의 장애 여부를 판단하여, 정상 동작 중인 서버로만 트래픽을 보냄

    • L3 체크: ICMP를 이용하여 서버의 IP 주소가 통신 가능한 상태인지를 확인

    • L4 체크: TCP 3 Way-Handshaking을 바탕으로 각 포트 상태를 체크

    • L7 체크: 어플리케이션 계층에서 체크를 수행, 실제 웹페이지에 통신을 시도하여 이상 유무 파악

  • Tunneling (터널링)

    • 데이터 스트림을 인터넷 상에서 가상의 파이프를 통해 전달시키는 기술로, 패킷 내에 터널링할 대상을 캡슐화시켜 목적지까지 전송

    • 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제하게 함

  • NAT(Network Address Translation)

    • 내부 네트워크에서 사용하는 사설 IP 주소와 로드밸런서 외부의 공인 IP 주소 간의 변환 역할

    • 로드밸런싱 관점에서는 여러 개의 호스트가 하나의 공인 IP 주소(VLAN or VIP)를 통해 접속하는 것이 주 목적

      • SNAT (Source Network Address Translation) : 내부 사설 IP 주소 -> 외부 공인 IP 주소로 변환

      • DNAT (Destination Network Address Translation) : 외부 공인 IP 주소 -> 내부 사설 IP 주소로 변환

  • DSR (Destination Network Address Translation)

    • 서버에서 클라이언트로 트래픽이 되돌아가는 경우, 목적지를 클라이언트로 설정한 다음, 네트워크 장비나 로드밸런서를 거치지 않고 바로 클라이언트를 찾아가는 방식

    • 해당 기능을 통해 로드밸런서의 부하를 줄여줄 수 있음

로드밸런서 종류

  • OSI 7계층을 기준으로 어떻게 부하를 분산하는지에 따라 나뉨

    • 상위 계층으로 갈수록 더욱 정교한 부하 분산이 가능지만 가격이 비싸지며, 하위 계층으로 갈수록 간단한 부하분산이 가능하고 가격이 저렴해짐

  • 종류

    • L2: Mac주소를 바탕으로 Load Balancing, Data link 계층

    • L3: IP주소를 바탕으로 Load Balancing, Network 계층

    • L4: Transport Layer(IP와 Port) Level에서 Load Balancing, Transport 계층

    • L7: Application Layer(사용자의 Request) Level에서 Load Balancing, Application 계층

  • 보통 부하 분산에는 L4 로드밸런서와 L7 로드밸런서를 가장 많이 활용함

    • L4 로드밸런서부터 포트 정보를 바탕으로 로드를 분산 가능하기 때문

    • 한 대의 서버에 각기 다른 포트 번호를 부여하여 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 로드밸런서 이상을 사용해야 함

L4 로드밸런서 VS L7 로드밸런서

L4 로드밸런서

  • 특징

    • 네트워크 계층(IP, IPX)이나 전송 계층(TCP, UDP)의 정보를 바탕으로 로드를 분산함

    • 즉, IP 주소나 포트번호, MAC 주소, 전송 프로토콜 등에 따라 트래픽을 분산하는 것이 가능함

    • 로드밸런싱의 기준점이 IP와 Port이기 때문에 TCP/UDP의 Header를 분석해 로드밸런싱에 활용하지는 않음

    • 프로토콜 헤더를 통해 로드밸런성하기보다 해당 프로토콜 특성으로 인한 행동 제어

    • EX) 3-way handshake제어, 커넥션 해제 시점 및 유지 시간 등

  • 장점

    • 데이터(패킷) 안을 들여다보지 않고 패킷 레벨에서만 로드를 분산하기 떄문에 속도가 빠르고 효율이 높음

    • 데이터 내용을 복호화할 필요가 없기 때문에 안전함

    • L7 로드밸런서보다 가격이 저렴함

  • 단점

    • 패킷 내용을 살펴볼 수 없기 때문에 섬세한 라우팅이 불가능함

    • 사용자의 IP가 수시로 바뀌는 경우라면 연속적인 서비스를 제공하기 어려움

L7 로드밸런서

  • 특징

    • 어플리케이션 계층(HTTP, FTP, SMTP 등)에서 로드를 분산하기 때문에, HTTP와 HTTPS의 URL, 쿠키 정보 등과 같은 사용자 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능함

      • 즉, 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분해하는 것이 가능함

      • 따라서 클라이언트의 요청을 보다 세분화해서 서버에 전달 할 수 있음

    • 특정한 패턴을 지닌 바이러스 감지해 네트워크를 보호할 있고, Dos/DDos와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용되고 있음

    • L4와 같이 IP와 Port를 사용하는 것은 같으나 Layer7 프로토콜을 사용해 사용자 정의 로드밸런싱을 실시하거나 Layer7프로토콜 헤더를 조작/활용할 수 있음

  • 장점

    • 상위 계층에서 로드를 분산하기 떄문에 훨씬 섬세한 라우팅이 가능함

    • 캐싱 기능을 제공함

    • 비정상적인 트래픽을 사전에 필터링할 수 있어 서비스 안정성이 높음

  • 단점

    • L4 로드밸런서에 비해 비쌈

    • 패킷의 내용을 복호화해야하기 때문에 더 높은 비용을 지불해야함

    • 클라이언트가 로드밸런서와 인증서를 공유해야하기 떄문에 공격자가 로드밸런서를 통해 클라이언트에 데이터에 접근할 보안상의 위험이 존재함

  • 상위 레벨의 역할을 수행하는 스위치는 하위 역할의 프로토콜을 모두 이해해야 함.

  • L7 또한 모든 레벨을 해석할 수 있지만, 각자의 역할에 집중된 처리로 불필요한 리소스 소모를 줄이고자 L4와 분리

로드밸런싱 알고리즘

클라이언트의 요청을 특정 서버에 분배하는 로드밸런싱 기법으로, 로드밸런서가 서버를 선택하는 기준 서버의 능력을 고려하여 분해해야 하기 때문에 서버의 상황에 맞춰 적절한 방법을 선택해야 함

라운드 로빈(Round Robin)

  • 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식

  • 클라이언트의 요청을 순서대로 분배하기 때문에 여러 대의 서버가 동일한 스펙을 갖고 있음

  • 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합함

가중 라운드로빈 방식(Weighted Round Robin Method)

  • 각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분함

  • 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 로드밸런식 방식

  • ex) 서버 A의 가중치가 5이고, 서버 B의 가중치가 2일 때, 서버 A에게 5개의 요청을 보내고 서버 B에게 2개의 요청을 할당함

IP 해시 방식(IP Hash Method)

  • 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식

  • 사용자의 IP를 해싱(Hashing)하여 부하를 분산하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장함

  • 경로가 보장되며, 접속자 수가 많을수록 분산 및 효율이 뛰어남

최소 연결 방식(Least Connections)

  • Request가 들어온 시점에 가장 적은 연결(세션) 상태를 보이는 서버에 우선적으로 트래픽을 할당함

  • 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합함

최소 응답 시간(Least Response Time Method)

  • 서버의 현재 연결 상태와 응답시간(Response Time)을 모두 고려하여, 가장 짧은 응답 시간을 보내는 서버로 트래픽을 할당하는 방식

  • 각 서버들의 가용한 리소스와 성능, 처리중인 데이터 양 등이 상이할 경우 적합함

DNS Round Robin(대용량 세션을 위한 로드밸런서)

DNS는 도메인 이름을 IP주소로 변환하는 기술

  • 대용량 서비스에서 대용량 트래픽을 장애없이 처리하려면 부하 분산은 필수(여러 대의 서버에 적절한 트래픽 분배 필요)

    • 이때 몇 개의 노드만 있다면 DNS 라운드 로빈 방식이 합리적임

    • 로드 밸런서 자체는 비용이 높고 불필요한 복잡함을 증가시킬 수 있기 때문

  • DNS에서는 하나의 도메인 이름을 라운드 로빈 방식으로 여러 대의 서버 IP 주소 중에 하나로 변환한다면 이것만으로 쉽게 부하 분산이 가능함

    • 별도의 소프트웨어나 로드밸런싱 장비를 사용하지 않고 DNS 만으로 트래픽을 분산하는 기법

    • DNS RR은 지리적으로 N개의 서버가 멀리 떨어져 있어서 실시간으로 Health Check(상태 확인)가 어렵거나, 적은 비용으로 구현이 필요할 때 사용함

  • 단점

    1. DNS는 서버의 부하를 줄이고 성능을 향상시키기 위해서 일정 시간 동안 캐싱하여 재사용하기 때문에 부하 분산이 균등하게 되지 않음

    2. 특정 서버에 장애가 발생하더라도 장애 여부가 감지되지 않아 서비스에서 해당 서버를 제거할 수 없음

      • 일반적인 로드밸런싱은 서버들에 대해 주기적인 Health Check(상태 확인)를 통해서 서버들의 장애 여부를 판단하여 정상 동작 중인 서버로만 트래픽을 보내지만, DNS RR은 Health Check 하지 않음

AWS 로드밸런서 유형

◼︎ ELB(Elastic Load Balancer)

  • 개념

    • AWS에서 제공하는 로드밸런서를 통칭

    • 둘 이상의 가용 영역에서 EC2 인스턴스 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산

  • 특징

    • ELB의 종류로 ALB, NLB, GLB, CLB가 있음

    • 뛰어난 확장성과 유연성을 제공해 사용자의 다양한 요구 사항과 환경에 맞출 수 있음

◼︎ ALB (Application Load Balancer)

  • 개념

    • HTTP 헤더 또는 SSL 세션 ID와 같은 요청 콘텐츠를 확인하여 트래픽을 리다이렉션

  • 특징

    • 어플리케이션 레벨에서 로드밸런싱을 제공하며, HTTP/HTTPS 트래픽에 적합

    • L7 기반 로드 밸런서를 지원하며 SSL 적용 가능

    • NLB보다 성능적으로는 느릴수는 있어도 요청에 따른 패킷에 따라 다양한 전송 규칙을 지정할 수 있음

◼︎ NLB (Network Load Balancer)

  • 개념

    • IP 주소 및 기타 네트워크 정보를 검사하여 트래픽을 최적으로 리다이렉션

  • 특징

    • 애플리케이션 트래픽의 소스를 추적하고 여러 서버에 고정 IP 주소를 할당할 수 있음

    • OSI 7 Layer중에서 전송계층 레이어에서 로드밸런싱 동작

    • TCP/UDP 프로토콜 기반으로 전송할 타겟을 지정할 수 있음

    • L4 기반 로드 밸런서 지원

    • 고성능을 요구하는 환경에서의 부하분산에 적합하며, 낮은 레이턴시로 초당 수백만 건의 요청을 처리할 수 있음

      • EX) 실시간 스트리밍 서비스, 화상 회의 애플리케이션, 채팅 애플리케이션

오리지널 AWS 로드 밸런싱 서비스는 ELB이다. 이후 ALB가 추가로 개발되면서 ELB는 CLB(Classic Load Balancer)로 명칭이 변경되었다. 즉 용어적으로는 ALB=ELB=CLB로 이해하면 되며 현재는 NLB(Network Load Balancer)의 추가로 기능이 더욱 강화되었다. 보통 ELB라 하면 AWS의 로드 밸런싱 서비스 전체를 통틀어 칭하는 말이기도 하다.


[참고]

  • https://m.post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903

  • https://devfancy.github.io/Network-Load-Balancing/

  • https://co-no.tistory.com/entry/네트워크-로드밸런싱

  • https://y-oni.tistory.com/313

  • https://aws-hyoh.tistory.com/149

Last updated