-
[AWS] 로드밸런싱 - ALB를 통한 로드밸런싱AWS 2023. 1. 12. 18:04
로드밸런싱(Elastic Load Balancing)
- 서버에 가해지는 부하(로드)를, 분산(밸런싱)해주는 기술 또는 장치
- 클라이언트와 서버 중간에 위치
ex. 서버 한 곳(인스턴스 A)에 트래픽이 몰리는 상황이 발생할 때, 이를 막기위해 여러 대의 서버(인스턴스 B, C)로 트래픽 분산
- 종류 : ALB, NLB, CLB
로드 밸런서는 크게 자신이 서비스하는 대상을 정의하는 1. 리스너 와, 부하 분산 대상을 정의하는 2. 대상 그룹으로 이루어져있다.
1. 리스너
- 프로토콜 및 포트를 사용하여 연결 요청을 확인하는 프로세스
- 로드 밸런서에서 서비스하고자 하는 프로토콜과 포트를 지정하는 규칙(Rule)을 생성
2. 대상 그룹
- 하나 이상의 대상에 대하여 라우팅하여 부하 분산을 하는데 사용
- 대상 그룹에 속한 대상에 대해 주기적으로 확인하는 Keepalive 프로세스를 통해 상태 확인을 수행함
- 정상적인 상태의 대상에게만 데이터 전달
[실습 목표]
ELB의 3가지 유형의 로드 밸런싱 중에, ALB와 NLB를 생성하여
부하 분산을 통한 고가용성 환경을 구성하고, 각 로드 밸런서의 차이와 통신 과정을 살펴보자
1. 기본환경
CloudFormation으로 위 아키텍처 구성
(나는 구글 드라이브 - 로드밸런싱 - ALB 폴더에 저장해놓음)
ELB-EC2-1와 ELB-EC2-2 인스턴스에는 HTTP와 SNMP 서비스를 설정해놓았다.
2. ALB(Application Load Balancer) 생성
ALB란,HTTP, HTTPS와 같이 웹 어플리케이션에 대한 분산 처리를 제공하는 로드 밸런서
[#1. ALB 생성]
EC2 - 로드밸런서 - Application Load Balancer 클릭
로드 밸런서 이름 : 원하는 이름으로 지정
Scheme : Internet-facing
IP address type : IPv4
VPC : ELB-VPC
Mappings : ap-northeast-2a
Subnet : 서브넷 선택
Mappings : ap-northeast-2c
Subnet : 서브넷 선택
Security groups : ELB-VPC의 보안그룹 클릭
리스너 : 프로토콜 HTTP, 포트 80
Default action에서도 지정해주어야 하는데, 생성된 타겟그룹이 없으므로 생성해보자
Create target group 클릭
[타겟 그룹 생성]
EC2 - Target groups - Create Target Group 클릭
유형 : Instances
Target group name : 원하는 이름 지정
Protocol : 프로토콜 HTTP / 포트 80
VPC : ELB-VPC
Protocol version : HTTP1
Health check protocol : HTTP
Health check path : /
지정 후 타겟그룹 생성
타겟그룹 생성 완료
[타겟 그룹 내 타겟 지정]
만들어진 타겟 그룹 클릭 후, Targets 클릭
ELB-EC2-1, ELB-EC2-2 인스턴스 두 개 클릭하여
타겟으로 등록
[ALB 생성 작업 마무리]
타겟 그룹 생성이 완료되었으므로,
ALB 생성 창으로 돌아와서 Default Action에 생성된 타겟 그룹을 넣어준다.
ALB 생성 완료
생성된 직후는 프로비저닝 중이지만
2~3분 뒤 active 상태로 변경된다.
현재까지의 상태를 아키텍처로 구성해보았다.
3. ALB(Application Load Balancer) 검증 - 로드밸런싱 동작 확인
ALB의 로드 밸런싱 동작을 확인해보고,
추가적인 경로 기반 라우팅 기능도 같이 알아보자
ALB의 DNS 주소 복사
My-EC2 인스턴스 에서
curl 명령어를 통해 HTTP 접근을 해보면
ELB-EC2-1와 ELB-EC2-2가 번갈아 가며 접속되는 것을 확인 가능
즉, ALB에서 로드 밸런싱이 되어 2대의 EC2 인스턴스로 부하 분산되고 있음
My-Ec2 → ALB ㅡ ELB-EC2-1
ㄴ ELB-EC2-2
ALB가 정상적으로 작동하고있다.
4. ALB(Application Load Balancer) 검증 - 경로 기반 라우팅 기능 확인
현재 HTTP 서버는 /index.html 페이지, /dev/index.html, /mgt/index.html 페이지를 가지고 있다
dev 경로 페이지는 ELB-EC2-1만 가지고 있고
mgt 경로 페이지는 ELB-EC2-2만 가지고 있다
만약, ALB DNS 주소로 dev 경로 페이지와 mgt 경로 페이지로 접근한다면 어떨까?
당연히 한 쪽 서버에서만 응답을 하고, 한 쪽 서버에서는 응답을 하지 않는다.
이러한 현상을 해결하기 위해 '경로기반 라우팅 기능'을 이용해보자
* curl 명령어를 통해, HTTP 서비스를 확인할 수 있다.
경로기반 라우팅 기능
[1. Dev-Group 생성 → ELB-EC2-1 타겟 추가]
EC2 -> 타겟 그룹 -> 타겟 그룹 생성 클릭
유형 : Instances
타겟 그룹 이름 : Dev-Group
프로토콜 : HTTP / 포트번호 : 80
VPC : ELB-VPC
타겟을 ELB-EC2-1 인스턴스로 지정
생성 완료
[2. Mgt-Group 생성 → ELB-EC2-2 타겟 추가]
EC2 -> 타겟 그룹 -> 타겟 그룹 생성 클릭
유형 : Instances
타겟 그룹 이름 : Mgt-Group
프로토콜 : HTTP / 포트번호 : 80
VPC : ELB-VPC
타겟을 ELB-EC2-2 인스턴스로 지정
타겟 그룹 생성 완료
두 타겟 그룹을 확인할 수 있다.
[3. 리스너 규칙 편입]
로드 밸런서 - ALB-TG(만든 로드밸런서) - 리스너 클릭
생성한 리스너 선택, 편집 클릭
규칙 삽입 클릭
경로 : /dev/*
전달 대상 - 대상 그룹 : Dev-Group
규칙 삽입 클릭
경로 : /mgt/*
전달 대상 - 대상 그룹 : Mgt-Group
규칙 편집 완료
ALB 리스너에 2가지 규칙이 추가되었다.
1. /dev/ 경로로 향하는 URL 주소는 Dev-Group에 속하는 인스턴스로 전달
2. /mgt/ 경로로 향하는 URL 주소는 Mgt-Group에 속하는 인스턴스로 전달
[검증]
/dev/index.html → ELB-EC2-1로 접속
/mgt/index.html → ELB-EC2-2로 접속
테스트가 잘 된다.
/index.html → 인스턴스 1, 2 번갈아가면서 접속됨
참고 : 따라하며 배우는 AWS 네트워크 입문
'AWS' 카테고리의 다른 글
[AWS] Route 53 (0) 2023.01.12 [AWS] 로드밸런싱 - NLB를 통한 로드밸런싱 (0) 2023.01.12 [AWS] 인터페이스 엔드포인트 (0) 2023.01.11 [AWS] 게이트웨이 엔드포인트 (0) 2023.01.11 [AWS] 콘솔로 EC2 인스턴스를 제작한 경우, 추가 데이터 넣기 (0) 2023.01.11