AWS - ELB(로드밸런서)

박현지·2021년 11월 9일
3

AWS

목록 보기
1/1
post-thumbnail

1. ELB란 무엇인가?

ELB는 Elastic Load Balancer는 AWS의 로드 밸런서 서비스 입니다.

로드밸런서의 주요 기능은 서버 부하 분산, 즉 로드밸런싱으로 특정 서버에 부하가 몰리지 않도록 적절히 분산을 시킵니다.

로드밸런서가 사용자의 접근을 적당한 서버로 보내주는 역할을 합니다.

2. ELB의 유형

1) Application Load Balancer(ALB)

Application Layer: 사용자가 UI로 접하는 응용 프로그램과 관련된 계층으로 HTTP, FTP, DHCP, SMTP, DNS등이 있습니다.

  • OSI 7 Layer의 7계층에 해당하는 Application Layer의 특성을 이용하는 로드밸런서
  • 단순 부하분산뿐만 아니라 HTTP의 헤더 정보를 이용해 부하분산을 실시합니다.

2) Network Load Balancer(NLB)

Transport Layer: 송신자와 수신자의 논리적 연결을 담당하는 부분으로, 신뢰성있는 연결을 유지할 수 있도록 도와줍니다. 즉 endpoint(사용자)간의 연결을 생성하고 데이터를 얼마나 보냈고 받았는지, 제대로 받았는 지등을 확인합니다. TCP와 UDP가 대표적입니다.

  • OSI 7 Layer의 4계층에 해당하는 Transport Layer의 특성을 이용하는 로드밸런서
  • TCP와 UDP를 사용하는 요청을 받아들여 부하분산을 실시

3. 로드밸런싱의 기능

NAT(Network Address Translation)

  • 사설 IP주소를 공인 IP주소로 바꾸는 데 사용하는 통신망의 주소 변조기입니다.

Tunneling

  • 인터넷 상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게 합니다.
  • 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있습니다.

DSR(Dynamic Source Protocol)

  • 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP주소가 아닌 클라이언트의 IP주소로 전달해서 네트워크 스위치를 거치지않고 바로 클라이언트를 찾아갑니다.

4. 서버 확장 방식

1) Scale Up

  • 성능이나 용량 증강을 목적으로 하나의 서버에 디스크를 추가하거나 CPU나 메모리를 업그레이드 시키는 것
  • 기존의 하드웨어를 보다 높은 사양으로 업그레이드하는 방식
  • 수직 스케일링(Vertical Scaling)

2) Scale out

  • 기존의 서버와 같은 사양 또는 비슷한 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 향상 시키는 것
  • 여러 대의 서버가 분산처리할 수 있도록 요청을 나누어주는 방식
  • 수평 스케일링(Horizontal Scaling)
  • 서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 로드밸런싱 필수 동반

5. ELB 관련 실습

1) 인스턴스 생성

Ubuntu Server 20.04 LTS (HVM), SSD Volume Type 선택
t2.micro 선택
나머지는 기본 설정 그대로!

2) 인스턴스 연결

해당 인스턴스 마우크 오른쪽 클릭 후 연결 선택 - 다음페이지도 연결 선택


이 화면이 나온다면 연결 성공!

sudo apt update
sudo apt install apache2 php

위의 코드 입력 후 잘 연결되었는지 확인을 위해 해당 인스턴스의 퍼블릭 IP주소를 입력해 접속해봅니다.
Ubuntu Default Page가 나온다면 연결 성공!

sudo vim /var/www/html/index.php

위 코드로 파일을 하나 생성합니다.

<?php
print($_SERVER['SERVER_ADDR']);
?>             

파일(index.php) 안에 위 코드를 입력하면 현재 우리가 실행하고 있는 웹페이지가 어떤 내부 IP를 가지고 있는지를 출력합니다.

해당 인스턴스의 퍼블릭 IP주소/index.php를 입력해서 인스턴스의 프라이빗 IPv4주소가 출력되면 연결 성공!

이 인스턴스 하나로 서비스를 하다가 부족하다고 느끼면 로드밸런서를 웹서버 앞에두고 부하를 분산시킬 수 있습니다.

트래픽들이 들어오게 되면 그 트래픽을 Load Balancer가 모두 받고 각각의 인스턴스로 보내게 됩니다.
서로 같은 속성을 가지고 있는 인스턴스들을 그룹핑하는 Target Group을 만들고 그들을 Load Balancer에 등록해 Target Group을 대상으로 트래픽을 보내주게 됩니다.

3) 대상 그룹 등록

메뉴에서 로드 밸런싱 밑에 대상 그룹 클릭

다음 선택 후 해당 인스턴스를 체크하고 '아래에 보류 중인 것으로 포함'클릭 후 '대상 그룹 생성' 선택하면 해당 인스턴스를 대상 그룹에 등록 완료!

4) 대상 그룹 로드밸런서에 연결

메뉴에서 로드 밸런싱 밑에 대상 로드밸런서 클릭
Application Load Balancer 생성

  1. 네트워크 매핑 모두 선택
  2. 보안 그룹 - 새 보안 그룹 생성 후 선택
  3. 리스너 및 라우팅 - HTTP / 81(ELB를 위한 방화벽) / TG 선택
  4. 로드 밸런서 생성

해당 로드 밸런서의 DNS이름:81로 접속하면 Ubuntu Default Page가 나옵니다. DNS이름:81/index.php를 입력한 후 인스턴스의 프라이빗 IPv4주소가 출력되면 ELB에 인스턴스 연결 완료!

-> 현재는 하나의 인스턴스만 연결된 상태 - 오히려 속도가 느려진다.

5) 복수 개의 인스턴스 연결


기존 인스턴스의 이미지 생성(이름만 적고 생성 누르기)

메뉴 - 이미지 - AMI를 선택하면 방금 생성한 이미지를 볼 수 있습니다.
해당 이미지 마우스 오른쪽 클릭 후 시작하기 클릭 후 아까 처음 인스턴스 생성과 똑같은 조건의 인스턴스를 생성해줍니다.

로드밸런스에 연결되어있는 대상 그룹 TG에 해당 인스턴스를 추가해줍니다.

대상 등록을 선택해 방금 생성한 인스턴스를 등록합니다.
=> 인스턴스 2개가 TG라는 그룹을 통해서 ELB에 연결됩니다.

6) ELB주소로 접속 후 확인

해당 로드 밸런서의 DNS이름:81/index.php로 접속후 새로고침을 하면 로드밸런서가 들어오는 트래픽을 연결되어 있는 인스턴스들에게 분산하고 있는 것을 볼 수 있습니다.

참고자료
https://nesoy.github.io/articles/2018-06/Load-Balancer
https://junghyungil.tistory.com/151
https://www.youtube.com/watch?v=s9FHdj6jd_U&t=790s

profile
꾸준히 기록하는 딩딩의 개발일지

0개의 댓글