AWS 유튜브 강의를 참고하였습니다.
ELB(Elastic Load Balancing) : 여러대의 작은 컴퓨터가 힘을 합쳐서 트래픽을 감당할 수 있게 해주는 기술
로드밸런서(ELB) : 다수의 인스턴스들을 한 곳에 묶어서 트래픽을 분산해주는 서비스
Load : 부하
Balancer : 분배
✏️ ELB가 없을 때는?
Auto Scaling group
에 있는 인스턴스의 정보들을 알아야 접근할 수 있다.
- 클라이언트 입장에서는 인스턴스 ip 주소를 알아야 접근할 수 있다.
- 인스턴스가 삭제되었다가 새로 삽입될 때, ip 주소를 추가하거나 별도로 조치 취하지 않으면 접근할 수 없다.
- 인스턴스가 굉장히 많을 때, 상당히 관리하기 힘들다.
✏️ ELB가 있을 때는?
- 유저 입장에서는 하나의 주소로 접근하면 로드밸런서가 인스턴스를 맞추어 준다.
- 새로운 인스턴스가 로드밸런서 등록되면 부하에 분산시켜준다.
🔔 그래서 Elastic Load Balancing이 무엇인가?
Elastic Load Balancing
은 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수와 같은 여러 대상에 자동으로 분산시킨다.Elastic Load Balancing
은 단일 가용 영역 또는 여러 가용 영역에서 다양한 애플리케이션 부하를 처리할 수 있다.Elastic Load Balancing
이 제공하는 세 가지 로드 밸런서는 모두 애플리케이션의 내결함성에 필요한 고가용성, 자동 확장/축소, 강력한 보안을 갖추고 있다.
📝 ELB 특징
- 다수의 서비스에 트래픽을 분산 시켜주는 서비스
- Health Check : 직접 트래픽을 발생시켜 Instance가 살아있는지 체크한다.
Autoscaling
과 연동 가능하다.- 여러 가용영역에 분산 가능하다.
- 지속적으로 IP 주소가 바뀌며 IP 고정 불가능 : 항상 도메인 기반으로 사용한다.
- 4가지 종류가 있다.
Application Load Balancer
Network Load Balancer
Classic Load Balancer
Gateway Load Balancer
✔️ ELB의 4가지 종류
(1) Application Load Balancer
(2) Network Load Balancer
Elastic IP
할당 가능
(3) Classic Load Balancer
(4) Gateway Load Balancer
대상 그룹 : ALB가 라우팅 할 대상의 집합
- 구성 : 3 + 1가지 종류
- Instance
- IP (private O, public X)
- Lambda (서버리스 서비스 : 간단하게 코드 실행시킴)
- ALB (다른 ALB와 연결) (+1)
- 프로토콜(HTTP, HTTPS, gRPC 등)
- 기타설정
- 트래픽 분산 알고리즘
- 고정세션 등
✔️ 대상 그룹 종류
대상 그룹 : 분산할 때 어디로 분산할 것인지 모은 그룹
먼저 User가 ALB를 통해 통신을 한다. (ALB를 통해 분산할 수 있다.)
Auto Scaling
으로 등록할 시, 장애 내부성 등을 확보할 수 있다.
✔️ 아키텍처
Auto Scaling group
을 통해 EC2를 분산시켜놓았다.
고급 세부 정보에 추가
사용자 데이터에 추가 : EC2 인스턴스가 올라갈 때 자동으로 화면으로 띄우겠다.
#!/bin/bash
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
yum install httpd -y
echo ""$INSTANCE_ID"" >> /var/www/html/index.html
service httpd start
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
INSTANCE : 각각의 인스턴스 id (meta 정보)를 가져올 수 있다.
yum install httpd -y
: 웹 서버 설치
echo ""$INSTANCE_ID"" >> /var/www/html/index.html
: index.html
에 받아온 인스턴스 id를 는다.
service httpd start
: 웹서버를 실행시킨다.
✔️ AutoScaling 수정
➡️ 새로 올린 템플릿을 적용하기 위해 편집하였다.
➡️ Auto Scaling
만 적용했을 때, 인스턴스는 빈 인스턴스만 등록되었다.
➡️ ELB
를 적용한 후, Auto Scaling
을 적용했기 때문에, (사용자 데이터에 추가한 것) 미리 정해진 스크립트을 실행한 버전에 올라가게 된다. (접속했을 때 볼 수 있게 만든 것이다.)
웹에서 주소 입력시 인스턴스 ID가 나온다.
(2-1) 대상 그룹 생성
먼저 대상 그룹을 생성한다.
타겟 그룹 이름만 설정한다.
이용할 수 있는 인스턴스들을 검토하기 위해 포함한다.
대상 그룹이 생성되었다.
(2-2) 로드 밸런서 생성
Application Load Balancer 선택
리스너 및 라우팅
MyWebTargetGroup
으로 연결시키겠다. (조건에 따라 연결시키겠다.)
생성 완료!
DNS 이름을 웹 주소에 입력할 시
f5
를 실행할 때마다, 다른 결과가 출력된다.
(2-3) 로드 밸런서를 Auto Scaling에 붙여보기
AutoScaling을 통해 대상 그룹에 들어가게 된다.
이제부터 생성되는 MyASG(Auto Scaling
)에서 생성되는 인스턴스들은 위에서 생성한 대상 그룹(MyWebTargetGroup
)에 들어가게 된다.
대상 그룹 들어갔다는 의미 : 지정한 로드 밸런서가 트래픽을 분산하는 대상이 된다.
➡️ Auto Scaling
에서 생성되는 인스턴스들은 대상 그룹에 들어가게 되고, 대상 그룹에 들어오는 애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수와 같은 여러 대상에 자동으로 분산시킨다.
✔️ 인스턴스 용량 변경 테스트
Auto Scaling에서 용량을 3으로 변경하였을 때,
(2-4) AutoScaling에서는 정상적이지만, ELB에서는 비정상적일 때
- EC2 올라갔지만, 웹 서버는 죽게 되었을 때
- 로드 밸런서 입장에서는 웹 서버 죽으면 보여줄께 없어 비정상적이다.
AutoScaling
에서는 웹 서버 상태와는 관계가 없고, EC2가 정상적으로 올라가면 된다. (올라가다 → 실행되다)
✔️ 테스트 하기 위해 인스턴스 하나 정지시키기
인스턴스 연결은 한 후,
sudo -s
service httpd stop
이럴 경우 외부로 아무것도 보여주지 않겠다!
로드 밸런서가 트래픽 분산해주기 위해 요청을 했지만 인스턴스가 아무런 트래픽을 주지 않았다. 그래서 어떤 걸 해야할지 모를 때 502에러 발생
이럴 경우, 서버는 올라가있지만 웹 서버가 올라가 있지 않으므로 트래픽도 주지 못하므로 재부팅을 시켜야 한다.
Auto Scaling
이 이를 해준다.
상태 확인에서 편집
ELB
선택
EC2
와 ELB
상태 확인을 공유한다. (볼 수 있다.)ELB
가 알아서 상태 확인한 후, 오류가 발생한 인스턴스는 멈추거나 없앤다. (없애고 새로운 인스턴스 생성한다.)➡️ 적용시, Auto Scaling 그룹
에서 인스턴스 활동을 자동으로 체크하고 필요없는 것들은 없애준다. (AutoScaling
특성상 인스턴스를 없애면, 인스턴스 최저 개수에 맞추어 인스턴스들을 다시 만들어 준다.)
💡 참고
✔️ ELB를 생성하기 전
이전에 인스턴스 하나 생성한다.
생성 후, Ubuntu에서sudo apt update
,sudo apt install apache2 php
을 한다.