부하 분산과 고가용성을 제공하는 ELB

이재홍 http://www.pyrasis.com 2014.03.24 ~ 2014.06.30

ELBElastic Load Balancing는 부하 분산과 고가용성High Availability을 제공하는 서비스입니다.

프리 티어에서 사용 가능
ELB는 프리 티어에서 무료로 사용할 수 있습니다. 2014년 8월 기준으로 매달 ELB 750시간, 데이터 처리 15GB를 무료로 사용할 수 있습니다.

ELB는 고가의 L4/L7 장비(로드 밸런서)를 구입하거나 소프트웨어로 서버를 구축하지 않아도 부하 분산 기능을 사용할 수 있고, 고가용성 서비스를 구축할 수 있습니다.

예전에는 부하 분산을 하려면 별도의 L4/L7 장비를 구입하거나 서버를 구입해야 했습니다. 보통 회사에서는 개발 부서, 구매 부서, 네트워크 장비 운영 부서가 모두 분리되어 있습니다. 그래서 장비나 서버를 구매한다 하더라도 구매에서 설치까지 복잡한 절차와 오랜 시간이 걸립니다. 물론 비싼 장비 가격도 큰 부담이었고, 설치 및 운영도 전문가의 도움이 필요했습니다. 그래서 부하 분산과 고가용성은 일부 네트워크 전문가들만의 영역이었습니다.

클라우드 서비스 시대로 오면서 상황이 많이 바뀌었습니다. AWS에서는 클릭 몇 번만으로 서버를 생성할 수 있는 것처럼 로드 밸런서인 ELB도 클릭 몇 번만으로 생성할 수 있습니다. 설정 방법도 매우 간단해져서 네트워크 전문가에게 의존하지 않아도 됩니다. ELB를 사용하면 고가의 장비 구입에 드는 비용을 절감할 수 있고, 서버 구축에 드는 노력과 비용도 절감할 수 있습니다.

ELB는 한곳에 집중되는 HTTP, TCP, SSL 트래픽을 여러 EC2 인스턴스로 분산합니다. 그리고 서버가 정상적으로 가동 중인지 확인Health Check하여 일부 EC2 인스턴스가 중단되더라도 트래픽을 정상 EC2 인스턴스로만 보냅니다. 이처럼 ELB로 부하를 분산하고 고가용성 서비스를 구축할 수 있습니다.


그림 18-1 ELB 기본 개념도

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


그림 18-2 ELB와 가용 영역

ELB는 외부 트래픽 뿐만 아니라 인터넷이 연결되지 않는 내부 네트워크에서도 사용할 수 있습니다.

다음은 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 Scaling이 사용자의 요청을 처리 중인 EC2 인스턴스를 바로 삭제하지 못하도록 방지하는 기능입니다. 예를 들어 사용자 수가 줄어들면 Auto Scaling이 EC2 인스턴스를 삭제합니다. 마침 사용자가 해당 EC2 인스턴스에서 파일을 다운로드하고 있었는데 EC2 인스턴스가 삭제되어버리면 파일 다운로드는 중간에 끊어집니다. EC2 인스턴스를 삭제하기 전에 사용자의 요청을 처리할 수 있도록 지정한 시간만큼 기다립니다. 그리고 기다리는 동안에는 새로운 커넥션을 받지 않습니다.
  • Sticky Sessions: 사용자의 세션을 확인하여 적절한 EC2 인스턴스로 트래픽을 분배하는 기능입니다(HTTP 쿠키(Cookie)를 이용한 세션). 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: 서지 큐가 꽉 차서 ELB 로드 밸런서가 거부한 요청의 개수입니다.
  • 요금: ELB 로드 밸런서 실행 시간, 전송된 데이터양에 따라 요금이 책정됩니다. 자세한 요금은 AWS 사이트의 요금표(http://aws.amazon.com/ko/elasticloadbalancing/pricing/)를 참조하기 바랍니다.

ELB Pre-warming
ELB는 하나의 장비가 아니라 내부적으로 여러 AWS 리소스가 조합된 서비스입니다(ELB는 IP 주소가 아닌 도메인으로 접속합니다). 따라서 ELB로 들어오는 트래픽이 급격히 늘어날 것으로 예상되면 미리 AWS에 ELB의 처리량을 늘려달라고 요청할 수 있습니다. 서비스 출시 전 테스트 상황에서도 요청할 수 있습니다.

ELB Pre-warming은 AWS Support에 가입되어 있어야 신청할 수 있습니다. https://aws.amazon.com/support/createCase/?type=technical_support에 접속한 뒤 기술지원(Technical Support) 문의에서 ELB 정보 및 트래픽 정보를 입력하여 신청하면 됩니다.

  • ELB Name: exampleelb-2012921842.ap-northeast-1.elb.amazonaws.com
  • Start date for elevated traffic patterns: 2014. 1. 10
  • End date for elevated traffic patterns: 2014. 1. 20
  • Traffic delta OR request rate expected at surge(in Requests Per Second): 1,000 to 10,000 in 5 minutes
  • Average amount of data passing through the ELB per request/response pair(In Bytes): 10Kbytes
  • Rate of traffic increase: 50,000/sec
  • Are keep-alives used on the back-end?: keep-alives 사용 유무 입력
  • Percent of traffic using SSL termination on the ELB: 트래픽에서 SSL termination이 차지하는 비율 입력
  • Number of AZ’s that will be used for this event/load balancer: ELB 로드 밸런서가 트래픽을 분산하고 있는 가용 영역 개수 입력
  • Is the back-end scaled to event/spike levels? If no, how many and what type of instances and when will they be scaled?: Auto Scaling으로 확장하는 기준, EC2 인스턴스 유형 및 개수 입력
  • Use-case description: 사용 계획 입력
  • Traffic pattern description: 트래픽 패턴 설명 입력

내용을 모두 한글로 입력해도 되지만 제목이나 내용 첫머리에 “한글로 되어 있다”, “한국 고객이다” 등을 영어로 기재하면 좀더 빨리 처리됩니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.