네트워크 엔지니어 환영 2023. 11. 18. 13:29
반응형

Elastic Load Balancer란?

  • AWS의 L4/ L7 로드밸런싱(서버 부하분산) 서비스
  • 외부 혹은 내부에서 들어오는 클라이언트의 요청을 ELB에 연결된 가용영역에 있는 EC2로 고르게 나누어 전달하고 등록된 EC2들의 상태를 검사하는 서비스
  • 외부/내부 트래픽은 ELB의 DNS 주소를 목적지로 하여 들어오며 이 트래픽을 받은 ELB는 가용영역에 등록된 EC2로 전달
  • 보안그룹이 적용됨(ALB/NLB)
  • ELB는 VPC 내 존재하며 공인 IP 혹은 공인/사설 IP를 모두 가질 수 있음
    • 인터넷 연결 option(Internet-facing) : 공인/사설 IP 생성
    • 내부 option(Internal) : 사설 IP 생성
  • 포트 번호를 이용하여 포트 번호에 알맞는 Target Gorup(대상 그룹)으로 로드밸런싱
    • 예를 들어 HTTP 요청을 로드밸런할 경우, 그 ELB는 HTTP 요청만을 전달하고 다른 포트 요청은 전달하지 않음
  • ELB는 '리스너'를 거느리며 리스너 하나당 요청을 받아들이는 Port 하나씩을 지정함
    • 예를 들어 80 Port 요청을 받아 들이는 리스너, 443 Port 요청을 받아들이는 리스너를 모두 등록할 수 있음
  • 상태 검사에 성공한 EC2만이 요청 전달 대상이 되며 상태 검사에 실패한 EC2는 요청 전달 대상에 제외됨
  • SSL 인증서를 등록하여 HTTPS 암호화/복호화 통신을 대신하는 SSL Offload 가능
  • ELB는 세 가지 로드밸런서로 구성됨(CLB, Classic Load Balancer 지원 종료)
    • ALB(Application Load Balancer)
    • NLB(Network Load Balancer)
    • GWLB(Gateway Load Balancer)

 

Target Group(대상 그룹)

  • ELB에 등록된 EC2 인스턴스들의 그룹
  • 대상 그룹에 등록된 EC2 리스트, EC2 상태, 상태 검사 방법 등을 정의
  • 상태 검사 방법에는 HTTP, HTTPS, TCP 등이 있음
  • 방법뿐만 아니라 상태 검사에 필요한 시간도 정의 가능
  • '속성' 항목이 존재하여 'Cross Region Load Balancing', 'Sticy Session' 등 설정 가능

 

Application Load Balancer(ALB)

  • Layer 7 로드밸런서
  • HTTP/HTTPS Header 정보를 기반으로 요청을 전달하는 로드밸런서
    • 리스너가 HTTP/HTTPS를 전문적으로 다룸
  • 요청에 따라 고정 페이지를 반환하거나 다른 경로로 리다이렉트
  • HTTP Header / HTTP 요청 메서드 / Host Header / Source IP 등을 이용하여 요청 전달 가능
    • 예를 들어 HTTP Header 내 User-agent에는 Host의 OS 정보가 있는데 Android일 경우, ELB 리스너가 Android만 사용하는 대상 그룹으로 전달 가능
  • AWS SSL 인증서 서비스인 AWS Certificate Manager(ACM)를 이용하여 SSL Offload 지원
  • Cross Region Load Balancing(교차 영역 로드밸런싱) 지원
  • 트래픽이 ALB를 통과하게 되면 Source IP가 ALB Private IP로 변경됨
    • X-Forwared-For 헤더를 지원하여 EC2로 하여금 Client의 IP를 확인할 수 있도록 함
  • ALB가 소유한 Public IP가 유동적으로 변경됨

 

Network Load Balancer(NLB)

  • Layer 4 로드밸런서
  • TCP / UDP / TLS를 기반으로 요청을 전달하는 로드밸런서
  • 프로토콜, 원본 IP 주소, 원본 포트, 대상 IP 주소, 대상 포트, TCP 시퀀스 번호를 이용하여 요청 전달 
  • TCP, UDP, TCP/UDP로 리스너를 설정 가능
  • TCP Header를 조작하여 전달하는 것이 아닌 그저 TCP의 기본인 3-way handshake만을 대신하여 진행
  • Client IP를 NLB의 IP로 변경하지 않고 서버에게 전달
  • NLB가 소유한 Public IP가 ALB와 달리 유동적이지 않고 고정됨
  • Cross Region Load Balancing(교차 영역 로드밸런싱) 지원
  • Proxy Protocol을 활용하여 Client의 IP를 확인할 수 있도록 함
  • TLS 설정시 SSL Offload 지원 가능

 

Gateway Load Balancer(GWLB)

  • 3rd Party Solution을 부하 분산할 목적으로 만들어진 로드밸런서
  • Layer 3에서 작동하는 로드밸런서로 리스너 포트를 필요로 하지 않음
  • ALB와 NLB로 3rd Party Solutoin을 부하 분산하는 것이 원활하지 않아 대체할 목적으로 탄생함
  • 로드밸런서와 대상그룹 내 인스턴스는 "Geneve Prtocol(UDP, 6081)"을 통해 가상 터널을 만들고 통신함

 

Sticky Session(스티키 세션)

  • 특정 세션을 처리한 적이 있는 EC2로 다시 연결하는 기능
  • 하나의 요청이 특정 EC2로 들어와 세션이 생성되었다가 종료되고, 들어왔던 요청이 다시 들어올 경우 이미 연결되었던 특정 EC2로 전달

 

Cross Region Load Balancing(교차 영역 로드밸런싱)

  • 기본적으로 ELB는 대상그룹에 등록된 EC2별로 적절히 부하분산을 하는 것이 아닌 가용영역별로 비율을 나눔
    • 교차영역이 2개라면 각 가용영역에 50%씩 전달
  • 이렇게 될 경우 A 가용영역에 EC2가 2개이고, B 가용영역에 EC2가 8개일 경우 A/B 가용영역에 50%씩 전달되므로 A 가용영역의 EC2의 부하가 심해짐
  • 이를 방지하기 위해 교차영역 로드밸런싱을 활성화화면 가용영역이 아닌 EC2 갯수를 기반으로 계산하여 전달하므로 부하가 고르게 나누어짐

 

X-Forwared-for

  • Client의 IP 정보를 담고 있는 HTTP Header
  • EC2 내 서비스가 Client의 IP를 확인할 필요가 있는 경우 ELB는 HTTP Header에 X-Forwared-for를 장착하여 전달
  • HTTP 헤더를 제어할 수 있는 ALB 사용 가능

 

Connection Draining

  • Autoscaling과 ELB를 함께 사용시 필요에 따라 EC2가 종료될 경우, 해당 EC2에 요청이 이미 들어와 처리중이라면 사용중인 사용자가 피해를 볼 수 있음
  • 삭제되기 직전에 유휴 세션이 작업을 마칠 때까지 기다리는 기능