본문 바로가기
서버/AWS

[AWS]6. ELB(Elastic Load Balancer) 개념 및 실습

by jamong1014 2022. 6. 5.
반응형
 

웹 서버 로드 밸런싱 | 서버 로드 밸런싱 | Amazon Web Services

Application Load Balancer Gateway Load Balancer Network Load Balancer

aws.amazon.com

 

ELB(Elastic Load Balancer)란 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수와 같은 여러 대상에 자동으로 분산시킵니다.

 

ELB(Elastic Load Balancer)은 단일 가용 영역 또는 여러 가용 영역에서 다양한 애플리케이션 부하를 처리할 수 있고, ELB가 제공하는 세 가지 로드 밸런서는 모두 애플리케이션의 내결함성에 필요한 고가용성, 자동 확장/축소, 강력한 보안을 갖추고 있습니다.


ELB의 특징

1. IP가 지속적으로 바뀜

  • 지속적으로 IP 주소가 바뀜
  • 따라서 도메인 기반으로 사용해야 함

2. Health Check

  • 직접 트래픽을 발생시켜 인스턴스가 살아있는지 죽어있는지를 체크함
  • InService, OutofService 두 가지 상태로 나뉘어짐

3. 세 가지 종류가 존재함

  • Application Load Balancer
  • Network Load Balancer
  • Classic Load Balancer

Sticky Session?

일반적으로 두 개의 서버로 나뉘어져 있고 클라이언트(사용자)가 나뉘어져 있는 서버와 통신 한다 했을 때,

그리고 서버 1이 클라이언트의 로그인 세션 키를 가지고 있는 경우로 설명드리겠습니다.

 

가장 먼저 클라이언트가 서버 1과 통신하는 경우 서버 1과의 로그인 세션이 성립되어 로그인 성공이 이루어집니다.

하지만 서버가 두 개로 나뉘어져 있기 때문에 어느 서버로 통신이 이루어질 지는 랜덤이어서 서버 2로 통신이 갈 경우 가지고 있는 세션 키가 없어 로그인이 이루어지지 않습니다.

 

서버가 두 개밖에 없기 때문에 두 번 새로고침해서 로그인하면 되지 않느냐? 라고 하실 수도 있는데 만약 서버가 두 개가 아니라 수백개라고 생각해봅시다.

수백번을 로그인을 해야 하니 말이 안되죠?

 

그래서 이것을 해결하기 위해 나온 방법이 'Sticky Session' 입니다.

ELB 서버에 '클라이언트가 인스턴스 1 즉 서버 1과 통신할려 하는구나' 라는 쿠키 값을 하나 만드는것이죠.

 

그럼 다음 트래픽이 왔을 때도 '지금 통신하고자 하는 클라이언트가 아까 그 클라이언트네?? 이 클라이언트는 인스턴스 1과 통신하네??' 라고 기억하는 것이죠.

 

이 기억 또한 Sticky Session의 유지 시간을 설정 할 수 있습니다.

실습으로 넘어가 보겠습니다.


실습

  • 2개의 다른 AZ에 웹 서버 생성하기
  • Application LoadBalancer를 적용해 트래픽이 분산되는지 확인하기
  • Sticky Session 확인하기

 

먼저 ELB를 적용 시킬 인스턴스 2개를 생성합니다.(아파치 서버까지 설치)

 

[AWS]2. EC2 서버 생성

아마존 클라우드 서버 호스팅 | Amazon Web Services Amazon Elastic Compute Cloud(Amazon EC2)는 500개가 넘는 인스턴스, 그리고 최신 프로세서, 스토리지, 네트워킹, 운영 체제 및 구매 모델의 옵션과 함께 워..

jamong1014.tistory.com

(생성하는 방법은 생략하겠습니다.)

중요 : 생성하실 때 서로 다른 AZ로 선택하시길 바랍니다. 

 

이렇게 인스턴스 1은 가용 영역을 C로 인스턴스 2는 가용 영역을 A로 선택하시길 바랍니다.

이렇게 해야 서로 다른 서브넷에서 정상적으로 로드밸런싱(분산)되는 걸 확인 하실 수 있습니다.

 

 

AWS 대시보드에서 로브 밸런싱 메뉴를 들어가줍시다.

 

 

로드 밸런서 생성 - Application Load Balancer 선택

 

 

로드 밸런서 이름 설정 - IP address type은 IPv4로 선택 - 나머진 기본 옵션

 

 

여기서 아까 인스턴스 생성할 때 설정한 가용영역을 로드밸런서에서 맵핑 시켜줘야 합니다.

아까 두 개의 가용영역 a, c를 설정해줬으니 여기서도 a, c 체크 해주시면 됩니다.

 

 

보안 그룹은 대충 80, 22번 포트 인바운드로 허용한 규칙을 적용해주시면 되겠습니다.

 

 

여기서 'Create target group' 이동

 

 

'Instances' 선택

 

 

'Target group name' 설정

 

 

Health Checks 부분은 그냥 냅두셔도 됩니다.

전 명확히 하게 위해 /index.html 로 기입했습니다.

나머지 옵션은 기본 설정

 

이제 Next로 넘어갑니다.

 

 

로드밸런서 그룹을 설정한 두 개 인스턴스를 선택하고 'Include as pending below'를 눌러주세요.

 

 

Targets에 인스턴스 2개가 추가가된 걸 확인하고 'Create target group' 으로 로드밸런서 그룹을 생성해줍시다.

 

 

그리고 다시 로드밸런서 생성 탭으로 돌아와서 'Create load balancer' 으로 로드밸런서를 생성해줍시다.

 

 

로드밸런서 생성된 모습
로드밸런서 대상 그룹 생성된 모습

 

이제 저 DNS를 통해서 로드밸런서를 경유해서 통신 할 수 있습니다.

 

 

인스턴스 1
인스턴스 2

로드밸런서 DNS로 접속한 후 계속 새로고침 해보면 분산되면서 각기 다른 서버에 접속되는걸 확인 할 수 있습니다.

그럼 이제 세션 키 유지를 위한 Sticky Session을 설정해주겠습니다.


Sticky Session 설정

로드 밸런싱 대상 그룹에 들어가서 타겟 선택하고 'Attributes' 의 'Edit' 이동

 

 

'Stickiness' 선택하고 'Stickiness duration' 세션 유지 시간 설정

원하시는 시간대로 설정해주시면 됩니다.

 

전 10초로 설정하였습니다.

그리고 밑에 Save 눌러주시면 됩니다.

 

그럼 이제 아까 새로고침 할 때마다 서버가 바뀌는 것을 Sticky Session을 10초로 설정해서 10초동안은 한 서버로 계속 유지가 될 것입니다.

 

끝!


다음 포스팅은 ELB를 포함한 Auto Scaling Group에 대해 포스팅 해보도록 하겠습니다.

 

 

반응형

댓글