AutoScaling 서비스
- Cloud Watch서비스와 혼용하여 부하 또는 특정 상황에따라 인스턴스의 수를 증감할 수 있는 서비스
고려사항
1. 급격한 부하증가
CloudWatch를 통해 부하를 감지하여 AutoScaling하여 부하를 처리하는데 까지 5분정도의 시간이 걸린다
일시적으로 부하가 급격히 증가하는 서비스에서는 미리 예측하여 스케일업 또는 아웃을 해주어야한다
하지만 보통의 경우 이를 예측하기 어렵다 따라서 이를 미리 예측하고 대비하는 것이 중요하다.
2. Session유지
로드밸런서와도 관련이 있는 내용이다 Instance A에서 웹서비스를 받는 도중 새로고침 또는 다른 메뉴로 이동하기 위한
행동을 취했을 때 Instance B로 로드밸런싱이 되었다면 사용자는 이전 상태를 계속해서 잃어버릴 것이다
이때 "ElastiCache"를 이용한다면 여러 Instance들이 세션정보를 공유할 수 있다
3. Log 저장
AutoScaling을 통해 스케일 아웃된 인스턴스들의 로그정보들은 스케일 인시 인스턴스와 같이 사라진다
이때 S3와 연동하여 지속적으로 로그정보들을 백업하는 방법을 고려할 수 있다.
4. EC2 초기화
- AutoScling을 통해 추가된 EC2 Instance에 초기화 처리를 하기 위해서 "User Data"를 이용할 수 있다
(AutoScling Create Launch Configuration 3단계에서 작성한다)
- UserData는 root 계정 권한으로 실행되기 때문에 폴더나 파일을 이용할 때에 권한설정도 UserData에 포함되어야 한다.
*User Data
- AutoScling에 의해 자동으로 추가된 Instance에서 진행할 초기화 작업
종류
1) 셸 스크립트
2) cloud-init
User Data 작성방법
- https://cloudinit.readthedocs.io/en/latest/
구성
1. Launch Configuration
- AutoScaling에서 Instance가 새로 시작할때의 설정들을 지정한다
2. AutoScaling Group
- AutoScaling이 어떻게 동작하는지를 지정한다
시나리오
1. 목표
로드밸런서를 통해 부하분산이 이루어지고 있는 인프라에 Cloud Watch와 AutoScaling Group을 추가하여
부하에 따른 AutoScling을 구현한다.
2. 목표인프라
실습
1. VPC
1. VPC
- VPC : 1.0.0.0/16
2. Subnet
- Public Subnet 2개와 Private Subnet 2개를 생성
3. Route Table
1. Public RouteTable
- 인터넷 게이트웨이와 연결하여 인터넷으로 접근 및 사용이 가능하게 했다.
2. Private RouteTable
- NAT Gateway와 연결하여 내부에서 인터넷사용이 가능하도록 했다.
4. SecurityGroup
5. ACL
2. AMI 생성
- AutoScaling에 사용할 AMI를 생성한다
1. AMI에 사용될 간단한 웹서버 Instance 생성
- Private Subnet에 Instance를 생성하고 웹서버를 구축한다
2. AMI 생성
1) EC2 서비스로 들어가 좌측의 Instances탭을 클릭한뒤 AutoScling에 사용될 Instance를 우클릭한다
2) Image -> Create Image를 클릭하여 Instance를 이미지화 한다.
3) 이름을 설정
4) EBS를 추가하고 싶다면 추가 설정을 한다
3. LoadBalancer 구축
- http://galid1.tistory.com/368
4. AutoScaling 생성 및 설정
1. Create or Select Launch Configuration
- AutoScaling에 의해 생성되는 Instance의 설정들을 지정한다
1) EC2서비스의 좌측 AUTO SCALING 메뉴의 Launch Configurations를 클릭한뒤
Create launch Configuration 을 클릭한다
2) 좌측의 My AMIs 탭을 클릭한 뒤 이전에 생성한 AMI를 Select한다
3) UserData 추가(Instance 초기화)
AutoScaling으로 생겨나는 인스턴스의 초기화 작업을 지정하기 위해
하단의 Advanced Details를 클릭하여 확장한다
1. User data : 간단히 도커를 설치하기 위한 셸 스크립트를 작성한다
#! /bin/bash
sudo yum-config-manager --enable rhui-REGION-rhel-server-extras
sudo yum install -y docker
2. IP Address Type : Private Subnet에서 동작하는 웹서버를 구축할 것이므로
Public IP를 부여하지 않는다
4) 템플릿으로 인해 생겨나는 Instance의 SecurityGroup 설정
2. Create AutoScaling Group
- AutoScaling이 어떻게 행동하는지를 정의한다
1) EC2서비스의 좌측 AUTO SCALING 메뉴의 Auto Scaling Groups를 클릭한뒤
Create Auto Scaling Group을 클릭한다.
2) Launch Configuration을 선택한뒤 Use an existing launch Configuration을 클릭하여
앞서 만든 Launch Configuration을 선택한다
3) AutoScaling Group 초기 설정
Group size : AutoScaling Group의 시작 Instance 수 이다
Network : AutoScaling Group이 포함할 Private Subnet을 선택해준다
Advanced Details를 확장한다
Load Balancing : Auto Scaling Group이 Load Balancer로 부터 트래픽을 받음을 지정한다
Target Groups : 앞서 만든 Target Group을 지정한다
4) AutoScaling Group 세부 정책설정을 위해 하단의 글을 클릭한다
5) Increase Group 설정
Add new alarm을 클릭하여 Increase 정책이 실행될 시점을 알리는 Alarm을 생성한다
Increase Alaram
=> 웹서버를 간단하게 구축하여 부하발생이 적으므로 CPU이용률을 낮게 잡는다
Whenever : Cpu 최소 사용량
IS : 2% 이상인 경우
For at least : 적어도 1분간 지속된다면
Create a simple scaling policy 를 클릭한다
Action 설정
Excute policy When : 방금 생성한 increase Alarm
Take the action : 위의 알람이 울릴시 1개의 Instance를 추가한다
And then wait : instance가 생성된 후 warm up time이다
6) Decrease Group 설정
Add new Alarm을 눌러 Decrease 정책이 실행될 시점을 알리는 알람을 생성한다
Decrease Alarm 설정
Whenever : 최대 CPU이용률이
Is : 0.5% 이하
For at least : 적어도 1분간 지속되는 경우
Create a simple scaling policy 를 클릭한다
Action 설정
Excute policy when : 위에서 설정한 알람이 울릴때
Take the action : 1개의 인스턴스를 제거한다
And the wait : 30초 동안의 warm up 시간을 가진다
5. AutoScaling 초기설정 확인
1. 시작 Instance 확인
Auto Scaling Group 생성이 완료되면 자동으로 시작값으로 지정했던 수의 인스턴스가 생성된다
- 해당 인스턴스들은 AutoScaling Group이 제거될때 자동으로 제거된다
2. UserData 확인
- Userdata에 Docker를 설치하라는 셸스크립트가 정상적으로 작동했는지 확인한다
AutoScaling Group이 Private Subnet에 위치하도록 설치했으므로 확인을 위해 BastionHost를 생성하여 접근한다
Userdata가 정상적으로 실행되었다
6. LoadBalancer의 Target Group에 AutoScaling 시작 인스턴스 등록
앞선 3번 LoadBalancer구축 부분에서 아직 인스턴스가 없어서 스킵했던 TargetGroup에
AutoScalingGroup을 생성한 후 자동으로 생성된 시작 인스턴스들을 등록한다
7. AutoScaling 테스트
1. 부하발생기(Jmeter) 설치
JMeter(부하발생기) 설치 - http://galid1.tistory.com/373
JMeter(부하발생기) 사용법 - http://galid1.tistory.com/374
2. 부하발생 설정
1) Thread Group 설정
- 충분한 부하를 지속하기 위해 100명의 요청을 10000번 반복한다
2) Http Request의 주소를 Load Balancer로 지정한다
3. 부하발생 시작
8. Instance Monitoring
1. 부하 발생 직전
1) Instance
- 부하발생 직전 Init1 Instance의 Cpu이용률은 0.1~0.2% 사이를 웃돈다
2) LoadBalancer
- 로드밸런서의 요청 수신 수도 0이다.
2. 부하 발생 후
1) Instance
- AutoScaling-EC2-Init1의 CPU이용률이 6%까지 상승했다.
2) LoadBalancer
- 로드밸런서의 요청 수신 수가 급격히 증가했다
9. AutoScaling 확인
부하발생 결과로 자동으로 인스턴스 2개가 생겨났다 클릭하여 AMI를 확인하면 앞서 만든
AutoScaling-AMI인 것을 확인할 수 있다.
'AWS > Elasticity & Management' 카테고리의 다른 글
AWS - CloudFormation 이란? (0) | 2019.01.13 |
---|---|
AWS - CloudWatch란? (0) | 2019.01.12 |
AWS - LoadBalncer 이용 WebServer Loadbalancing하기 (0) | 2019.01.06 |
AWS - SNS(Facebook 등) 서비스 아키텍쳐 구축방법 (0) | 2018.11.23 |
AWS - 실습) LoadBalancer와 AutoScaling - 수정중 (0) | 2018.11.21 |