카테고리 없음

AWS 10일차 ELB

kiminaki 2021. 6. 14. 22:23

ELB(Elastic Load Balancing)

 

 

 

Load Balancing 에 대해서 알아보자

해석하면 부하 분산을 하는것이다. 갑작스럽게 많은양의 트래픽이 들어온다면 이 로드 벨런싱이 여래대의 서버로 알맞게 부하를 분산해주는 역할을 해서 트래픽을 조절해 서버가 안정적으로 돌아갈 수 있게 만드는 것이다.

 

ELB는 AWS의 로드벨런스 서비스로 한곳에 집중되는 HTTP, TCP, SSL 트래픽을 여러 EC2 인스턴스로 분산합니다. 그리고 서버가 정상적으로 가동 중인지 확인Health Check하여 일부 EC2 인스턴스가 중단되더라도 트래픽을 정상 EC2 인스턴스로만 보냅니다. 이처럼 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는 EC2와 함께 사용하므로 EC2를 생성해보도록 한다. 

80번 포트를 열어주는 EC2를 생성

 

 

프리티어가 아닌 나노버전으로 생성했다.

 

 

일단패키지를 업데이트 시킨다

 

sudo apt update

 

 

그 다음 아파치랑 php를 설치한다

 

 

sudo apt install apache2 php

 

이후 도메인에 들어가 제대로 접속이 되는지 확인한다.

 

 

vi /var/www/html/index.php를 통해 파일을 하나 만들어주자 .

 

 

 

 

 

<?php
print{$_SERVER['SERVER_ADDR']};
?>

 

이 코드는 어떤 내부 IP를 가지고있는지 알려준다.

 

이런식으로 알려준다!!(프라이빗 ip주소가 출력된다)

 

 

ELB를 생성해보도록 하자.

 

 

EC2 좌측에 대상 그룹을 확인해보자 클릭

 

 

타켓 그룹 생성 클릭

 

 

정보 입력

 

 

여기서 상태검사는 인스턴스가 잘 살아있나 검사하는 역할을 한다.

지금 /는 루트 디렉터리를 의미한다.

다음을 누르고 

 

 

아래에 보류중인것으로 포함을 클릭하면 타겟 그룹에 선택한 인스턴스가 등록된다.

 

 

 

대상 그룹 생성 클릭

 

 

로드밸런서 클릭후 로드벨런서 생성 클릭

 

 

 

 

 

4가지가 있는데

우리는 어플리케이션을 선택한다.

 

 

이번실습에서 로드벨런서의 포트를 81번으로 한다.

 

 

가용영역선택 전부선택한다.

다음 클릭

 

 

기본적으로 81번 포트가 열려있다.

 

 

 

 

기존 대상그룹을 지정하면 앞서 생성한 TG그룹의 설정대로 간다.

 

 

활성화됬다

 

 

도메인뒤에 :81으로 연결하여 ELB에 접속한다 성공적으로 ELB를 통해 웹서버에 접속한 모습을 볼 수 있다.

 

 

ELB 테스트를 위해 인스턴스 이미지를 생성해보도록 하자.

 

 

 

생성된 이미지를 시작하기를 눌러 인스턴스로 만들어준다

80번 포트를 열어준다.

 

 

생성 완료 !

 

 

로드 밸런싱의 대상그룹에 들어가 TG그룹에 넣어보도록 하자 TG클릭

 

 

대상 등록 클릭

 

 

방금생성한 인스턴스를넣자 

 

 

보류중인 대상등록을 통해 추가시키자 

 

 

로드벨런서를 통해 바뀌는 모습을 확인 할 수 있다.

 

 

 

Sticky Session

ELB 로드 밸런서가 라운드 로빈 알고리즘으로 트래픽을 분배하는 것이 아닌 사용자의 쿠키 세션을 기준으로 트래픽을 분배하는 Sticky Session을 사용해보겠습니다.

 

한마디로 지연을 300초를 지정했다면 300초 동안은 해당 인스턴스로 계속 접속하고, 300초가 지난다면 인스턴스가 바뀔 수 있다.

 

 

 

대상그룹 속성편집에서 수행할 수 잇다.