로드밸런싱

고장난 고양이·2022년 7월 26일
0

네트워크

목록 보기
9/11

로드밸런싱(Load Balancing)이란?

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

즉, 여러서버가 분산처리하는 것을 로드 밸런싱이라고 한다.

Scale-up & Scale-out

  • Scale-up의 경우 서버 자체의 성능을 확장하는 것을 의미합니다.
    • 비유하자면 CPU가 i3인 컴퓨터를 i7으로 업그레이드하는 것과 같습니다.
  • 반면 Scale-out의 경우 기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것을 의미합니다.
    • CPU가 i3인 컴퓨터를 여러 대 추가 구입해 운영하 것에 비유할 수 있습니다.

Scale-out의 방식으로 서버를 증설하기로 결정했다면 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요합니다.

로드 밸런싱의 종류

  • L4 : Transport 계층을 사용, IP 주소와 포트 번호 부하 분산이 가능
  • L7 : Application 계층을 사용, URL 또는 HTTP 헤더에서 부하 분산이 가능

NLB & ALB

로드 밸런서는 몇 계층에서 분산작업을 수행하느냐에 따라 NLB(Network LoadBalancer)와 ALB(Application LoadBalancer)로 나눌 수 있습니다.

즉 L4 -> NLB | L7 -> ALB입니다.

NLB(Network LoadBalnacer)

  • L4의 특성을 이용하는 로드밸런서이다. 즉, TCP와 UDP를 사용하는 요청을 받아들여 부하분산을 실시한다.
  • HTTP가 아닌 하위 Layer인 TCP Layer에서 처리하므로 HTTP 헤더를 해석하지 못한다.
  • 지연시간이 좀 짧다 → L4라서 빠름
  • 대규모 트래픽 처리에 적합하다.
  • IP가 변하지 않는다.
  • 보안 그룹 설정을 안한다. => Backend에서의 SG Rule을 따름
  • NLB에서 대상을 인스턴스로 지정하면 Client IP 확인이 가능하다.
    ⇒ tcpdump로 서버에서 확인 가능

  • NLB에서 대상을 IP로 등록시 NLB 내부 IP를 찍는다 !!
    ⇒ 클라이언트 IP로 확인이 안됨 ( NLB는 L4라 안된다. )
    ⇒ Proxy Protocol 활성화해서 사용해야 한다.
    ⇒ 웹서버에서 Proxy Protocol 활성화 설정해 확인이 가능

ALB(Application LoadBalancer)

  • HTTP, HTTPS의 특성을 주로 다루는 로드밸런서
  • HTTP의 헤더 정보를 이용해 부하 분산을 실시하는 것이 ALB의 주요 특징이다.
  • SSL 인증서를 탑재할 수 있어 대상 그룹의 EC2를 대신하여 SSL 암/복호화를 대신 진행할 수 있음
  • ALB는 라운드 로빈 방식으로 서버에 접속한다.
  • ELB — WEB — ELB — WAS의 경우 세션에 관한 정보들은 Redis, Memcached 사용 권장
  • 외부 방화벽에서 특정 IP만 허용이 필요할 때 ALB 앞단에 NLB를 두거나 AWS Global Accelerator를 설정한다. (NLB만 IP를 고정할 수 있다.)
  • ALB 세팅 시 보안그룹을 지정할 수 있다.
  • ALB는 ALB 자신의 IP를 웹서버 혹은 Tomcat 서버 내부 access_log에 찍힌다. Client의 IP를 보내지 않으므로 Apache 기본 로그 설정에서 X-Forwarded-For를 추가하여 Client IP를 확인 가능
  • 타겟 유형이 Instance나 ip, Lambda도 가능하다.
  • Rule 편집을 통해 L7 구현이 가능하다.
  • Least Outstanding Requests (LOR) 알고리즘을 통해 미처리 요청이 가장 적은 대상으로 Client의 Request를 보낼 수 있다.
  • 요청에 따라 대상그룹에 특정 서버로 가게 할 수 있다.

로드밸런싱 알고리즘 종류

라운드 로빈 방식

  • 라운드 로빈(Round Robin Method)은 클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 순서대로 할당받는 방식입니다.
  • 첫 번째 요청은 첫 번째 서버, 두 번째 요청은 두 번째 서버, 세 번째 요청은 세 번째 서버에 할당합니다. * 로드밸러닝 대상 서버의 성능이 동일하고 처리 시간이 짧은 애플리케이션의 경우, 균등하게 분산이 이루어지기 때문에 이 방식을 사용합니다.

가중 라운드 로빈 방식

  • 가중 라운드 로빈 방식(Weighted Round Robin Method)은 실제 서버에 서로 다른 처리 용량을 지정할 수 있습니다.
  • 각 서버에 가중치를 부여할 수 있으며, 여기서 지정한 값을 통해 처리 용량을 정합니다.

최소 연결 방식

  • 최소 연결 방식은 연결 수가 가장 적은 서버에 네트워크 연결방향을 정합니다.
  • 동적인 분산 알고리즘으로 각 서버에 대한 현재 연결 수를 동적으로 카운트할 수 있고, 동적으로 변하는 요청에 대한 부하를 분산시킬 수 있습니다.

참고
https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/

https://nyyang.tistory.com/96

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

profile
개발새발X발일지

0개의 댓글