고가용성 및 스케일링성 : ELB 및 ASG
고가용성 및 스케일링성
- 확장성(Scalability) : 애플리케이션 시스템이 조정을 통해 더 많은 양을 처리할 수 있다는 의미.
- 수직 확장성 : 인스턴스의 크기를 확장하는 것.
ex. 데이터베이스와 같이 분산되지 않은 시스템에서 사용, RDS, ElastiCache - 수평 확장성(=탄력성) : 애플리케이션에서 인스턴스나 시스템의 수를 늘리는 방법.
- 분배 시스템이 있다는 것을 의미함.
- 수직 확장성 : 인스턴스의 크기를 확장하는 것.
- 고가용성(High Availability) : 애플리케이션 또는 시스템을 적어도 둘 이상의 AWS의 AZ나 데이터 센터에서 가동 중이라는 걸 의미함.
고가용성의 목표 : 데이터 센터에서의 손실에서 살아남는 것.
스케일 아웃
: 인스턴스의 수가 늘어난 것.스케일 인
: 인스턴스의 수가 줄어든 것.
Elastic Load Balancing (ELB) 개요
- Load Balancer : 서버 혹은 서버셋으로 트래픽을 백엔드나 다운스트림 EC2 인스턴스 또는 서버들로 전달하는 역할
- 더 많은 user가 연결될 수록 EC2 인스턴스로 가는 부하가 더욱 분산됨.
- 하지만 어떤 인스턴스에 연결될지는 알 수 없다.
- 필요한 이유 : 부하를 다수의 다운스트림 인스턴스로 분산하기 위해서.
- Elastic Load Balancer = Managed Load Balancer
- ELB는 무조건 쓰는 것이 좋다.
Health Checks
- Elastic Load Balancer가 EC2 인스턴스의 작동이 올바르게 되고 있는지의 여부를 확인하기 위해 사용됨.
- 상태 확인은
포트
와라우트
에서 이루어짐. - ex. 응답이 200이 아니라면, 인스턴스는 unhealthy의 상태이기 때문에 ELB는 그쪽으로 트래픽을 보내지 않는다.
Types of Load Balancer
- Classic Load Balancer - CLB : Old Generation
- Application Load Balancer - ALB : New Generation
- Network Load Balancer - NLB : New Generation
- Gateway Load Balancer - GWLB : layer 3, IP protocol에서 작동
- 결론적으로, 더 많은 기능을 가지고 있는 신형 로드 밸런서를 사용하는 것이 권장됨.
Load Balancer Security Groups
- User는 HTTP or HTTPS를 사용해 어디서든 로드 밸런서에 접근이 가능함.
- EC2 인스턴스의 보안 그룹 규칙은 포트 80에서 HTTP 트래픽을 허용하며 Source는 IP 범위가 아니라 보안 그룹이 되어야 함.
- EC2 인스턴스의 보안 그룹을 로그 밸런서의 보안그룹으로 연결함.
Classic Load Balancer (CLB)
- 이제 AWS에서 지원되지 않으며, 곧 AWS 콘솔에서 사용할 수 없다.
Application Load Balancer (v2)
- 7계층, HTTP 전용 로드 밸런서
- HTTP/2, WebSocker 지원
- 리다이렉트 지원
- 경로 라우팅 지원
- 마이크로 서비스나 컨테이너 기반 애플리케이션에 가장 좋은 로드 밸런서
- ex. Docker & Amazon ECS
- 포트 매핑 기능이 있기 때문에 ECS 인스턴스의 동적 포트로의 리다이렉션을 가능하게 해줌.
- 하나만으로도 다수의 애플리케이션을 처리할 수 있음.
Target Groups : 대상 그룹
- EC2 instances - HTTP
- ECS tasks(작업) - HTTP
- Lambda functions - HTTP
- IP 주소들의 앞에도 위치할 수 있음. (꼭 사설 주소여야만함)
- 여러 대상 그룹으로 라우팅할 수 있음.
- 상태 확인은 대상 그룹 레벨에서 이루어짐.
Part 1
01. 먼저 EC2 인스턴스를 2개 만든다.
사진첨부
사진첨부
사진첨부
#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
사진첨부
EC2 인스턴스가 2개 완성이 된 것을 확인할 수 있다.
사진첨부
IPv4 퍼블릭 주소로 잘 작동이 되는 것도 확인할 수 있다.
로드 밸런서
사진첨부
사진첨부
로드 밸런서의 종류별 차이점을 잘 알아두도록 하자.
사진첨부
사진첨부
사진첨부
모든 가용영역에 배포해줄 것이다.
사진첨부
오직 HTTP만 허용가능하게 만들 것이다.
사진첨부
사진첨부
Target Group = 내가 만든 EC2 인스턴스
사진첨부
사진첨부
사진첨부
인스턴스 등록하기
사진첨부
Target Group이 잘 생성된 것을 확인할 수 있다.
사진첨부
사진첨부
ALB가 잘 만들어졌다.
- DNS를 통해 사이트를 접속해 보면 부하분산이 일어나고 있는 것을 확인할 수 있다.
사진첨부
- 만약 한 인스턴스가 중지됐을 경우 정상적으로 작동하는 인스턴스로만 작동이 가능하게 한다.
Part 2
- Network Security (네트워크 보안)
로드밸런서를 통해서만
접근이 가능하도록 하기.
사진첨부
사진첨부
사진첨부
현재 HTTP는 보안 그룹으로부터 오는 모든 트래픽을 허용하고 있다.
사진첨부
기존의 HTTP는 지우고 Load Balancer로 새 규칙을 만든다.
결과)
- EC2 인스턴스의 주소를 넣으면 화면을 새로 고침하는 것처럼
타임아웃
이 발생한다. 인스턴스에 접속이 불가한 것처럼 보인다. (인스턴스에 직접 접근하는 것을 막았음.) - 반면 로드 밸런서 (주소로 들어간) 화면에서는 여전히 인스턴스에 접근할 수 있다.
- 애플리케이션 로드 밸런서에 관한 규칙
사진첨부
사진첨부
규칙을 언제든 추가하거나 삭제할 수 있다.
Network Load Balancer (NLB) 개요
- Lyver 4, TCP, UDP
- 성능은 매우 높음
- 가용 영역별로 하나의 고정 IP를 가짐.
- 고성능, TCP, UDP, 정적 IP -> NLB
Target Groups
- EC2 Instances
- IP Address - Private IPs
- ALB앞에 배치
- Health Check :
TCP, HTTP, HTTPS
Protocols
NLB Health Check가 Unhealth일 때
- NLB에서는 밸런서의 보안 그룹을 정의하지
않음
.
Gateway Load Balancer (GWLB) 개요
- 가장 최근의 로드 밸런서
- 모든 로드 밸런서 보다 낮은 계층에서 작동함 : L3 (layer 3)
- Transparent Network Gateway (투명 게이트웨이)
- Load Balancer
- Transparent Network Gateway (투명 게이트웨이)
- 6081번 포트의 GENEVE 프로토콜을 사용하자 (시험에서) -> GWLB
Target Groups
- EC2 Instances
- IP Addresses - Private IPs
Elastic Load Balancer - Sticky Sessions(고정 세션)
- 요청에 응답하기 위해 백엔드에 동일한 인스턴스를 갖는 것임.
- CLB, ALB에서 설정할 수 있음.
Coockie
가 만료되면 클라이언트가 다른 EC2 인스턴스로 리디렉션 된다는 것임.
Sticky Sessions - Cookie Names
- Application-based Cookies
- 사용자 정의 쿠키
- Application cookie
- 사용자 정의 쿠키
- Duration-based Cookies
- 로드밸런서에서 생성되는 쿠키
- 로드밸런서에서 생성되는 쿠키
사진첨부
사진첨부
Elastic Load Balancer - Cross Zone Load Balancing
- 교차 영역 밸런싱
- ALB에 기본으로 적용되어 있음.
- NLB, GWLB -> 비활성화 되어있음. 비용 내야 됨.
- CLB -> 비활성화 되어 있음. 비용 필요 없음.
Elastic Load Balancer - SSL 인증서
- SSL/TLS 인증서
- SSL
보안 소켓 계층
을 의미, 연결을 암호화하는 데 사용 - TLS는 새로운 버전의 SSL,
전송 계층 보안
을 의미 - SSL 인증서는 만료날짜가 있어서 주기적으로 갱신해 인증 상태를 유지해야 함.
Load Balancer - SSL Certificates
- Users -> HTTPS (S가 붙은 건 SSL 인증서를 써서 암호화해 안전하다는 뜻)
- ACM = AWS Certificate Manager (AWS 인증서 관리자)
- HTTP listener를 구성할 때 반드시
HTTPS
listener로 구성해야 함.
SSL - Server Nama Indication
- 중대한 문제의 해결책
- 여러 개의 SSL 인증서를 하나의 웹 서버에 로드해 하나의 웹 서버가 여러 개의 웹 사이트 지원할 수 있게 해줌.
- ALB, NLB, CloudFront에서만 작동함.
Elastic Load Balancer(ELB) - 연결 드레이닝
- Connection Draining - for CLB
- Deregistration Delay - for ALB & NLB
- value : 0 - 드레이닝이 일어나지 X
Auto Scaling Group(ASG) 개요
- ASG 목표 : 스케일 아웃, 스케일 인
- ASG가 로드 밸런서와 페어링 하는 경우 ASG에 속한 모든 EC2 인스턴스가 로드 밸런서에 연결된다.
- Free
ASG 생성
- EC2를 먼저 모두 종료한다.
사진첨부
사진첨부
사진첨부
사진첨부
사진첨부
사진첨부
사진첨부
#!/bin/bash
# Use this for your user data (script from top to bottom)
# install httpd (Linux 2 version)
yum update -y
yum install -y httpd
systemctl start httpd
systemctl enable httpd
echo "<h1>Hello World from $(hostname -f)</h1>" > /var/www/html/index.html
사진첨부
사진첨부
사진첨부
사진첨부
사진첨부
ASG가 잘 생성되었다.
ASG는 EC2 인스턴스를 한 개 생성해 줄 것이다.
사진첨부
새로운 Instance가 생성된 것을 확인할 수 있다.
사진첨부
역시나 새로운 Instance가 ASG에 의해 만들어졌다.
Auto Scaling Group - 조정 정책
Dynamic Scaling Polices
- 동적 스케일링 정책은 세 가지 유형이 있음.
- Target Tracking Scaling - 대상 추적 스케일링
- Simple / Step Scaling - 단순 / 단계 스케일링
- Scheduled Actions - 예약된 작업
- Target Tracking Scaling - 대상 추적 스케일링
Predictive Scaling - 예측 스케일링
- 지속적으로 예측 생성
- 해당 예측을 기반으로 사전에 스케일링 작업이 예약됨.
Good metrics to scale on
- CPU 사용량
- 대상별 요청의 수
- 평균 네트워크 입출력량 (네트워크 병목 현상 발생 예측)
- Any custom metric
Scaling Cooldowns - 스케일링 휴지
- 스케일링 작업이 끝날 때마다 기본적으로 5분 혹은 300초의 휴지 기간을 갖는 것.
- 휴지 기간에는 ASG가 추가 인스턴스를 실행 또는 종료할 수 없음.
- 즉시 사용이 가능한 AMI를 이용하여 EC2 인스턴스 구성 시간을 단축하고 이를 통해 좀 더 신속히 처리하는 것이 좋음.
Auto Scaling Group - 스케일링 정책
사진첨부
3가지로 나누어진다.