Auto Scaling
인스턴스를 자동으로 확장하고 축소하는 기능으로, 사용자가 정의한 조정 정책에 따라 인스턴스 수가 증가되거나 축소된다.
ex) 서버의 로드가 증가(감소)하면 인스턴스 개수가 추가(감소)됨
위 그림처럼 오토 스케일링 그룹을 생성하면, 이 그룹은 최초로 가질 인스턴스 개수, 최대로 가질 인스턴스 개수를 가진다.
그리고 어떤 상황에서 오토 스케일링이 일어날지 추가로 설정해줘야 하는데, 구성 요소는 아래와 같다 :
시작 템플릿 : 어떤 이미지를 활용할지 설정
조정 옵션 : 오토 스케일링이 일어나는 조건 설정
NHN Cloud에서의 설정 방법
이미지는 미리 Instance에서 생성한 Priavate 인스턴스의 이미지를 사용하였다.
로드밸런서 생성
스케일링 그룹 생성
전체적인 생성 과정은 인스턴스 생성과 동일하게 흘러가고, 스케일링 그룹 정보 부분부터 살펴보자 :
위와 같이 설정해주었다.
Private DNS 이용
초기 로드밸런싱은 public 인스턴스에서 Nginx의 Reverse Proxy를 사용해서 구현했기 때문에
Nginx 설정파일에 IP를 직접 추가하는 방식이 아닌, 증설된 인스턴스의 IP를 DNS를 이용하여 자동으로 추가하도록 수정해보자.
(NHN Cloud의 콘솔 창에서, Network - Private DNS에서 설정할 수 있다.)
생성 후에는 nginx의 설정을 변경해주어야 한다.
http {
...
log_format main ...
'backend_server=$upstream_addr'; # 추가됨
# Define the resolver to use for DNS lookups
resolver 127.0.0.1(예시);# 프라이빗 DNS 서버의 IP 주소
resolver_timeout 10s;
변경된 내용을 먼저 확인해보자면 upstream과 resolver부분이다.
resolver : DNS 조회를 수행할 DNS 서버의 IP 주소 설정
resolver_timeout : DNS 조회의 타임아웃 시간을 설정
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;
}
}
백엔드 서버 그룹을 정의하는 upstream에 프라이빗 DNS를 포함시켰다.
DNS 이름으로 여러 IP 주소를 반환할 수 있기 때문에 해당 설정으로 NHN Cloud의 Private DS에서 인스턴스의 IP 주소 목록을 동적으로 관리한다.
아래 코드 예시 전문을 올려두었다.
# Nginx 설정 파일 열기
sudo nano /etc/nginx/nginx.conf
# 수정 후 아래 명령어로 적용
sudo systemctl restart nginx
# 전체 코드 예시
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;
}
'🌥️Cloud Study🌥️ > Etc' 카테고리의 다른 글
[ Database ] DB 이중화, MySQL Replication 설정 (1) | 2024.08.21 |
---|---|
[ 트래픽 ] 트래픽 폭주 제어 -1 (시나리오 예시 및 스트레스 테스트) (0) | 2024.08.19 |
[ 모니터링 ] Prometheus Federation 설정 -2 (0) | 2024.08.19 |
[ 모니터링 ] Grafana의 Alerting 이용, 인스턴스 다운 시 메일 알림 전송 (0) | 2024.08.13 |
[ Logging ] Log Reporting, 이메일로 로그 전송하기 (0) | 2024.08.13 |