AWS를 이용하여 실제 서비스에 적용한다고 할 때,

필수적이라고 할 수 있는 부분 중 하나가,

load를 분산해주는 Load Balancer 인데요.

 

트래픽이 늘어나거나, 줄어들었을 때,

그에 맞추어서 Instance의 수를 늘린다고 해결되는 것이 아니라,

유저의 트래픽을 늘어난 Instance에 분산시켜 주어야 하기 때문인데요.

오늘은 부하분산을(Load Balancing) 해주는, 

Elastic Load Balancer에 대해서 정리 해 보겠습니다.

 

 

1. ELB 생성

 

먼저 Services > EC2에서, Load Balancing> Load Balancers를 선택해 줍니다.

우측에 나오는 화면에서, 파란색의 create Load Balancer버튼을 눌러서 생성을 시작합니다.

 

 

그럼 아래와 같이 Load Balancer 의 종류를 선택하는 화면이 나오는데요.

HTTP와 HTTPS 트래픽에 대해서 로드 밸런싱을 할 수 있는 Application Load

Application Load Balancer를 선택하도록 하겠습니다.

 

참고로, Application Load Balancer의 Free tier사용시간은 750시간이구요.

15LCU의 사용제한이 있습니다.

 

 

누르면 아래와 같은 화면을 볼 수 있는데요.

Load Balancer -> EC2 서버들로 연결될 수 있도록 설정해 줍니다.

Name에는 임의의 이름을 설정해 주면 되구요.

여기서는 이름 이외에는 특별히 만질것은 별로 없는데요.

Listeneres부분에서도 현재는 HTTP의 port80번으로 세팅이 되어있습니다.
(여기서는 인증서가 필요한, HTTPS를 사용하지 않고 있으므로, 그냥 80번 포트 그대로 사용하면 됩니다.

물론 추후에 HTTPS포트를 따로 열어주어야 겠지요.)

 

아래로 내려가보면, 가용영역에 대한 선택이 있는데요.

일단은 EC2서버가 있는 존을 선택해 주었습니다.

EC2서버의 가용영역(Availability Zones)에 관한 정보는

EC2의 좌측 메뉴에서, Instances > Instances를 선택후 해당하는 EC2서버를 선택 후,

아래에 나오는 Description정보를 보면 우측 중간정도에 availability zone에 대한 정보가 나옵니다.

이에 따라서, 저는 us-east-2b를 선택해 주었고, 나머지 하나는 us-east-2a를 설정해 주었습니다.

 

 

 

이제 Next를 누르면 다음 화면이 나오는데요.

경고화면은, HTTPS를 사용하지 않아서 생기는 것으로,

위에서 HTTP를 생성하면, SSL인증서를 어떤 것을 사용할 것인지 등을 설정해 줍니다.
여기서는 HTTPS를 사용하지 않으므로, Next버튼을 눌러서 다음으로 진행하겠습니다.

 

다음으로는 Security Groups설정이 나옵니다.

EC2도 해 보시고, RDS해 보신분들은 아시겠지만,

항상 Security Groups를 새로 생성해서 Inbound Outbound에서 접속하는 주소나 포트등에 대한 보안 설정을 해 주거나,

기존의 보안설정을 다시 사용하고자 한다면 그렇게 해 주면 됩니다.

여기서는 ELB를 위한 보안 그룹을 새로 설정해서 사용하도록 하겠습니다.

 

 

이제 Routing을 설정하는 화면이 나오는데요.

먼저 Routing타겟의 정해주는 Target Group의 Name을 설정해 주고요.

Type은 EC2인스턴스로 해 줄 것이므로, 그대로 Instance를 사용해 줍니다.

내부 EC2와는 VPC망안에 같이 존재하여서 비교적 안전하므로,

따로 HTTPS를 사용할 이유가 없어서 HTTP로 EC2 Instace들과 연결하도록 합니다.

 

 

다음 화면에서는 아래 이미지와 같이,

서버가 건강한지를 체크하는지 Health Check에 관한 설정 화면이 나오는데요.

디폴트는 "/"으로 되어있는데요. /status 같은 패스를 쓸 수도 있겠지요.

VPC망 내부에서만 접근하긴 하겠지만,

테스트 하는 라우트가 유저들의 라우트와 중첩되는 것 보다는  /status처럼 분리되는 것이 좋을테니까요.

대신 해당 라우터에 반응할 수 있도록, 해당 EC2서버에 간단한 처리가 되어 있어야 겠지요.

 

 

 

위의 이미지에서 Advanced Health Check Setting을 클릭하면 드롭다운이 나오는데요.

Healthy Threashold는, 단어자체에서 느껴지는 개념과는 조금 다르게 사용되는데요.

Unhealthy로 판정난 서버가 몇번 연속으로 정상으로(healthy)로 나오면 정상적인 Instance로 볼 것인지를 정하는 것 입니다.

5번이 기본값으로 되어있습니다. 한번 unhealthy로 되면 이정도는 연속으로 OK가 나와야 연결해서 사용하겠다는 것이지요.

Unhealthy threshold는 기본값이 2인데요. 2번 연속으로 unhealty의 조건을 충족하면, unhealthy로 판정하겠다는 것 입니다.

이 서버에는 Traffic을 보내지 않겠지요.

 

Timeout은 몇 초내에 응답을 하지 않으면 비정상으로 판단한 다는 것을 설정하는 값 이구요.
Interval은 HealthCheck를 하는 시간 간격으로, 30초가 기본값으로 되어있습니다.

 

이제 ELB에 붙여서 Load Balancing의 대상이 될 Instance 들을 선택해서 추가해 주면 되는데요.

보통 2개이상의 서버를 붙여서 사용하겠지요.

(아래에서는 ELB테스트용이어서 하나만 선택되어 있습니다)

선택하고 나서 위에 "Add to registered"를 선택해 주면 됩니다.

 

 

이제 마지막으로 Review를 거친 후에 Create해 주기만 하면 됩니다.

 

 

Create를 해 주고 나면 ELB가 생성됩니다.

이제 접속할 point는 EC2 개별 주소가 아니라,

ELB의 주소로 해 주면 되겠는데요.

Load Balancer하단의 Description 중 DNS name을 참조해서 접속하도록 하면 됩니다.

 

그리고  ELB에 등록한 서버를 변경하려면,

아래와 같이 해 주면 됩니다.

 

2. ELB 에 Instance 추가

이제 생성된 Load Balancer에 Instance를 추가해볼 텐데요.

EC2의 좌측메뉴에서 Load Balancing > Target Groups로 들어가 줍니다.

그럼 아래와 같이 이전에 만들었던 Target Group의 리스트가 나오는데요.

하단의 Targets탭에서 Edit버튼을 눌러서, 추가하거나 삭제할 수 있습니다.

 

 

 

3. ELB에 추가할 Instance의 Image생성하기

 

여기서 기존 EC2를 분산시키는 것에 대해서 생각해 보면,

분산될 EC2의 상태가 같아야 하는데, 매번 생성하고 설정하는 것은 매우 비효율적입니다.

그래서, 생성될 EC2서버는 Instance의 Image를 떠서,

그 인스턴스를 추가하는 방식으로 해주어야 하는데요.

 

Services >EC2 를 선택해주고, 원하는 EC2 Instance를 선택후, 우측마우스버튼을 누르고,

아래 이미지와 같이 Image > Create Image를 선택해주시면 됩니다.

 

 

아래와 같이 name과 description을 넣어주고, Create Image버튼을 눌러주기만 하면 생성이 되는데요.

 

 

 

좌측 메뉴에서 Images > Amis 를 선택후,

추가로 생성된 Image를 선택해서 Launch를 눌러주면 됩니다.

 

 

이렇게 Launch된 EC2 Instance들을 Load Balancer에 추가해주고,

이 Instance들을 Load Balancer가 Health Check를 통해서,

부하를 분산해 줍니다.

 

 

4. ELB에 추가할 때, 주의할 점들

 

첫째로, LoadBalancer가 HealthCheck에 필요로 하는,

pingPath에 적어주었던 패스 혹은 파일이 존재해야 한다는점을 잊지 말아야 합니다.

예를 들면, /index.html을 pingpath에 넣었다면,

ip주소/index.html로 접근해서 200oK를 받을 수 있어야, 

health check가 정상적으로 가능하다는 것입니다.

 

두번째로는, DataBase를 사용할 경우인데요.

ELB에 등록되어있는 Instance들이 DataBase서버의 같은 데이터를 바라보도록 설정해야 한다는 점입니다.

서로 다른 DataBase를 바라본다면, 

DataBase가 사용자들마다 달라지는 현상이 발생하기 때문입니다.

 

728x90

+ Recent posts