
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 BalancerNetwork Load BalancerClassic Load BalancerGateway 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을 한다.