#032. AWS ELB(로드밸런서): 서버작업 부하분산

목차

1. ELB (Elastic LoadBalancer)란?

2. CLB (Classic LoadBalancer)란? + 실습

3. NLB (Network LoadBalancer)란? + 실습

4. ALB (Application LoadBalancer)란? + 실습

5. 그러면 언제 무엇을 써야할까?


1. ELB (Elastic LoadBalancer)란?

 

Load Balancer란 단어 그대로 Load(부하)를 적절하게 분배해서 균형을 맞춰주는(Balancing) 서비스이다. 한 대의 서버에 부하가 어느 수준이상 가해지면 서버가 다운될 수 있다. 이 때 로드 밸런서가 다른 인스턴스로 부하를 적절하게 나눠줘 시스템 서버가 죽지 않도록 관리해준다.

 

AWS의 Elastic Load Balancer는 아래와 같은 특징이 있다.

- 트래픽 분산 : load balancer 기능

- 자동 확장 : AutoScaling이 알아서 된다

$ sudo node app.js- 인스턴스 상태를 감지하고 있다가 오류가 있는 인스턴스에는 부하를 나누지 않는다.

 

* 아래에 나오는 실습을 위해 다음과 같은 설정이 필요하다.
- EC2 두 대 만들기. 이 때 이 둘의 subnet을 서로 다르게 설정한다.

- 각 인스턴스에 다음과 같은 설정을 한다(Ubuntu 기준)
$ sudo apt update && sudo apt install -y npm => apt(advanced packaging tool) 을 깔고 업데이트한다
$ sudo npm install -g http os => http와 os를 설치한다
$ vim app.js => app.js에 아래 내용을 작성한다, 아래 내용은 80번 포트를 열고 Hello World를 출력한다.


const http = require('http');
const hostname = '0.0.0.0';
const port = 80;
var os = require("os");

var networkInterfaces = os.networkInterfaces();
var ip = networkInterfaces["eth0"][0].address;
console.log(ip);

const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    var _url = req.url;
    console.log(_url);
    if (_url == '/hello')
res.write('Hello World !\n');

    res.write(ip);
    res.end('\n');
 
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
})

$ sudo node app.js => app.js 를 실행한다.

 

 

2. CLB (Classic LoadBalancer)란? + 실습

클래식 로드 밸런서는 이미 EC2에서 프로그램이 실행되고 있는 경우 이 들 사이에 로드 밸런싱을 하려는 경우에 사용한다.

 

[생성]

- EC2 의 왼쪽 바를 보면 로드밸런싱 카테고리가 있다. 여기에서 로드밸런서를 선택하고 생성하기를 한다.

- 로드밸런서 생성 페이지 가장 하단에 토글(삼각형)을 누르면 Classic Load Balancer-previous generation을 누른다.

- Create를 누른다

 

[정의, 보안그룹, 보안설정 구성]

- 이름은 CLB로 정하고 LoadBalaner 프로토콜은 HTTP 80번포트만 열고 넘어간다(기본으로 설정되어있다)

- 보안 그룹은 인스턴스를 만든 보안 그룹으로 설정한다. 보안 설정을 ssl 또는 https로 하라는 안내가 나오는데 ELB를 실습하는 것이므로 이 부분은 넘어간다

[상태검사 구성]

ping을 / (landing page)로 설정한다

[EC2 인스턴스 추가]

[ELB의 상태검사]

app.js를 실행하면(서버 구동) 그림과 같이 30초마다 한번씩 인스턴스의 상태를 검사한다.

 

[ELB 실행 확인]

ELB 접속 주소를 이용해 curl로 접속을 해보면 다음과 같이 접속 부하를 두 인스턴스에 고르게 나누는 것을 확인할 수 있다. 이 때 하나의 컴퓨터를 컴퓨터를 다운시켜보면 하나의 EC2로만 접속되 것을 확인할 수 있다.

 

3. NLB (Network LoadBalancer)란? + 실습

Network LoadBalancer는 TCP, UDP 트래픽을 대상으로 한다. 

 

[NLB] 기본설정

이름은 NLB로 설정하고

기존 VPC를 선택하고 subnet 네 가지를 모두 선택한다.

[라우팅 설정]

 

자세한 설정을 위해 Create target group을 선택한다

EC2 Instance를 대상으로 하기 때문에 target type을 Instance로 설정한다. 이름입력하고 TCP 80 포트를 대상으로 한다.

여기에서 health check를 설정할 수 있다.

[target Instace 선택]

아직 target group setting 중이다. Next를 누르면 선택할 인스턴스 목록이 나온다. 미리 준비한 인스턴스 두 개를 선택한다. 80번 포트를 열어두었으므로 Ports for the selected instances는 80으로 그대로 둔다.  Create target group을 한다.

 

다시 로드밸런서 설정으로 돌아와서 TG를 설정해준다.

[로드밸런싱 확인]

NLB가 생성된 것을 확인한다. DNS를 확인하고 로컬컴퓨터(자기 컴퓨터)의 실행창(bash.exe등)을 실행한다.

 

밸런싱하는 것을 확인하는 방법은 CLB와 동일하다.

 

 

 

 

 

4. ALB (Application LoadBalancer)란? + 실습

 

[ALB]는 NLB와 설정이 거의 비슷하다. 다만 HTTP 프로토콜을 대상으로 밸런싱(부하나누기) 하기 때문에 이 프로토콜을 대상으로 하는 Target Group을 새로 만들어야한다.

로드밸런싱 작동 확인은 위 CLB와 동일하니까 생략한다.

 

 

5. 그러면 언제 무엇을 써야할까?

 

정말 실무에서 사용하기 위해서는 각각이 어디에 왜 사용되는 지 정확하게 알아야한다.

우선 CLB는 이전 버전 load balancer로 네트워크 레이어 4,7 둘다 지원한다. 따라서 TCP, HTTP, HTTPS, SSL을 모두 지원한다는 의미이다. 아래의 그림을 보면 layer4 가 전송계층(Transport Layer)로 TCP, UDP를 확인, 전송하는 계층이고, layer7 이 application layer라는 것을 확인할 수 있다. 위의 실습에서 NLB와 ALB를 나눠 사용했는데 이 두 가지를 모두 짬뽕해 놓은 LB라고 생각할 수 있다. 그러나 여러 계층의 전송을 모두 한 번에 다루는 것은 보안 과 자원 측면에서 모두 낭비라고 할 수 있다.

https://shlee0882.tistory.com/110

 

[NLB 가 밸런싱하는 내용]

Layer 4 는 IP주소와 포트번호를 보고 스위칭한다. TCP, UDP 프로토콜의 헤더를 보고 해당지점으로 패킷을 전송한다. 예를 들면 http:// 라면 TCP/80으로 https://는 TCP/443 으로 보내는 것이다. ftp 또한 이곳에서 스위칭된다. (참고로 이 level에서 RoundRobin 알고리즘을 사용해 연결된 서버에 순차적으로 접속하도록 한다.) (라운드로빈 알고리즘 설명과 PS 문제 링크)

 

 

[ALB가 밸런싱하는 내용]

 

ALB는 layer 7에서 작동하는 밸런싱으로 L4가 패킷의 내용을 열어보지 않고 스위칭하는 것에 비교해 HTTP/HTTPS 레벨에서 헤더를 보고 적절한 서버로 패킷을 보낸다. 

 

따라서 내가 Balancing하는 서비스의 대상이 어떤 레이어인지 확인하고 선택하면 된다.

 

 


작성하면서 참고한 글

https://pearlluck.tistory.com/114

 

[ELB] ELB종류 (CLB vs ALB vs NLB) + L4 /L7 동작방식

ELB 종류 1. CLB (Classic Load Balancer) 가장 오래된 로드밸런서, 잘 안쓰는 추세 Layer4, Layer7 둘다 지원 EC2-Classic 대상으로 지원 TCP/HTTP/HTTPS/SSL 지원 X-Forwarded 헤더 지원 2. ALB (Application..

pearlluck.tistory.com

 

참고할만한 글

https://pakss328.medium.com/%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%84%9C%EB%9E%80-l4-l7-501fd904cf05

 

로드밸런서란?(L4, L7)

서버 부하 분산을 위해 로드밸런서를 이용한다. 근래들어 L7을 많이 이용하고 이전에 많이 사용하던 장치는 L4였다. 추상적으로만 알고 있던 L7과 L4에 대해 정리를 해보았다.

pakss328.medium.com

https://sarc.io/index.php/miscellaneous/758-osi-7-l4-l7

 

OSI 7 레이어(계층), 그리고 L4 L7 스위치에 대한 고찰.....

[{"id":"16","listid":"1","parentid":"0","videosource":"youtube","videoid":"KiwjxNKXfxY","imageurl":"https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/default.jpg,120,90;https:\/\/i.ytimg.com\/vi\/KiwjxNKXfxY\/mqdefault.jpg,320,180;https:\/\/i.ytimg.com\/vi\/KiwjxNKX

sarc.io

https://jins-dev.tistory.com/entry/L4-L7-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1Load-Balancing-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

L4 / L7 로드밸런싱(Load Balancing) 에 대하여

 로드밸런싱(Load Balancing) 이란 Software 용어로 부하 분산의 의미를 갖고 있다. 말그대로 동작에 있어서 부하가 심해져 병목현상이 생기는 것을 방지하기 위해 사용한다. 이는 컴퓨팅 리소스, 네트

jins-dev.tistory.com

 

  Comments,     Trackbacks