Information Security Study
오토스케일링과 로드밸런서로 요금최적화하기 본문
오토스케일링과 로드밸런서로 요금최적화하기
Auto Scaling
- 인스턴스를 자동으로 확장하고 축소하는 기능이다.
- 사용자가 정의한 조정 정책에 따라 인스턴스 수가 증가 되거나 축소된다.
- ex) 서버의 로드가 증가하면 인스턴스 개수가 추가되고 감소하면 인스턴스도 줄어든다.
- k8s의 Deployment나 ReplicaSet과 같이 동작한다.
오토 스케일링 구성 요소
1) 오토 스케일링 그룹
- ec2 인스턴스의 그룹
2) 시작 템플릿(런치 템플릿)
- ec2 서버를 시작하기 위한 AMI
- 인스턴스 유형 정보를 가진 템플릿
3) 조정 옵션(조정 정책)
- 오토 스케일링을 실행하기 위한 조건
EC2 Auto Scaling - 조정 정책
1) 항상 현재 인스턴스 수준 유지 관리
- 지정된 수의 실행 인스턴스를 항상 유지하도록 Auto Scaling 그룹을 구성한다.
- 인스턴스가 비정상 상태임을 확인하면 해당 인스턴스를 종료한 다음 새 인스턴스를 시작한다.
2) 수동 조정
- 최대, 최소 또는 원하는 용량의 변경 사항만 지정하는 경우에 사용한다.
3) 일정을 기반으로 조정
- 확장 작업이 시간 및 날짜 함수에 따라 자동으로 수행된다.
- ex) 매주 일요일에는 인스턴스 4대, 다른 요일에는 2대 실행된다.
4) 디맨드 기반 조정
- 수요 변화에 맞춰 Auto Scaling 그룹의 크기를 동적으로 조정한다.
- ex) CPU 사용량을 50%기준으로 하고 사용량 기준에 따라 EC2 인스턴스 수를 증가하거나 감소한다.
인스턴스가 어떤 아이피에 배정될지 모르는데 어떻게 인스턴스 증감에 따라 리버스 프록시도 적용될까?
: 도메인을 부여하거나 도메인에 예상 아이피 대역을 모두 입력한 다음 nignx 등에 리버스 프록시 타겟을 도메인으로 잡아주는 방법을 사용할 수 있다.
Compute 탭에 Auto Scale에서 오토 스케일링 설정을 할 수 있다.
스케일링 그룹을 생성할 때 자동으로 증감될 인스턴스의 이미지가 필요하다.
인스턴스 이미지 생성은 위와 같이 체크 후 이미지 생성을 누르면 된다.
다시 스케일링 그룹 생성으로 돌아와서 이미지를 선택한다.
나머지는 일반 인스턴스를 생성하듯이 키 페어, 이름, 서브넷 설정을 해주면 된다.
앱을 관리하기 때문에 app이 있는 서브넷에 두면 된다.
증설 및 감축 정책은 위와 같이 memory 사용량이 40%가 넘어가면 인스턴스 1개를 추가하고 1분 동안 30% 미만으로 감소하게 되면 1개의 인스턴스를 삭제하도록 설정했다.
로드밸런싱은 nginx로 리버스 프록시를 사용해서 구현했기 때문에
증설된 인스턴스의 ip를 자동으로 nginx 설정파일에 ip를 직접 추가가 아닌 DNS를 사용해서 추가하도록 수정할 것이다.
DNS를 사용해서 로드밸런싱하기
private DNS 탭에서 내부적으로 사용 가능한 dns를 생성할 수 있다.
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'backend_server=$upstream_addr';
# Define the resolver to use for DNS lookups
resolver 127.0.0.1(예시); # 프라이빗 DNS 서버의 IP 주소
resolver_timeout 10s;
upstream nginx {
server your-private-dns-name.nhncloud.internal:8080;
}
server {
location / {
proxy_pass http://nginx;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# gzip on;
}
그리고 nginx.conf 파일을 수정하면 된다.
이전 설정 파일과 비교해서 추가된 부분은 resolver와 upstream이다.
resolver 127.0.0.1(예시); # 프라이빗 DNS 서버의 IP 주소
resolver_timeout 10s;
- resolver: DNS 조회를 수행할 DNS 서버의 IP 주소를 설정한다.
- resolver_timeout: DNS 조회의 타임아웃 시간을 설정한다.
upstream nginx {
server your-private-dns-name.nhncloud.internal:8080;
}
백엔드 서버 그룹을 정의하는 upstream에 프라이빗 DNS를 포함시켰다.
DNS 이름으로 여러 ip 주소를 반환할 수 있기 때문에 이 설정으로 nhn 클라우드의 프라이빗 dns에서 인스턴스의 ip 주소 목록을 동적으로 관리한다.
오토스케일링을 사용할 수 있는 시나리오
1) 전자상 거래 웹사이트
전자상 거래 웹사이트에서는 제품 출시, 할인, 시즌 행사 등으로 트래픽 변동이 심할 때가 있다.
오토스케일링으로 트래픽 증가에 따라 웹사이트 성능을 유지할 수 있다.
구성 요소
- nginx: 프론트엔드에서 리버스 프록시 및 로드 밸런서 역할을 수행한다.
- 백엔드 웹 서버: 여러 서버 인스턴스에서 애플리케이션을 실행한다.
- 오토스케일링: CPU 사용률이 80% 초과하는 등의 조건에 맞춰 서버 인스턴스 수를 자동으로 조정한다.
2) 게임 서버
게임의 인기도 또는 이벤트, 시간대에 따라 게임 서버의 트래픽이 크게 변동할 것이다.
따라서 오토스케일링을 통해 트래픽에 따라 서버 리소스를 자동으로 조정할 수 있다.
구성 요소
- nginx: 프론트엔드에서 리버스 프록시 및 로드 밸런서 역할을 수행한다.
- 백엔드 웹 서버: 여러 서버 인스턴스에서 애플리케이션을 실행한다.
- 오토스케일링: CPU 사용률이 80% 초과하는 등의 조건에 맞춰 서버 인스턴스 수를 자동으로 조정한다.
'네트워크 캠퍼스 > 3차 프로젝트' 카테고리의 다른 글
트래픽 폭주 제어하기 (0) | 2024.08.19 |
---|---|
federation 심화 - 인스턴스별로 라벨처리하기 (0) | 2024.08.16 |
프로메테우스 페더레이트 설정하기 + 알람 등록하기 (0) | 2024.08.13 |
nginx 설정파일 내의 아이피가 중복되는 문제와 무중단 배포가 안 되는 문제 해결하기 (0) | 2024.08.13 |
블루/그린 방식으로 무중단 배포하기 (0) | 2024.08.13 |