첫 번째 프로젝트로 진행한 SAFU 웹 서비스 을 배포하기 위해 서버 구축을 하려하며,
'서버 단위의 로드 밸런서' 아키텍쳐 중 애플리케이션 서버가 (일단은)하나인 아래의 구성으로 진행하고자 한다.
순서는
3. ELB 생성 및 리스너 세팅
4. Route53의 도메인과 ELB의 인스턴스 DNS 연결
5. EC2에 nginx 설치 및 세팅
으로 진행 될 것이다.
세 번째 단계인 ELB 생성 및 리스너 세팅을 해보고자 한다.
Load Balancing이란
로드 밸런싱은 네트워크 기술 중 하나로 네트워크 트래픽을 하나 이상의 서버나 장비로 분산하기 위한 *기술이다. *
그리고 이 기술을 수행하는 소프트웨어나 하드웨어를 Load Balancer
라고 한다. 생활코딩의 설명이 로드 밸런싱의 필요성을 직관적으로 잘 설명해주고 있는 것 같다.
거대하고 변덕스러운 트래픽이 몰려오고 있을 때, 하나의 큰 컴퓨터가 아니라, 여러대의 작은 컴퓨터가 힘을 합쳐서 트래픽을 감당할 수 있다면 얼마나 좋을까요? 그렇게 하면 트래픽의 양에 따라서 컴퓨터의 수를 조절해서 비용을 절감할 수 있습니다. 또 하나의 큰 컴퓨터로는 감당할 수 없는 처리량도 넉넉하게 처리할 수 있습니다.
- 생활코딩 ELB 설명
그리고 [EC2] AWS를 이용한 서버 환경 이해 및 구축에서 '서버 단위의 로드 밸런서의 장점'에서도 언급한 바와 같이 일부 서버에 장애가 발생해도 로드 밸런서가 정상 서버에 요청을 전달하면 되기 때문에 대응이 가능하다.는 장점도 있다.
네트워크 트래픽 증가를 처리하는 방식은 두가지가 있다.
1) Scale up
: CPU, 메모리, 디스크 등의 기능을 업그레이드 하는 방식
그러나 이 방식은 수를 조절하는게 아니라 하나의 서버에서 서비스를 제공하는 것이기 때문에 유연한 사용이 안되고, 성능이 높아짐에 따른 비용도 크다.
2) Scale out
: 저렴한 노드 여러 개를 하나의 Cluster로 구성하는 방식으로, 로드 밸런싱이 이 방법에 해당한다. 네트워크 트래픽을 서비스의 Port단위로 제어하고, 트래픽을 분산처리함으로써 효율이 높다.
ELB(Elastic Load Balancer)란
ELB는 AWS의 로드 밸런서 서비스이다. ELB는 클라이언트의 요청을 받아 로드 밸런서가 관리하는 서버들에게 이 요청을 골고루 전달해주며 이상이 생긴 서버에게는 요청을 보내지 않는다.
ELB에 대한 자세한 설명은 ELB 사용 단계별로 정리해보겠다.
1. 먼저 EC2의 로드 밸런싱에서 로드 밸런서로 들어간다.
2. 로드 밸런서의 유형을 선택
이 각각에 대해서 설명을 읽어봐도 아직 모르는 단어도 많고, 해서.. 잘은 모르지만 <아마존 웹 서비스> 책을 참고해서 정리해보자면..
Application Load Balancer
는 마이크로 서비스 및 컨테이너 기반 애플리케이션, 최신 애플리케이션 서비스에 최적화된 로드 밸런싱을 제공하며 SSL/TLS암호화 및 프로토콜을 사용한다. 즉, HTTP/HTTPS 서비스에 적합한 것이다.
앞서 [ACM] 도메인 주소 생성 및 AWS Certification에서도 적어놓은바가 있지만 나는 웹 서비스의 통신에 SSL암호화가 된 HTTPS 통신을 사용해야 한다.
그러므로 이 ELB유형을 선택했다.
Network Load Balancer
는 TCP 트래픽의 로드밸런싱 서비스에 적합하다. 또한 짧은 지연시간으로 초당 수백만개의 요청 처리가 가능하기 때문에 트래픽의 변동이 심한 서비스에 적합하다.
Classic Load Balancer
는 EC2 classic 네트워크 내에 구축된 애플리케이션을 대상으로 하는 ELB라고 한다. 이건 잘 사용하지 않는 것 같다.
3. Load Balancer 구성
ELB의 이름을 적고, 리스너에 HTTP는 기본으로 추가되어 있으니 HTTPS 443포트
를 추가해준다.
그리고 가용영역
을 선택해준다.
이 부분은 VPC
와 서브넷(Subnet)
개념을 알아야한다. 이 부분도 아직 공부가 다 안되었는데 ㅠ 일단은 주어진 4개의 가용지역을 모두 선택한다.
4. 보안 설정 구성
이 단계에서 서버 도메인(나 같은 경우는 www.safu4u.ml)을%EC%9D%84) 가지고 [ACM] 도메인 주소 생성 및 AWS Certification에서 발급받은 인증서를 선택한다.
이게 바로 ELB의 기능 중 하나인 SSL Termination 및 보안 기능
이다.
ELB에 ACM에서 발급받은 인증서를 등록함으로써, SSL인증서를 이용한 HTTPS활용 트래픽 암호화 및 복호화 서비스를 제공할 수 있다.
5. 보안 그룹 구성
6. 라우팅 구성
① 먼저 대상 그룹을 지정해준다. ELB가 연결되는 대상그룹을 설정하는 부분이다. 현재 나의 경우 만든 대상그룹이 없기 때문에 '새 대상 그룹'을 선택하고 그 대상그룹의 이름을 지어준다.
대상 그룹
이란 ELB가 요청을 전달할 서버들을 묶어둔 개념적인 그룹이다. 이 대상 그룹에는 EC2 인스턴스나 Auto Scaling 그룹이 포함 될 수 있다. 예를 들어,
대상 그룹 A에는 EC2 인스턴스 2개, 대상 그룹 B에는 EC2 인스턴스 3개 그중에 EC2 인스턴스 2개는 Auto Scaling 그룹에 포함이 되어있다.
그래서 로드 밸런서에는 대상 그룹 A+대상 그룹 B에 총 EC2 인스턴스 5개가 연결되어 있는 것이다. 그래서 라이언트가로드 밸런서로 보낸 요청들을 5개의 EC2 인스턴스가 나눠서 처리한다.
왜 대상그룹으로 묶는 것일까? 그냥 로드 밸런서에 EC2 인스턴스나 Auto Scaling 그룹을 직접 등록하면 되지 않을까?
이유는, 이렇게 함으로써 하나의 로드 밸런서에 여러 대상 그룹을 연결할 수 있고, 요청한 포트에 따라 다양한 대상 그룹으로 요청을 전달 할 수 있기 때문이다. 예를 들어 80번 443번 포트로 온 요청은 대상 그룹 A에, 5000번 포트로 온 요청은대상 그룹 B에 전달하게 구성할 수 있다.
② 그리고 ELB가 EC2와 통신할 프로토콜과 포트번호를 설정한다.
③ 상태 검사
도 설정해주자.
이게 ELB의 기능 중 하나인 로드 밸런서의 상태 검사
이다.
이렇게 ELB와 연결된 인스턴스의 연결 상태를 수시로 체크하여 연결 장애나 서비스 가능 여부에 대한 을 지속적으로 수행한다. 내가 선택한 HTTP나 HTTPS 방식은 자기가 관리하는 서버들에게 GET/health를 등록해 특정 웹 페이지에 수시로 접속 시도에 따른 응답 코드가 정상 반환(200)여부를 확인해서 Health Check 성공/실패 여부를 판단한다.
정말 좋다고 생각한 것은 HTTP와 HTTPS 상태 확인 빈도, 실패 임계치, 성공 시 응답 코드를 임의 설정 가능하며 자세한 상태 확인과 실패 원인은 API를 통해 확인도 할 수 있고, AWS 콘솔에도 된다는 것이다.
7. 대상 등록
이제 앞서 만든 대상 그룹에 대상(EC2 인스턴스)를 등록한다.
+ 이미지 생성으로 여러 인스턴스를 생성하고 대상 그룹에 등록할 수 있다. 이 방법은 생활코딩 AWS - Elastic Load Balancer (ELB)에 잘 나와있으니 EC2를 생성할 때와 유사하게 진행하면 된다.
여기까지 하면 로드밸런서와 그와 연결된 대상 그룹이 생성될 것이다.
이제 거의 다 했다.
8. 80 포트 HTTP의 접속도 HTTPS 443포트로 리디렉션 하도록 설정을 바꿔준다.
이렇게 항상 HTTPS로만 접근 할 수 있도록!
EC2>로드밸런싱>로드밸런서에서 해당 로드밸런서를 선택한 후 하단에 '리스너 탭'으로 이동하여
위 ALB 설정시 추가했던 리스너가 표로 있을 것이다. 여기서 80포트의 규칙 부분의 규칙 보기/편집 버튼을 눌러 설정해줄 수 있다.
이동한 규칙 편집/보기 페이지의 상단 편집 버튼을 누른 후 기존 기본 규칙을 삭제
작업 추가> 리디렉션 대상 >HTTPS, 443 포트 입력 후 저장 및 업데이트를 하면 된다.
그러면
이렇게 잘 수정이 되어있는 것을 알 수 있다.
끝!
reference
아마존 웹 서비스 7장. 네트워크 트래픽을 분산시켜 주는 로드 밸런싱
AWS 인프라 구축 가이드 3장. 다중 서버 환경 구성
'Dev > DevOps, Infra' 카테고리의 다른 글
[CloudFront] CloudFront에 S3 버킷 배포하고 SSL Certificate설정 (0) | 2021.01.12 |
---|---|
[S3] S3를 이용한 정적 웹 사이트 호스팅 (0) | 2021.01.12 |
[Route 53] Route53의 도메인과 DNS 연결 (0) | 2021.01.10 |
[ACM] 도메인 주소 생성 및 AWS Certification (0) | 2021.01.10 |
[EC2] AWS를 이용한 서버 환경 이해 및 구축 (0) | 2021.01.10 |