정환타 개발노트

[AWS 웹서비스 구축] 7. ELB 생성(Elastic Load Balancer) 본문

Dev-AWS

[AWS 웹서비스 구축] 7. ELB 생성(Elastic Load Balancer)

JungHwanTa 2020. 1. 19. 19:55

VPC 구성, 웹서버, DB서버 구축이 끝났다면 ELB를 생성할 것 이다.

 

Load Balancing

로드밸린싱 기술은, 네트워크 트래픽을 하나 이상의 서버 혹은 장비로 분산하기 위해 사용되는 기술이다.

로드밸런싱은 온프레미스 환경에서부터 사용해왔으며, 로드밸런싱을 수행하는 소프트웨어나 하드웨어를 로드밸런서(Load Balancer)라고한다.

 

로드밸런싱을 통해서 외부에서 발생하는 많은 인터넷 트래픽을 여러 웹 서버나 장비로 부하를 분산처리할 수 있다.

핵심은 분산처리 기술이다.

 

우리의 웹서버로 많은 트래픽이 발생한다면 기본적으로 구성된 서버는 트래픽이 많아 질 수록 부하를 감당하기 힘들 것이다.

 

일반적으로 트래픽 증가를 처리하는 방법은 두가지이다.

 

첫번째는 Scale-Up으로 CPU, 메모리, 디스크 등의 기능을 업그레이드 하는것이다.

이 방식은 필요 성능이 늘어날수록 비용이 기하 급수적으로 늘어난다는 단점이 있다.

또한, 하나의 서버에서 서비스를 제공한다면 서버에 장애가 발생하면 웹 서비스 가용성에 문제가 생길 수 있다.

 

두번째는 Scale-Out으로 노드 여러개를 하나의 Cluster로 구성하는 방식이다.

Cluster로 구성을 한다면 하나의 노드에 장애가 발생하더라도 서비스는 중단되지 않으므로 가용성을 높힐 수 있다.

 

일반적으로 로드 밸런싱은 Scale-Out방식에 사용된다.

 

로드밸런싱의 방식

로드 밸런싱을 하는 방식으로는 

Session 연결을 순차적으로 맺어주는 - Round Robin

Hash 알고리즘을 통해 Client가 특정 Server로 연결 된 이후 동일 서버로만 연결되는 구조인 - Hash

Session 수를 고려하여 가장 작은 Session을 보유한 서버로 연결해주는  - Least Connection

서버간의 Resource와 Connection의 차이가 있는 환경에서 사용되는, 응답시간이 가장 빠른 서버로 Session을 맺어주는 - Response Time

방식이 있다.

 

Amazon Elastic Load Balancer

ELB는 단일 가용영역 혹은 여러 가용영역에서 EC2 인스턴스를 대상으로 애플리케이션 및 네트워크 트래픽을 자동으로 분산시킬 수 있다.

ELB에서는 Application Load Balancer, Network Load Balancer, Classic Load Balancer 세가지로 유형을 선택할 수 있다

 

1. Application Load Balancer

ALB는 최신 애플리케이션 서비스에 적합한 HTTP, HTTPS와 같은 고급 로드 밸런싱 서비스에 적합하다.

SSL/TLS 암호화 및 프로토콜을 사용하여 보안성을 보장한다. 

 

**SSL(Secure Socket Layer)/TLS(Tranport Layer Security) 암호화는 아래의 블로그에서 확인할 수 있다.

(전송 계층을 암호화하는 방식으로, HTTP뿐만 아니라 다른 계층 프로토콜도 상관없이 사용할 수 있는 장점이 있다.)

https://soul0.tistory.com/510

 

2. Network Load Balancer

NLB는 TCP 트래픽의 로드밸런싱 서비스에 적합하다. 

짧은 지연시간과 초당 수백만 개의 요청 처리가 가능하며, 가용 영역당 1개의 정적주소를 사용할 때 최적화되어있다.

 

3. Classic Load Balancer

CLB는 EC2-Classic 네트워크 내에 구축된 애플리케이션을 대상으로 제공되는 서비스다.

우리의 구조에서는 CLB가 가장 적합하다고 말할 수 있다.

 

세가지 Load Balancer의 차이

 

ELB의 주요 특징

1. 상태 확인 서비스(Health Check)

ELB는 ELB에 연결된 인스턴스의 연결상태를 수시로 확인하여 인스턴스의 OS와 애플리케이션의 문제로 인한 연결 장애와 서비스가능 여부를 지속적으로 수행한다. Health Check가 실패하면 해당 서비스로 트래픽을 전달하지 않는다.

 

2. Sticky Session

트래픽 부하 분산 방식으로 기본적으로 Round Robin을 사용한다. 

이 경우에 한번 연결된 Session은 다음 연결시 같은 인스턴스로 연결되지 않기에 Session을 유지할 수 없다.

그러나 Sticky Session을 사용하면 처음 연결된 Client에 HTTP기반의 쿠키 값을 생성하여 다음번 요청에도 처음 접속한 서버로 연결해준다.

따라서 세선유지가 필요한 백오피스 웹 사이트 등에서 사이트 로그인 및 인증정보 유지가 필요할 때 사용된다.

 

3. 고가용성 구성

ELB는 단일 가용영역 혹은 여러 가용영역에 걸처 트래픽을 자동으로 분산할 수 있다. 

또한, AWS의 다른서비스와 연계를 통해서 가용성 서비스를 제공할 수 있다.(Route53)

 

4. SSL Termination 및 보안 기능

웹사이트에 SSL 인증서를 적용하여 암호화 통신을 하기 위해서는 웹 서버에 별도의 공인인증서를 구매하여 적용하여야 한다.

ELB에서 공인인증서 또는 무료로 발급 받을 수 있는 사설 인증서를 등록하여 암호화 통신을 할 수 있는 서비스를 제공할 수 있다.

 

 

ELB 생성

** 먼저 ELB를 사용하기에 적합한 조건을 만들기 위해 웹서버를 테스트 한다면 새로운 Public 서브넷을 생성해 새로운 EC2 인스턴스를 생성해 기존의 웹서버와 동일한 웹서버를 실행한다.

(새로운 Public 서브넷을 생성하는 방법은 하단의 링크를 참고해주시면 됩니다.)

2020/01/16 - [Dev-AWS] - [AWS 웹서비스 구축] 1. 네트워크 구축(VPC, Subnet, Route Table, IGW)

 

 

1. [서비스] -> [EC2] -> [로드밸런서]에서  [로드밸런서 생성]을 통해 로드밸런서를 생성한다.

유형은 Classic Load Balancer를 선택한다.

 

 

2. 로드밸런서의 이름을 설정하고 이전에 생성한 VPC 서브넷을 선택한다.(public 서브넷 2개)

추가적으로 리스너는 default 80포트와 추가적으로 프로젝트에 8080포트를 사용하기에 추가를 해주었다.

AWS에서는 서브넷을 2개 이상 선택하는 것을 권장한다.

 

3. [보안 그룹 할당]은 새로운 보안그룹을 생성해서 이전의 프로토콜과 동일하게 적용해준다.

 

 

4. [상태검사 구성]에서는 ec2의 웹서버의 포트와 인텍스 경로를 맞추어 설정하고 다음으로 넘어간다. 

(상태검사 구성이 위의 ELB의 특징 중 하나인 Health Check와 동일하다.)

 

 

5. 연결된 인스턴스를 체크하고 다음으로 넘어간다. (위에서 추가적으로 생성한 동일한 웹서버가 있는 EC2 인스턴스를 2개이상 선택한다.)

(밑의 교차 영역 로드 밸런싱은 다른 가용 영역으로도 트래픽을 분산시키는 것을 말합니다.)

6. [태그 추가]에서는 ELB의 태그로 이름을 지정해주었다.

 

7. 설정 값을 확인하고 [생성] 버튼을 눌러 생성한다.

정상적으로 생성이 된다면 하단의 상태가 InService가 상태가 될 것이고, 바로 하단의 정상 상태가 '예'로 뜰 것이다.

(필자는 하나의 서버에서만 웹서버를 가동중이기에 다른 인스턴스는 OutOfService 상태이고 정상상태는 '아니요'이다.)

 

 

 

이렇게 ELB를 생성한다면 웹서버로 들어오는 트래픽을 ELB가 관리해주며 부하 분산처리를 서버의 상황에 맞게 해줄 수 있다.

다음에는 Auto Scaling을 적용하여 부하분산에 관하여 조금 더 안전하게 대비하는 방법을 알아보겠다.

 

Comments