Cloud/AWS

AWS - Auto Scaling, Load Balancer

잇(IT) 2022. 6. 23. 20:35

목차
1. AMI 생성
2. Template 생성
3. Target group 대상 그룹 생성
4. Load Balancer 생성
5. Auto Scaling 그룹 생성
6. 부하 및 상태 확인


* Auto Scaling

- CPU 사용률이나 통신량, 특정 시각 등 사전에 조건을 설정해 두면 그 조건에 부합할 때 자동으로 EC2 인스턴스를 가동/정지하는 기능이다.
- 부하가 높은 경우에만 EC2 인스턴스를 가동하고, 부하가 낮아졌을 때 정지하면 EC2 인스턴스를 효율적으로 이용이 가능하다.


1. AMI 생성

 

- 템플릿 생성 시에 필요한 AMI를 생성한다.

- EC2 인스턴스를 구성할 때 사용되는 이미지가 되는 데이터 셋이다.
- AMI 에는 OS미들웨어, 애플리케이션의 데이터가 들어있고, 선택한 AMI의 데이터를 기반으로 EC2 인스턴스가 구성된다.
- 아마존이 제공하고 있는 기본 AMI를 이용하는 것도 가능하며, 사용자가 AMI를 만들 수도 있다. 만든 AMI를 기반으로 다른 EC2 인스턴스를 구성할 수 있다.

 

- AMI로 만들 인스턴스를 선택한다.

 

- AMI 생성시 필요한 설정을 부여하고 생성한다.

 

- AMI가 정상적으로 생성되었는지와 사용 가능한 상태로 전환 되었는지 확인한다.


2. Template 생성

 

- Template 즉, 일종의 틀을 생성하는 것이다.

 

- Template를 미리 생성해 놓으면 해당 Template를 가지고 원하는 조건의 인스턴스를 매번 구성 조건을 설정하지 않고 바로 EC2 인스턴스를 생성 할 수 있다.

 

- AMI 선택 부분에서 기존의 amazon에서 제공하는 이미지를 선택해도 되고 직접 생성한 AMI를 선택해도 된다.

- 이번 시나리오에서는 직접 생성한 wordpress AMI를 이용하여 Template를 생성해 볼 것이다.

 

- 인스턴스 유형과 키 페어를 지정해준다.

 

- 서브넷, 방화벽, 보안 그룹을 선택해준다.

- 서브넷은 특정 서브넷에 국한되지 않도록 시작 템플릿에 포함하지 않도록 설정한다.

- 특정 서브넷을 지정하게 되면 템플릿 자동 생성 시 한쪽 서브넷에 몰리기 때문이다.

- 한쪽 서브넷에 몰리게되면 고가용성에 있어서 불리하다.

 

- 템플릿 설정은 마친 다음 생성을 하게 되면 위와 같이 템플릿이 생성된 것을 확인 할 수 있다.


3. Target group 대상 그룹 생성

 

- Load Balancer를 생성시 부하 분산을 시킬 대상 그룹이 필요하기 때문에 먼저 생성해준다.

- 대상 그룹을 생성해 놓으면 Load Balancer 생성시 어떤 EC2 인스턴스들이 모인 그룹에 부하 분산을 시킬지 간편하게 지정 할 수 있다.

 

 

- 그룹에 속한 인스턴스들에게 어떤 프로토콜과 어떤 포트로 요청을 보낼 것인지 선택한다.

- 위의 그룹에 속한 인스턴스들은 HTTP 프로토콜과 80번 포트로 요청을 받게 된다.

 

- 현재 대상 그룹으로 지정할 EC2 인스턴스가 존재하지 않기 때문에 대상 그룹만 생성한다.


4. Load Balancer 생성

 

- Load Balancer를 생성함으로서 부하 분산을 통한 고가용성을 높인다.

- Load Balancer에 지정된 대상 그룹에 존재하는 인스턴스에 일정 방식에 따른 부하 분산을 시켜 서버의 안정성을 높인다.

 

- WEB Server에 대한 부하 분산을 위한 Application Load Balancer를 선택한다.

- Application Load Balancer를 생성하게 되면 이전에 생성한 대상 그룹을 사용할 수 있다.

 

로드 밸런서를 생성할 때 로드 밸런서를 내부 로드 밸런서 또는 인터넷 경계 로드 밸런서로 생성할지 여부를 선택해야 합니다. EC2-Classic에서 Classic Load Balancer를 생성할 때는 반드시 인터넷 경계 로드 밸런서여야 한다는 점을 참고하십시오.로드 밸런서를 생성할 때 로드 밸런서를 내부 로드 밸런서 또는 인터넷 경계 로드 밸런서로 생성할지 여부를 선택해야 합니다. EC2-Classic에서 Classic Load Balancer를 생성할 때는 반드시 인터넷 경계 로드 밸런서여야 한다는 점을 참고하십시오.
인터넷 경계 로드 밸런서의 노드는 퍼블릭 IP 주소를 가집니다. 인터넷 경계 로드 밸런서의 DNS 이름은 노드의 퍼블릭 IP 주소로 공개적으로 확인이 가능합니다. 따라서 인터넷 경계 로드 밸런서는 인터넷을 통해 클라이언트의 요청을 라우팅할 수 있습니다.
내부 로드 밸런서의 노드는 오직 프라이빗 IP 주소만 가집니다. 내부 로드 밸런서의 DNS 이름은 노드의 프라이빗 IP 주소로 공개적으로 확인이 가능합니다. 따라서 내부 로드 밸런서는 로드 밸런서를 위한 VPC에 액세스하여 클라이언트의 요청만 라우팅할 수 있습니다.
인터넷 경계 및 내부 로드 밸런서는 모두 프라이빗 IP 주소를 사용하여 대상으로 요청을 라우팅합니다. 따라서 대상이 퍼블릭 IP 주소 없이도 내부 또는 인터넷 경계 로드 밸런서에서 요청을 수신할 수 있습니다.

- AWS 공식 문서에 나온 내용이다.

- 즉, 인터넷 경계를 선택하면 Load Balancer 안에 있는 노드들이 private IP만 가지고 있어도 인터넷과 통신이 가능하다는 것을 뜻한다.

- 가용 영역은 Load Balancer를 적용시킬 서브넷을 지정하는 항목이다.

 

- load balancer에 대한 트래픽을 제어하는 방화벽 규칙을 정하는 보안 그룹을 지정한다.

 

- 라우팅 구성은 Load Balancer로 들어온 요청을 라우팅에 의해 어디로 요청을 보낼 것인지 정하는 부분이다.

- 대상 그룹을 이전에 생성한 대상 그룹으로 지정 할 수 있다.

- 이전에 생성한 대상 그룹으로 지정할 경우 프로토콜과 포트는 해당 그룹을 생성할 때 정했기 때문에 별도로 수정하는 것은 불가능하다.

- 기존 대상 그룹을 원하지 않으면 새로운 대상 그룹을 생성해서 사용 할 수 있다.

 

- 현재 대상 그룹에 포함된 인스턴스가 없기 때문에 우선 넘어간다.

 

- 위의 설정을 전부 마치고 나면 Load Balancer가 생성된 것을 확인 할 수 있다.


5. Auto Scaling 그룹 생성

 

- CPU 사용률이나 통신량, 특정 시각 등 사전에 조건을 설정해 두면 그 조건에 부합할 때 자동으로 EC2 인스턴스를 가동/정지하는 기능.
- 부하가 높은 경우에만 EC2 인스턴스를 가동하고, 부하가 낮아졌을 때 정지하면 EC2 인스턴스를 효율적으로 이용이 가능하다.

 

- 이전에 생성한 템플릿 중 Auto Scaling 시킬 템플릿을 지정한다.

 

- Auto Scaling을 통해 EC2 인스턴스가 생성될 VPC와 Subnet을 지정한다.

- EC2 인스턴스가 한 Subnet에 몰리는 것을 방지하기 위해 template 생성 시 subnet 설정을 보류했던 것이다.

 

- 로드 밸런싱을 선택한다.

- 기존의 로드 밸런싱을 선택하고 대상 그룹을 선택하게 되면 Auto Scaling을 통해 생성되는 EC2 인스턴스들이 해당 그룹에 포함되고 해당 그룹에 포함된 EC2 인스턴스들은 로드 벨런싱을 통해 부하 분산이 된다.

 

- Auto Scaling을 모니터링 하기 위해 CloudWatch 내에서 그룹 지표 수집 활성화를 시킨다.

 

- 원하는 용량은 최초 Auto Scaling 그룹을 생성했을 때 생성되는 EC2 인스턴스의 갯수이고, 최소 용량은 Auto Scaling을 통해 유지되는 EC2 인스턴스의 최소 갯수이다. 최대 용량은 Auto Scaling을 통해 생성될 수 있는 최대 인스턴스의 갯수이다.

 

- Auto Scaling 그룹의 크기를 직접 조정하여 사용할 수 있다. 어떤 상황에서 EC2 인스턴스를 늘릴 것인지에 대한 설정들을 한다.

 

- Auto Scaling을 통해 일어나는 일들에 대한 알림을 받고 싶다면 설정한다.

 

- 태그를 추가하게 되면 그룹핑을 할 수 있어 관리가 편해진다.

 

- 위의 설정들을 전부 마치게되면 Auto Scaling을 통해 생성된 인스턴스를 확인 할 수 있다.

 

- 이전 대상 그룹을 생성 할 때 인스턴스를 추가하지 않았는데 Auto Scaling에서 해당 Load Balancer의 대상 그룹으로 지정되어 Auto Scaling으로 부터 생성된 EC2 인스턴스들이 자동으로 대상 그룹에 포함된 것을 볼 수 있다.


6. 부하 및 상태 확인

 

- 부하 테스트를 위해 Bastion 역할의 EC2 인스턴스를 생성한 후 부하를 주기 위해 httpd-tools 패키지를 설치한다.

 

- 부하를 줄 로드 밸런서의 DNS 주소를 복사한다.

 

- 해당 DNS에 20000번의 요청을 보낼 것이고 해당 요청마다 1000번을 호출하겠다는 의미를 가졌다.

- 위의 구문을 실행하게 되면 해당 로드 밸런서에 엄청난 부하가 생기게 된다.

 

- CloudWatch 리소스 및 애플리케이션 모니터링을 할 수 있는 서비스다.

 

- 현재 부하가 주어지고 있는 로드 밸런서에 있는 인스턴스들에 CPU 사용률을 보게 되면 50 이상으로 치솟을 것을 확인 할 수 있다.

 

- Auto Scaling 설정 시 CPU 사용률이 50 이상 올라가게 되면 고가용성을 위해 Auto Scaling을 통해 새로운 EC2 인스턴스들이 자동으로 생성되는 것을 확인 할 수 있다.

 

- 부하를 계속해서 부여한다.

 

- 첫번째 부하로 인해 새로운 EC2 생성 이후 CPU 사용률이 잠시 안정되었다가 다시 한 번 부하를 준 이후 다시 CPU 사용률이 올라가는 것을 확인 할 수 있다.

 

- 부하가 계속해서 부여되어 처음 Auto Scaling을 통한 EC2 인스턴스가 2개에서 6개로 늘어난 것을 확인 할 수 있다.

728x90

'Cloud > AWS' 카테고리의 다른 글

AWS -ECS (ECR에 이미지 푸시)  (1) 2022.07.10
Lambda 실습  (0) 2022.07.08
AWS - Wordpress와 RDS를 이용한 DB Server 연결하기  (0) 2022.06.23
AWS - Auto Scaling  (0) 2022.06.23
AWS - RDS (Relational Database Service)  (0) 2022.06.22