ELB(Elastic Load Balancer)
- AWS에서 제공하는 트래픽 부하 분산 서비스이다.
로드밸런서는 1999년에 처음으로 개발되었다.
서버가 1.1, 1.2, 1.3 세 대가 있을 경우,
접속 요청이 들어올 때마다 차례대로 서버를 나눠주는 방식이었다. -> 라운드 로빈 방식 (round robin)
그런데 1.2 서버가 고장났을 경우...? 로드밸런서가 1.2 ip를 가진 서버가 고장난지 알 수가 없다.
즉, 사실상 트래픽을 서버에 나눠주기 위해서는 해당 서버가 죽었는지 살았는지 확인을 한 다음에 나눠줘야 올바르게 작동할 것이다.
서버가 죽었는지 살았는지 아는 방법? 간단하게 Ping 명령어를 사용해 통신이 되는지 확인하는 방법이 존재한다.
그런데 ping 명령어도 Web server가 설치되어 있지 않는다면 ping으로 통신이 되지 않는다.
멀쩡하게 살아있음에도 죽었다고 판단해버리게 된다.
이러한 상황에서 AWS에서는 어떤 방식으로 서버를 죽었나 살았나 확인할까?
ELB 사용하기 위해 지정해야 하는 것
1. 리스너(Listener) 설정: 어떤 트래픽을 들어올 수 있게 할 것인지? 포트를 열어두고 대기하게 된다. 리스너 여러 개 지정 가능
2. 룰(Rule): 리스너가 설정한 포트로 요청이 들어왔을 때, 어떤 행동을 할 것인지에 대한 규칙. 보통 여기서 요청을 보낼 서버(타겟)를 설정하게 된다.
3. 타겟 그룹: 로드 밸런서를 통해 요청을 분산할 서버들의 모음이다. 타겟들을 한 그룹으로 묶어 부하를 분산하게 된다. 타겟 그룹에서 서버가 죽었나, 살았나 확인하게 된다(= Health Check)
* 굳이 그룹으로 묶는 이유는 무엇일까? -> AWS는 IP가 유동적이라 IP를 콕 찝어 지정해주기 애매하기 때문이다.
* 로드 밸런서를 사용하기 위해서 타겟 그룹과 보안 그룹을 미리 생성해두는 것이 좋다.
ELB의 종류
1. NLB(Network Load Balancer)
- L4에서 동작하는 로드밸런서로 TCP, UDP 통신을 한다.
- 요청의 IP와 Port를 인식하여 부하분산 작업을 하게 된다. => 단순 부하분산 역할
- 고정 IP 사용할 수 있다.
- 높은 처리량, 낮은 지연시간이 특징인 실시간 애플리케이션 및 데이터베이스 연결에 적합하다.
- 서브넷 개수대로 트래픽을 분산한다.
예를 들어 A 서브넷에 2개의 인스턴스, B 서브넷에 4개의 인스턴스가 있을 경우
A: 50%, B: 50% 비율로 부하분산하게 된다.
그러면 A 서브넷은 B 서브넷과 비교할 때 2배의 트래픽이 몰렸다고 볼 수 있다.
NLB는 A서브넷에 25%, B 서브넷에 75% 비율로 쪼개서 보낼 수 없다.
2. ALB(Application Load Balancer)
- L7에서 동작하는 로드밸런서로 HTTP, HTTPS 통신을 한다.
- Cross Zone Load Balancing 기법을 사용한다. 각 서브넷의 인스턴스의 개수가 달라도 1/N 비율로 부하분산한다. 성능이 좋아짐
- 요청의 IP, Port + 사용자 데이터를 인식하게 되며, 자세한 내용까지 파악할 수 있다.
ex. 미국인일 경우 영문 웹사이트로 라우팅
- Internal ALB, External ALB로 나뉜다.
2-1. Internal ALB: 프라이빗 네트워크에서만 접근 가능하며, VPC 내에서만 트래픽을 분산한다.
사용처: 내부 애플리케이션, 데이터베이스 서버, 마이크로 서비스 간 통신
Internal ALB는 인터넷에서 직접 접근할 수 없기 때문에 보안 위협이 줄어들며, 외부에서 접근할 수 있는 DNS 이름이 제공되지 않는다.
2-2. External ALB(=Internet-facing ALB): 인터넷 통해 접근하여 외부 네트워크에서 VPC 안으로 들어와 트래픽을 분산한다.
사용처: 웹사이트, 모바일 맵, 외부 API 엔드포인트 등 사용자가 접근해야 하는 애플리케이션에 사용
인터넷을통해 접근이 가능하기 때문에 더 강력한 보안 조치가 필요하다 (WAF, SSL/TLS 인증서 등)
퍼블릭 DNS 이름이 제공되기 때문에 인터넷 사용자가 로드 밸런서에 접근할 수 있다.
* ALB와 NLB를 함께 사용해도 된다.
NLB -------- ALB ------- Target Group
-> 고정 공인 IP를 가지고 있는 NLB를 사용하여 전달 속도를 높이고 ALB에서 사용자 데이터를 추가로 파악하여 부하분산하는 과정을 가질 수도 있다.
* 현재 Interfacing ALB로도 프라이빗 서브넷에 연결이 가능해지긴 했만, 에러 메시지 발생!