1. ELB(Elastic Load Balancer)란?
ELB란 애플리케이션 트래픽을 여러 대상에 자동으로 분산시켜 안정적인 AWS서버 환경을 운용하는 데에 도움을 주는 서비스다.
(AWS 로드밸런서)EC2뿐만 아니라 컨테이너(ECS), AWS Lambda 등으로 다양한 서비스와 연계하여 부하를 분배할 수 있다.
ELB는 서로 다른 EC2 인스턴스에 대한 하나의 엔드포인트를 제공한다.
이 덕분에 사용자는 실제 요청이 처리되는 백엔드 인스턴스에 대한 고려 없이 동일한 엔드포인트로 요청을 전송할 수 있다.
거기다 부하분산뿐만 아니라 부하 분산 대상에 대한 헬스 체크(Health Check), 고정 세션(Sticky), SSL Offload(SSL 암복호화), 헬스 체크를 통한 다운 서버 제외 등이 가능하다.
2. 로드 밸런싱(Load Balancing)이란?
Load(부하) + Balancing(분산)이란 컴퓨터 네트워크 기술의 일종으로 둘 혹은 셋이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미한다. 말 그대로 부하를 분산해 트래픽이 과도하게 몰려 서비스가 중단되는 현상을 막기 위한 기술이다. 그로부터 지연 없이 작업을 처리하고 속도를 낼 수 있다. 로드 밸런서는 부하를 분산하는 것뿐만 아니라, 스케일 아웃에 대한 하나의 엔드포인트를 제공하기도 한다. 우리는 오토스케일링 그룹을 통해 다수의 인스턴스를 생성(스케일 아웃)하고 관리함으로써 고가용성을 확보할 수 있고 안정적인 서비스를 제공할 수 있게 되었다.
그렇지만 이것을 사용하는 유저 입장에서는 증설된 각각의 인스턴스는 모두 다 일종의 컴퓨터이니 IP 주소를 갖고 있을테고, 이들을 관리하기 위해선 일일이 주소를 백업해 하나하나 접속하면서 관리해야 된다. 뿐만 아니라, 만약 인스턴스 하나가 떨어지고 다시 새로 인스턴스가 올라가게 된다면, IP주소가 바뀌게 되고 이에 대해 별도의 조치를 취해야 한다. 더군다나 만약에 인스턴스가 8개가 아니라 엄청 많을 때는 관리비용이 엄청 증가하게 된다. 따라서, 오토스케일링 그룹 자체는 혁신적인 방법이지만 별도의 로드 밸런싱, 부하를 분산해주는 서비스 없이는 활용 불가이기 때문에 그래서 나온 서비스가 ELB(Elastic Load Balancing)인 것이다.
3. ELB & 오토 스케일링
오토 스케일링은 트래픽이 몰릴때 인스턴스(컴퓨터) 수를 자동으로 늘림으로써 서버 사이즈를 조절해 서비스가 원활히 유지되게 하며, 또한 트래픽이 적을 경우 인스턴스를 감소시켜 비용 낭비를 막아주는 서비스이다. ELB는 트래픽을 오토 스케일링을 통해 늘린 수만 개의 인스턴스들에게 부하(트래픽)를 분산하는 서비스. 즉, 이 둘은 유기적으로 연동되어 EC2를 보다 효과적이게 이용할 수 있게 한다.
4. ELB 구성요소 (리스너, 대상그룹, 룰)
ELB는 Virtual Private Network(VPC)에 탑재되며, 사용자의 요청을 받고 이를 VPC 내의 리소스(EC2 등)에 적절히 부하 분산한다. ELB는 외부의 요청을 받아들이는 리스너(Listener)와 요청을 분산/전달할 리소스의 집합인 대상 그룹(Target Group)으로 구성되며 ELB는 다수의 리스너와 대상 그룹을 거느릴 수 있다.
부하 분산 대상인 대상 그룹 내 리소스들은 헬스 체크(Health Check)를 활용해 끊임없이 상태를 확인받게 된다.
리스너는 외부의 요청을 받아들이기 때문에 서비스 포트를 보유하고 있으며 외부의 요청은 서비스 포트로 접속하는 요청만을 처리한다. 대상 그룹 또한 서비스 포트를 보유하고 있으며 부하 분산 대상인 EC2는 해당 포트가 열려있어야 한다. 대상그룹의 포트는 꼭 리스너와 포트가 같은 필요는 없다. 요청을 검토한 리스너가 요청이 적합한 경우 대상그룹에게 이를 전달할 때 대상 그룹의 포트로 'Port Translation'을 실시하기 때문이다.
- 리스너(Listener)
리스너는 프로토콜과 포트를 기반으로 요청을 받아 검사하고 이를 적절한 타겟으로 전달하는 기능을 수행한다. 모든 로드 밸런서는 최소 1개 이상의 리스너를 필요로 하
며, 최대 10개까지 설정할 수 있다.
- 룰(Rule)
리스너 룰은 리스너와 타겟 그룹 사이의 트래픽 분배를 위한 라우팅 규칙에 해당한다. 룰은 우선순위, 액션, 조건 등의 정보를 담고 있으며, 조건이 만족되었을 때, 지정된 액션을 수행하는 방식으로 작동한다. 리스너 룰에는 path, host, HTTP header, source IP, query parameter 등의 다양한 조건을 제공한다. 리스너는 최초 생성 시, default rule을 포함하고 있다. 디폴트 룰은 별도의 조건을 가질 수 없으며, 다른 룰로 처리되지 않고 남은 모든 요청에 적용된다.
- 대상그룹 (Target Group)
대상그룹은 리스너가 전달한 요청을 처리하기 위한 부하분산 대상들의 모임이다. 즉, ELB가 분산을 할 때 어디로 분산할 것이냐를 모은 그룹들이 대상그룹이다. 대상 그룹에 등록된 EC2의 각종 정보(인스턴스 ID, Port, AZ)가 적혀있고, 이 EC2가 전달받은 요청을 처리할 수 있는지를 체크하는 '헬스 체크(Health Check)' 기능과, 이 대상 그룹에 요청 처리가 가능한 EC2가 몇 개인지, 불가능한 EC2는 몇 개인지를 확인하는 요청 처리에 관련된 모니터링 기능이 있다.
즉, 오토스케일링을 하기 위해서 인스턴스들을 그룹으로 묶어 오토스케일링 그룹으로 만든 것처럼, 로드 밸런싱 하기 위 해서 대상 인스턴스들을 묶어 놓은 그룹이라고 이해하면 된다. 그리고 이 대상그룹을 오토스케일링 그룹으로도 만들 수 있다.
5. ELB 요청 처리 과정
1) 사용자가 로드밸런서에 접근하기 위해 Amazon의 DNS 서버에 로드밸런서의 도메인 해석을 요청
2) Amazon의 DNS 서버가 로드밸런서 노드 IP 리스트를 사용자에게 전달
3) 사용자는 전달받은 IP 중 하나를 선택하여 로드밸런서에 접근(+ Port 입력)
4) 사용자는 로드밸런서의 (Port가 일치하는) 리스너에 접근하게 되며 리스너는 이 요청을 받아들여 적절한 대상그룹으로 전달
5) 리스너로부터 전달받은 요청을 EC2가 처리한 후 다시 사용자에게 반환
참고
댓글