-
AWS Auto Scaling 적용하기 (Load balancer를 이용한 부하분산)네트워크 & 인프라 2022. 4. 14. 20:26
이번에는 AWS의 Auto Scaling을 이용하여 확장성에 문제가 있는 경우 scale out을 통해 부하분산이 이루어지도록 적용하자.
기존의 pulic 서버는 미리 모두 종료해두었다.
배포 스크립트 작성
먼저 부하분산된 서버에 배포할 배포스크립트를 작성해두었다. 배포스크립트는 꼭 먼저 일반 사이트에서 정상적으로 작동하는지 확인하자.
#!/bin/bash git clone -b [브랜치] --single-branch [저장소 URL] sudo apt update sudo apt install -y default-jre sudo apt install -y default-jdk cd /home/ubuntu/infra-subway-deploy ./gradlew clean build nohup java -jar $(find ./* -name "*jar" | head -1) &
Launch Template 생성
먼저 시작 템플릿을 생성해주자. ubuntu 이미지는 최신버전으로 설정하여 안정성을 높여준다.
인스턴스는 기존 public 서버와 동일하게 설정해준다. 나의 경우 ec2 public 과 동일하게 키페어 선택, 인스턴스 유형(t3 medium) 선택을 해주었다.
다음도 동일하게 서브넷(a 혹은 b(퍼블릭)) 선택, 기존 보안그룹 -> Public 보안그룹선택 해준다.
여기서 어드밴스드 네트워크 구성을 선택하여 퍼블릭 ip 자동할당 활성화 선택해주어야 한다. (public 인스턴스에서는 eip를 사용하였음)
이 부분에서 시간이 꽤 걸렸는데 😭, ip 자동할당 부분을 선택해주지 않았으니 인터넷 연경이 되지 않아 배포스크립트 자체가 실행안되는 상황이 발생했었다.
그 다음 나의 경우는 s3에서 배포 스크립트를 다운받아 실행할 계획이었기 때문에 다음과 같이 s3 IAM 역할도 추가해주었다.
어플리케이션이 생성될 때 실행될 스크립트도 추가해주었다.
#!/bin/bash ## unzip, aws 설치 sudo apt-get update sudo apt install unzip curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install ## s3에서 배포 스크립트를 다운받아 권한 부여 및 실행 sudo -i -u ubuntu aws s3 cp s3://[저장폴더]/[파일이름] /home/ubuntu sudo -i -u ubuntu chmod 755 /home/ubuntu/[파일이름] sudo -i -u ubuntu /bin/bash /home/ubuntu/[파일이름]
Load Balancer 생성
Load Balancer 먼저 생성해주자. Application Load Balancer 선택해준다.
이름을 입력 후 internet-facing, ipv4를 선택해준다.
사용할 vpc, public 서브넷을 모두 선택해준다.
보안그룹을 새로 생성해서 22번 포트에는 내ip, 8080포트(서비스 포트), 80, 443에는 0.0.0.0/0 으로 동일하게 포트 열어준다.
타겟그룹 생성하는데 8080포트, 동일한 vpc 선택, instance 선택 후 아무 인스턴스도 일단 선택하지 않은 채로 타겟 그룹만 생성해준다.
다시 돌아와서 리스너에서 생성한 타겟그룹 대상으로 8080포트 설정해준다.
TLS 인증서 발급 및 리스너 추가
완성한 후에 TLS 인증서 발급 받아서 HTTPS 리스너에서 이용하도록 설정할 것이다. 기존에 public 서버에서 생성하였던 인증정보를 Aws의 Certificate Manager에 인증서를 추가해준다.
다시 로드밸런서의 리스너 설정에 들어가서 8080포트는 그대로 냅두고 443 포트를 8080포트로 포워드 하는 https 리스너 생성 후 인증서를 적용해준다.
Auto Scaling Group 생성
이제 생성한 로드밸런서 이용해서 Auto Scaling Group을 생성하자. 시작템플릿에서 미리 생성해둔 템플릿 선택 해준다.
사용할 vpc 선택하고 가용영역 서브넷 퍼블릭 서브넷(최소 두개이상 이어야함)으로 구성한다.
기존 로드밸런서 연결선택 후 생성한 로드밸런서 대상 그룹을 연결해준다.
원하는 용량, 최소용량, 최대용량 입력하고 대상 추적 조정 정책 선택하여 어느정도 cpu가 사용되었을 때 scale out을 적용할 지 선택한다.
ASG 생성 후 고급구성 편집을 통해 종료정책 적용가능하다.
DNS에 기존의 아이피 삭제하고 CNAME 이용해서 로드밸런서 DNS 적용해준다.
도메인으로 정상적으로 실행되는 것을 확인할 수 있다.
부하분산 확인
먼저 stress를 이용하여 cpu 부하를 최대로 실행해주면,
$ sudo apt-get stress
5분뒤에 자동으로 ec2가 생성 되는 것을 확인할 수 있다.
추가 5분을 더 적용하자 새로운 ec2 추가 생성함을 확인할 수 있다. (최대 3개까지 설정해두었음)
일정 시간이 지나면 오래된 instance 먼저 삭제하고 다시 최소 용량인 1개의 인스턴스를 유지하는 것을 확인할 수 있다.
(참고한 사이트)
NextStep 프로젝트 공방
https://intrepidgeeks.com/tutorial/week-8-2-ec2-autoscale-configuration-exercise
https://www.youtube.com/watch?v=aOAqH48Cyc8&t=220s&ab_channel=JustmeandOpensource
https://aws-hyoh.tistory.com/133
https://velog.io/@zkdlcl5050/%EB%A1%9C%EB%93%9C-%EB%B0%B8%EB%9F%B0%EC%8B%B1
http://devstory.ibksplatform.com/2018/02/aws.html
https://galid1.tistory.com/369?category=765379
https://aws-diary.tistory.com/10
https://suyeon96.tistory.com/46
'네트워크 & 인프라' 카테고리의 다른 글
SSH 별칭으로 접속 시도시 RSA 공유키 충돌 문제 발생 (0) 2022.05.30 그림으로 공부하는 IT 인프라 구조 정리 (0) 2022.04.15 화면 응답 개선하기 (0) 2022.04.14 서버 진단하기 ( + 로깅, 모니터링) (0) 2022.04.14 부하 테스트 ( + k6, grafana + influxdb, ngrinder) (0) 2022.04.14