본문 바로가기
IT

AWS ELB 기본 개념

by 힁구띠 2022. 6. 24.
부하 분산과 고가용성을 제공하는 서비스 Elastic Load Balancing (ELB)

1. 기본 개념

과거에는 부하 부산을 하려면 별도로 L4/L7 장비를 구매하거나 또는 서버를 구매해야 했다. 보통은 개발, 회계, 인사 등 네트워크 장비가 운영 부서마다 분리되어 운용되었다. 그래서 장비나 서버를 구매한다고 하더라도 도입 검토부터 구매, 설치까지 매우 복잡한 절차와 오랜 시간이 소요된다. 또한 고가의 장비는 가격도 부담이 되고, 설치와 운영을 위해서는 담당 전문가도 필요했다. 부하 분산과 고가용성은 네트워크 전문가들의 영역이었다.

ELB는 고가의 L4/L7 장비(로드 밸런서)를 구매하거나 서버를 따로 구축하지 않아도 부하 분산과 고가용성 서비스를 구축할 수 있다.

AWS에서 간단한 클릭 몇 번으로 서버를 생성할 수 있는 것처럼 로드 밸런서인 ELB도 클릭 몇 번으로 생성할 수 있다. 설정도 간단하고 쉬워서 네트워크 전문가의 도움이 따로 필요가 없을 정도이고, 고가 장비에 대한 비용이나, 구축에 들어가는 노력과 비용도 절감할 수 있다.

ELB는 한 곳에 몰리는 HTTP, TCP, SSL 트래픽을 여러 EC2 인스턴스로 분산한다. 서버가 정상으로 가동 중인지 확인(Health Check)해서 일부 EC2 인스턴스가 중단되더라고 트래픽을 정상 EC2 인스턴스로만 보낸다. 이처럼 ELB로 부하를 분산하고 고가용 서비스를 구출할 수 있다.

ELB는 리전 별로 생성해야 하고, 여러 AZ(가용 영역)에서 실행되는 EC2 인스턴스로 부하를 분산시킬 수 있다. 따라서 EC2 인스턴스 한 두 개가 중단되는 것이 아닌 가용 영역 전체가 중단되더라도 정상 서비스가 가능하다.

 

 

 

ELB는 외부 트래픽뿐 아니라 인터넷이 연결되어 있지 않은 내부 네트워크에서도 사용이 가능하다.

 

2. ELB 기본 용어

  • L4(OSI Layer 4): OSI 레이어에서 4번째 전송 계층을 의미한다. TCP, UDP 등의 프로토콜이 대표적이고 포트 번호로 구분한다. 보통 OSI 레이어에서 3번째 네트워크 계층의 IP와 묶어서 처리한다. L4 로드 밸런싱이라고 하면 IP 주소와 포트 번호를 기준으로 트래픽을 분산한다.
  • L7(OSI Layer 7): OSI 레이어에서 7번째 애플리케이션 계층을 의미한다. HTTP 프로토콜이 대표적이고 L7 로드 밸런싱은 HTTP 헤더의 내용을 기준으로 트래픽을 분산한다.
  • 로드 밸런싱 알고리즘: 트래픽을 각 EC2 인스턴스로 분배할 때 사용하는 알고리즘이다. ELB는 라운드 로비(Round Robin) 알고리즘을 사용한다. 라운드 로빈은 우선순위를 두지 않고 순서대로 분배하는 방식이다.
  • 헬스 체크(Health Check): EC2 인스턴스가 정상적으로 가동 중인지 확인하는 기능이다. EC2 인스턴스가 중단되었다고 판단되면 해당 EC2 인스턴스는 트래픽 분배에서 제외된다.
  • Connection Draining: Auto Scailing이 사용자의 요청을 처리 중인 EC2 인스턴스를 바로 삭제하지 못하도록 방지하는 기능이다. 예를 들면 사용자 수가 줄면 Auto Scailing이 EC2 인스턴스를 삭제한다. 그때 사용자가 해당 EC2 인스턴스에서 파일을 다운로드하고 있었는데 EC2 인스턴스가 삭제되면 파일 다운로드는 중간에 끊어진다. EC2 인스턴스를 삭제하기 전에 사용자의 요청을 처리할 수 있도록 지정한 시간만큼 기다린다. 또한 기다리는 동안에 새로운 커넥션을 받지 않는다.
  • Sticky Sessions: 사용자의 세션을 확인하여 적절한 EC2 인스턴스로 트래픽을 분해하는 기능이다(HTTP 쿠키를 이용하는 방식). L7 로드 밸런서의 기능이다. 예를 들면 동일 사용자가 서비스에 계속 접속한다면, 처음 접속했던 EC2 인스턴스에 계속 연결시켜준다. 이 기능을 사용하지 않으면 라운드 로빈 알고리즘에 따라 매번 다른 EC2 인스턴스에 연결된다.
  • Latency: ELB 로드 밸런서와 EC2 인스턴스 간의 지연시간이다.
  • HTTP 2XX, 4XX, 5XX: EC2 인스턴스에서 리턴한 HTTP Response Code이다.
  • ELB HTTP 4XX, 5XX: ELB 로드 밸런서에서 리턴한 HTTP Error Code이다.
  • Surge Queue Length: ELB 로드 밸런서에서 EC2 인스턴스로 전달되지 못하고 큐에 남아 있는 요청의 개수이다.
  • Spillover Count: 서지 큐가 full이라서 ELB 로드 밸런서가 거부한 요청의 개수이다.
  • 요즘: ELB 로드 밸런서 실행 시간, 전송된 데이터 양에 따라 요금이 책정된다.

 

* 참고: ELB는 장비가 아니며 내부적으로 여러 AWS 리소스가 조합된 서비스이다.(ELB는 IP 주소가 아닌 도메인으로 접속한다) 따라서 ELB로 들어오는 트래픽이 급격히 늘어날 것으로 예상되면 미리 AWS에 ELB 처리량을 늘려달라고 요청을 할 수 있다.

 

3. ELB 로드 밸런서 생성

  1. AWS 콘솔로 접속한 뒤 메인 화면에서 Compute & Networking의 EC2를 클릭(ELB는 항상 EC2와 함께 사용해야 하므로 EC2와 같은 페이지에 있다)
  2. 오른쪽 위에서 ELB와 EC2가 생성되는 리전을 변경할 수 있다. 
  3. 먼저 ELB 로드 밸런서에 연결할 EC2 인스턴스를 생성해야 한다. EC2 인스턴스 2개를 각각 다른 가용 영역에 생성한다.
  4. EC2 페이지에서 ELB 로드 밸런서 목록(Network & Security -> Load Balancers)을 클릭하고, 위쪽 Create Load Balancer 버튼을 클릭한다.
  5. ELB 로드 밸런서를 생성한다.
    • Load Balancer Name: 로드 밸런서 이름
    • Create LB Inside: 로드 밸런서가 생성될 VPC이다.
    • Create an internal load balancer: 인터넷에 연결되지 않은 내부 로드 밸런서로 생성하는 옵션이다.
    • Enable advanced VPC configuration: VPC에 속한 서브넷을 선택하는 옵션이다. 이 부분을 체크하면 뒤에서 서브넷을 선택할 수 있다.
    • Listener Configuration: 로드 밸런서가 처리할 프로토콜과 포트 번호이다.
      • HTTP, HTTPS(Secure HTTP): 일반적으로 사용하는 HTTP 프로토콜이다.
      • TCP, SSL(Secure TCP): 소켓 통신 등 TCP 프로토콜을 사용할 때 선택한다.
    • 계속 버튼을 누른다.
    • 헬스 체크 기능 설정 부분
    • Ping Protocol: 헬스 체크를 할 때 사용할 프로토콜이다. HTTP, HTTPS, TCP, SSL을 선택할 수 있다.
    • Ping Port: 헬스 체크를 할 때 사용할 포트 번호이다.
    • Ping Path: 헬스 체크를 할 때 접속할 경로이다. HTTP, HTTPS에서만 설정할 수 있다.
    • Response Timeout: 헬스 체크 응답 시간이다. 이 시간이 지나도 응답이 없으면 EC2 인스턴스 가동 확인에 실패한 것으로 판단한다.
    • Health Check Interval: 헬스 체크 주기
    • Unhealthy Threshold: 연속으로 설정한 값만큼 가동 확인에 실패했을 때 가동이 중단된 것으로 판단한다.
    • Healthy Threshold: 가동이 중단되어 트래픽이 분산에서 제외되었을 때 연속으로 설정된 값만큼 가동 확인에 성공하면 다시 포함된다.

4. Security Group 생성

  1. Assign a security group: 로드 밸런서의 Security Group이다. Create a new security group을 선택한다.
  2. Security group name: 새로 생성될 Security Group 이름이다.
  3. Description: 새로 생성될 Security Group의 설명
  4. Load Balancer Protocol을 HTTP에 80번 포트로 설정했으므로 동일하게 TYPE을 HTTP로 설정한다.
  5. Enable Cross-Zone Load Balaning: 여러 가용 영역에 생성된 EC2 인스턴스에 부하를 분산하는 옵션
  6. Enable Connection Draining: Connection Draining 사용 옵션이다. 1초부터 3600초(1시간)까지 설정할 수 있다.

* ELB 로드 밸런서 목록에 ELB 로드 밸런서가 표시된다. ELB 세부 내용의 DNS Name이 표시된다. EC2 인스턴스에 바로 접속하지 않고 ELB 로드 밸런서 URL로 접속해 본다.

'IT' 카테고리의 다른 글

AWS ElastiCache 기본 개념  (0) 2022.06.28
오라클 캐시 메모리  (0) 2022.06.27
JAVA 기본 개념 및 실습 - 2  (0) 2022.06.23
JAVA 기본 개념 및 실습 - 1  (0) 2022.06.22
AWS IAM 기본 개념 및 생성 방법  (0) 2022.06.21

댓글