클라우드,가상화,방화벽

[AWS] Load Balancer, Auto Scaling-2

흩노 2023. 7. 4. 19:25

Auto Scaling

어떠한 서비스를 만약 서버A 하나로 구동한다고 가정해 보자.

트래픽이 서버 한개로는 감당할 수 없는 양이 되는 순간 서버가 다운되서 작동이 멈출것이다.

이러한 문제를 해결하기 위한 방법은 두가지가 있다.

scale-up : 덩치가 커짐 : 서버 A의 CPU,GPU성능이 증가 RAM, Storge용량 증가

scale-out : 개수가 증가 : A라는 템플릿을 기반으로 A1, A2, A3로 늘어남

 

아마존 클라우드에서 Auto Scaling을 하면 스케일 아웃방식을 사용하는데 이 아키텍처의 가장 큰 장점 중 하나는 확장의 유연성에 있다.

스케일 아웃 방식으로 시스템을 구축한 상황에서는 서버를 필요한 만큼만 도입해 놓고, 장기적인 용량 증가 추이를 예측할 필요 없이 그때그때 필요한 만큼 서버를 추가해 용량과 성능을 확장(pay-as-you-grow)할 수 있게 된다.

 


기존과 같은 VPC 환경에서 진행한다.(유입으로 온 사람은 전에 AWS VPC글을 보시길...)

보안그룹 규칙은 다음과 같다.

 

퍼블릭 서브넷에서 새로운 인스턴스를 생성(Ubuntu:20.04)

wget https://dlcdn.apache.org/tomcat/tomcat-8/v8.5.90/bin/apache-tomcat-8.5.90.zip
apt -y update && apt -y install openjdk-8-jdk unzip
unzip apache-tomcat-8.5.90.zip
rm -rf apache-tomcat-8.5.90.zip
mv apache-tomcat-8.5.90/ tomcat
chmod 777 -R tomcat
./tomcat/bin/startup.sh

 

서비스 확인

# 서비스가 잘 뜨는지 확인


<재부팅시 톰캣 동작을 위한 스크립트>

vi /etc/init.d/tomcat.sh
#!/bin/bash
export CATALINA_BASE=/root/tomcat
# See how we were called.
case "$1" in
  start)
  echo -n "Starting tomcat: "
  $CATALINA_BASE/bin/startup.sh
  echo
  ;;
  stop)
  echo -n "Shutting down tomcat: "
  $CATALINA_BASE/bin/shutdown.sh
  echo
  ;;
  restart)
  $0 stop
  sleep 5
  $0 start
  ;;
  *)
  echo "Usage: $0 {start|stop|restart}"
  exit 1
esac
exit 0
update-rc.d tomcat.sh defaults
#만든 스크립트가 실행될 수 있도록 업데이트

chmod 755 /etc/init.d/tomcat.sh
# 스크립트를 실행할 수 있는 권한 부여

ln -s /etc/init.d/tomcat.sh /etc/rc3.d/S81tomcat.sh
ln -s /etc/init.d/tomcat.sh /etc/rc2.d/S81tomcat.sh
ln -s /etc/init.d/tomcat.sh /etc/rc5.d/S81tomcat.sh
ln -s /etc/init.d/tomcat.sh /etc/rc0.d/K26tomcat.sh
ln -s /etc/init.d/tomcat.sh /etc/rc6.d/K26tomcat.sh
#심볼릭링크

<로드밸런서 실행시 인스턴스IP확인을 할 수 있는 웹페이지 스크립트 생성>

vi ./tomcat/webapps/ROOT/test.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
    	<head><title>hello world</title></head>
    	<body>
    	<h2>
            	TOMCAT TEST<br><br>
            	time : <%= new java.util.Date()%>
            	<%@ page import="java.net.InetAddress" %><br>
            	<%InetAddress inet= InetAddress.getLocalHost();%>
            	WAS ip : <%=inet.getHostAddress()%>
    	</h2>
 
 
    	</body>
</html>
./tomcat/bin/shutdown.sh
./tomcat/bin/startup.sh

 

# 재시작하고 IP가 잘 뜨는지 확인

 


<오토스케일링>

 

apt -y install stress

# 위에서 만든 톰캣이미지로 인스턴스를 하나 더 만든후 스트레스 패키지를 설치한다

vi /etc/init.d/stress.sh
#!/bin/bash
sudo stress --cpu 1 --timeout 1200

cpu 하나의  프로세스로 부하테스트 1200초간.

chmod 755 /etc/init.d/stress.sh
update-rc.d stress.sh defaults

ln -s /etc/init.d/stress.sh /etc/rc3.d/S81stress.sh
ln -s /etc/init.d/stress.sh /etc/rc2.d/S81stress.sh
ln -s /etc/init.d/stress.sh /etc/rc5.d/S81stress.sh
ln -s /etc/init.d/stress.sh /etc/rc0.d/K26stress.sh
ln -s /etc/init.d/stress.sh /etc/rc6.d/K26stress.sh

# 심볼릭 링크 설정

인스턴스를 재부팅한 후 top 명령어를 이용해서  cpu 부하가 100으로 올라가는지 확인한다.


# 잘된다면 중지시키고 해당 인스턴스로 이미지를 만든다

 

# 오토스케일링에 사용할 ‘시작 템플릿’을 생성한다

 

-이미지 = os, app

-템플릿 = 이미지+인스턴스유형+스토리지, 네트워크설정, 보안그룹

1.로드밸런서 생성

#인스턴스는 포함시키지 않은채 타겟그룹을 만든다

# 마지막으로 ASG를 만들자

# 부팅되는 시간동안은 헬스체크를 하지않도록 30초 정도 기다려줌.

# 인스턴스의 평균 CPU 사용률이 70%(임계값)를 넘으면 인스턴스를 하나 생성하게끔

 

# 대기시간 : 한대를 없앤후 30초 기다리겠다.

#CPUUtilization 으로 검색

 

# CPU 사용량이 50% 이하로 떨어지면 인스턴스를 삭제하겠다

# 경보상태후

#인스턴스가 삭제되는것을 확인할 수 있다

# 3개가 삭제되고 한개는 ‘최소용량’ 으로 인해 남아있다.


내용 요약 및 nginx 웹서버로 Auto Scaling 구축

1.nginx서버를 구성하고 인덱스파일을 auto scaling test 작성, stress 설치 부하 확인

2.이를 이미지화

3.시작템플릿 생성(서브넷 선택X->오토스케일링시 서브넷1,2 에서 자동으로 선택)

4.인스턴스를 선택하지 않은 타겟그룹 생성(헬스체크on)

5.로드밸런서 생성(퍼블릿 서브넷 맵핑)

6.ASG생성(만들었던 시작템플릿 선택, 만들었던 로드밸런서,타겟그룹 연결)

7.크기증가 감소 정책은 다음과 같이 된다.

 

 

웹으로 접속시

 

7.인스턴스 추가 확인.

인스턴스에서 top으로 부하 확인

부하가 계속되므로 인스턴스가 증가하여야 한다.

max 3까지 증가함.

 

8.인스턴스 감소 확인.

생성된 인스턴스에서 부하가 있는 프로세스를 kill-9 명령어로 .