AWS (수평확장)

Numberbeen·2023년 1월 9일
0

AWS

목록 보기
7/13
post-thumbnail

🔆 Auto Scaling Group

Auto Scaling 은 미리 정해 놓은 규칙에 따라 워크로드(작업량)를 자동으로 확대 또는 축소할 수 있는 기술 로 클라우드가 제공하는 탄력성에 의해 만들어지고, 사용자의 요구 수준을 반영할 수 있는 기술

Auto Scaling 을 이요하면 처리 요구량이 급등하는 시기, 즉 피크시간에 워크로드에 맞춰 새 리소스를 자동으로 추가하고 환경설정 하고, 처리 요구량이 줄어들면 해당 리소스를 감소 시키기 때문에 과잉 프로비전을 할 필요성이 사라진다.

프로비전(provision)
필요한 컴퓨팅 리소스들을 필요한 곳에 배치, 유휴 자원들을 다시 회수하는 일련의 작업들을 의미.

✨ Auto Scaling 의 장점

  • 동적 스케일링 : Auto Scaling의 가장 큰 장점은 사용자의 요구 수준에 따라 리소스를 동적으로 스케일링 할 수 있다는 점 이다. 스케일 업 할 수 있는 서버의 수에는 제한이 없고, 필요한 경우 서버 두 대에세 수백 ~ 수만 대의 서버로 즉시 스케일 업할 수 있다.

  • 로드 밸런싱 : Auto Scaling 은 리소스를 동적으로 스케일업 혹은 스케일다운 한다. 로드밸런서와 함께 사용하면, 다수의 EC2 인스턴스에게 워크로드를 효과적으로 분배 할 수 있고, 다수의 AZ에 분포된 EC2 인스턴스에 대한 워크로드도 자동으로 분배하도록 설정 할 수 있다. 따라서 사용자가 정의한 규칙에 따라 워크로드를 효과적으로 관리가 가능 하다.

  • 타켓 트래킹 : 사용자는 특정 타켓에 대해서만 Auto Scaling 을 할 수 있다. 사용자가 설정한 타켓에 맞춰 EC2 인스턴스의 수를 조정한다.

  • 헬스 체크와 서버 플릿 관리 : Auto Scaling을 이용하면 EC2 인스턴스의 헬스 체크 상태를 모니터링 할 수 있다. 헬스 체크를 하는 과정에서 특정 인스턴스의 문제가 감지되면, 자동으로 다른 인스턴스로 교체 한다.

다수의 EC2 서버에서 애플리케이션을 호스팅 하는 경우, 이들 일련의 EC2 서버 집합을 AWS는 서버 플릿(Fleet)이라 부른다. Auto Scaling은 적정 수준의 서버 플릿 용량을 유지하는 데도 도움을 준다.

예를 들어, 어떤 기업의 애플리케이션이 6대의 EC2 서버에서 실행 중일 때 6대 서버에 대한 헬스 체크 상태를 모니터링 하다가 특정 서버에 문제가 생기면 즉시 대응 조치를 할 수 있다.

한 대 또는 그 이상의 서버가 다운 되면 Auto Scaling은 6대의 서버 인스턴스 처리 용량을 유지하기 위해 부족분만큼의 서버를 추가로 실행시키는 방식으로 서버 플릿을 유지한다.

✨ EC2 Auto Scaling 활용

Auto Scaling 은 EC2 인스턴스 뿐만 아니라 다른 인스턴스와도 결합 가능하지만, EC2 사용자에게 가장 인기 많은 서비스이다.
EC2 Auto Scaling 은 오직 EC2 서버라는 리소스만 대상한다.

시작 템플릿 (Launch Configuration)

Auto Scaling으로 인스턴스를 확장 또는 축소하려면 어떤 서버를 사용할지 결정 해야 한다. 이는 시작 템플릿을 통해서 가능하며, AMI 상세 정보, 인스턴스 타입, 키 페어, 시큐리티 그룹 등 인스턴스에 대한 모든 정보를 담고 있다.

만약 시작 템플릿을 사용하고 있지 않고 시작 템플릿을 생성하지 않으려는 경우에는 대신 시작 구성을 생성할 수 있다. 시작 구성은 EC2 Auto Scaling이 사용자를 위해 생성하는 EC2 인스턴스 유형을 지정한다는 점에서 시작 템플릿과 비슷하다. 사용할 AMI의 ID, 인스턴스 유형, 키 페어, 보안 그룹 등의 정보를 포함시켜서 시작 구성을 생성한다.

Auto Scaling 그룹 생성

Auto Scaling 그룹은 스케일업 및 스케인 다운 규칙의 모음으로 EC2 인스턴스 시작부터 삭제까지의 모든 동작에 대한 규칙과 정책 을 담고 있다. 따라서 Auto Scaling 그룹을 생성하기 위해서는 스케일링 정책 및 유형에 대해서 잘 숙지하고 있어야 한다.

Scaling 유형

  • 인스턴스 레벨 유지
    기본 스케일링 계획 으로도 부르며, 항상 실행 상태를 유지하고자 하는 인스턴스의 수를 지정할 수 있다. 일정한 수의 인스턴스가 필요한 경우 최소, 최대 및 원하는 용량에 동일한 값을 설정하면 된다.

  • 수동 스케일링
    기존 Auto Scaling 그룹의 크기를 수동으로 변경할 수 있다. 수동 스케일링을 선택하면 사용자가 직접 콘솔이나, API, CLI 등을 이용해 수동으로 인스턴스를 추가 또는 삭제 해야 한다. ❗️해당 방식은 추천하지 않는 방식

  • 예측 스케일링
    트래픽의 변화를 예측할 수 있고, 특정 시간대에 어느 정도의 트래픽이 증가하는지 패턴을 파악하고 있다면 일정별 스케일링을 사용하는 것이 좋다.
    예를 들어 낮 시간대에는 트래픽이 최고치에 이르고 밤 시간대에는 트래픽이 거의 없다면 낮 시간대에 서버를 증설하고 밤 시간대에 스케일 다운 하는 규칙을 추가하면 된다.

  • 동적 스케일링
    수요 변화에 대응하여 Auto Scaling 그룹의 용량을 조정하는 방법을 정의한다. 이 방식은 CloudWatch가 모니터링 하는 지표를 추적하여 경보 상태일 때 수행할 스케일링 규칙을 정한다.
    예를 들어 CPU 처리 용량의 80% 수준까지 급등한 상태가 5분 이상 지속될 경우 Auto Scaling이 작동돼 새 서버를 추가하는 방식.
    이와 같은 스케일링 정책을 정의 할 때는 항상 스케일 업과 스케일 다운 두 가지의 정책을 작성 해야 한다.

    EC2 Auto Scaling은 다음과 같은 유형의 동적 스케일링 정책을 지원한다.

  • 타켓 트랙킹 스케일링 : 미리 정의된 성능 지표를 이용하거나, 커스텀 성능지표(custom metric)을 사용하여 타겟 값으로 설정 한다.

  • 단순 스케일링 : 단 하나의 스케일링 설정에 따라 그룹의 현재 용량을 늘리거나 줄인다.
    예를 들어 CPU 활용지표가 80% 에 도달할 때 하나의 인스턴스를 추가하고, 40% 미만으로 떨어질 때 인스턴스 하나를 감소시키는 방식이 있다.
    이때 새 인스턴스를 시작 혹은 정지 시키기 위한 대기 시간도 정의할 수 있으며 이를 쿨다운 기간이라고 부른다.

  • 단계 스케일링 : 단순 스케일링은 특정 이벤트에 대해 매번 같은 액션을 한다면, 단계 스케일링은 좀 더 세분화 해서 단계를 나누어 규칙을 추가할 수 있다.

인스턴스 삭제 정책

Auto Scaling은 스케일업 정책은 물론 스케일다운 정책도 반영한다. 스케일다운 정책이 적용되면, EC2 인스턴스가 삭제되며, 서버를 셧다운 하는 것은 리소스 관리 측면에서도 꼭 필요한 일이다.

스케일다운 정책에서는 명확하게 몇 개의 인스턴스를 삭제할 것인지 정의할 수 있으며, 어떤 인스턴스를 먼저 셧다운 할 것인지 환경 설정을 통해 결정할 수 있다.

인스턴스 삭제 정책은 매우 다양하지만 아래 두 가지가 대표적이다.

  • 사용자의 서버 플릿에서 가장 오랫동안 실행된 서버를 삭제한다. 가장 오랫동안 실행된 서버일수록 패치 수준이 낮고 메모리 누수 등의 문제가 누적해 있을 가능성이 크기 때문에 이를 삭제함으로써 최신의 성능 기준을 유지할 수 있다는 장점이 있다.

  • 시간 단위 과금이 임박한 서버를 삭제합니다. 이 서버를 삭제하면 Auto Scaling의 특유 장점을 최대한 살려, 과금 부담을 줄일 수 있다.


🔆 Elastic Load Balancing

✨ 로드 밸런싱이란?

서비스 규모가 커지면 물리/가상 서버 한 대로는 모든 서비스를 수용할 수 없게 된다.

서버 한 대로 서비스를 제공할 수 있는 용량이 충분하더라도 서비스를 단일 서버로 구성하면 해당 서버의 애플리케이션, 운영체제, 하드웨어에 장애가 발생했을 때 정상적인 서비스를 제공할 수 없다. 서비스 가용성을 높이기 위해 하나의 서비스는 보통 두 대 이상의 서버로 구성하는데, 각 서버의 IP 주소가 다르므로 사용자가 서비스를 호출할 때는 어떤 IP로 서비스를 요청할지 결정해야 한다. 이런 경우 로드 밸런서 를 사용한다.

로드 밸런서에는 동일한 서비스를 하는 다수의 서버가 등록되고 사용자로부터 서비스 요청이 오면 로드 밸런서가 받아 사용자별로 다수의 서버에 서비스 요청을 분산시켜 부하를 분산한다.

이러한 작동을 로드 밸런싱 이라고 하며, 부하 분산 이라고도 한다.
이와 같은 방식의 서비스를 AWS에서도 제공한다. 이를 Elastic Load Balancing 이라고 하며, 아래에서 더 자세히 알아보자.

✨ ELB 란?

Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산 합니다. 등록된 대상의 상태를 모니터링 하면서 상태가 양호한 대상으로만 트래픽을 라우팅 한다.

✨ ELB의 장점

  • 고가용성 : ELB는 고가용성 아키텍처를 구현하는데 도움을 준다. ELB는 다수의 EC2 인스턴스, 컨테이너 등에 트래픽을 분산 시키며 다수의 AZ에 배포된 EC2 인스턴스에 애플리케이션을 배포해 트래픽을 여러 AZ로 분산 시킬 수 있다. 이 때문에 하나의 AZ가 모두 다운 돼도 사용자의 애플리케이션은 문제 없이 실행 상태를 유지할 수 있다.

  • 탄력성 : ELB의 최대 장점은 자동적 확장성 이다. 관리자는 인스턴스 추가 또는 삭제를 위한 어떤 수작업도 할 필요가 없으며, 수동으로 뭔가를 할 여지도 없다.

  • 안전성 : 통합 인증관리, SSL 복호화, 포트 포워딩 등 다수의 보안 기능을 제공한다. 현대 웹사이트 운영자는 웹 애플리케이션 레벨에도 암호화 기법을 적용하며, 다수의 보안 정책을 제공한다.

  • 높은 처리량 : ELB는 트래픽 증가를 처리할 수 있도록 설계되었으며 초당 수백만 개의 요청을 로드 밸런싱할 수 있다. 또한, 갑작스럽고 변동이 심한 트래픽 패턴도 처리할 수 있다.

작동 방식

로드 밸런서는 클라이언트에 대한 단일 접점으로, 클라이언트에서 오는 트래픽을 허용하고, 하나 이상의 가용 영역에서 등록된 대상(EC2 인스턴스)으로 요청을 라우팅한다. 또한 로드 밸런서는 등록된 타겟의 상태를 모니터링하고 정상 타겟으로만 트래픽이 라우팅 되도록 한다. 로드 밸런서가 비정상 타겟을 감지하면, 해당 타겟으로 트래픽 라우팅을 중단한다. 그런 다음 타겟이 다시 정상으로 감지되면 트래픽을 해당 타겟으로 다시 라우팅한다.

리스너는 구성한 프로토콜 및 포트를 사용하여 클라이언트의 연결 요청을 확인.
리스너에 대해 정의한 규칙에 따라 로드 밸런서가 등록된 타겟으로 요청을 라우팅하는 방법이 결정된다. 각 규칙은 우선 순위, 하나 이상의 작업, 하나 이상의 조건으로 구성. 규칙에 대한 조건이 충족되면 작업이 수행된다. 각 리스너에 대한 기본 규칙을 정의해야 하며, 필요에 따라 추가 규칙을 정의할 수 있다.

각 타겟 그룹은 지정한 프로토콜과 포트 번호를 사용하여 EC2 인스턴스 같은 하나 이상의 등록된 타겟으로 요청을 라우팅한다. 여러 대상 그룹에 타겟을 등록할 수 있다. 타겟 그룹 기준으로 상태 확인을 구성할 수 있다. 로드 밸런서의 리스너 규칙에서 지정한 타겟 그룹에 등록된 모든 타겟에서 헬스 체크를 수행.

ELB 의 다양한 유형

Application Load Balancer

Application Load Balancer는 OSI 모델의 레이어 7에 해당하며, HTTP와 HTTPS를 지원. 로드 밸런서는 요청을 받으면 우선 순위에 따라 리스너 규칙을 평가하여, 적용할 규칙을 결정한 다음 규칙 작업의 타겟 그룹에서 타겟을 선택한다. 애플리케이션 트래픽의 콘텐츠를 기반으로 다른 타겟 그룹에 요청을 라우팅하도록 리스너 규칙을 구성할 수 있다.

ALB에서는 헤더 수정이 가능합니다. 예를 들어, X-Forwarded-For 헤더에 클라이언트 IP주소를 넣듯 필요한 정보를 헤더로 삽입할 수 있다.

또한 ALB의 호스트 기반 라우팅을 통해 HTTP 헤더의 Host 필드에 따라 클라이언트 요청을 라우팅 할 수 있고, 경로 기반 라우팅을 통해 HTTP 헤더의 URL 경로에 따라 클라이언트 요청을 라우팅 할 수 있다.

Network Load Balancer

Network Load Balancer는 TCP 로드 밸런서라고 부르며, OSI 모델의 레이어 4에서 작동합니다. 로드 밸런서가 연결 요청을 받으면 기본 규칙의 타겟 그룹에서 대상을 선택합니다. 리스너 구성에 지정된 포트에서 선택한 타겟에 대한 TCP 연결을 열려고 시도한다.

TCP 트래픽의 경우, 로드 밸런서는 프로토콜, 원본 IP 주소, 원본 포트, 타겟 IP 주소, 타겟 포트, TCP 시퀀스 번호에 따라 흐름 해시 알고리즘을 사용하여 타겟을 선택한다. 클라이언트로부터의 TCP 연결은 소스 포트와 시퀀스 번호가 서로 다르므로 다른 타겟에 라우팅될 수 있습니다. 각 TCP 연결은 연결 수명 동안 하나의 타겟에 라우팅된다.

UDP 트래픽의 경우, 로드 밸런서는 프로토콜, 원본 IP 주소, 원본 포트, 타겟 IP 주소, 타겟 포트에 따라 흐름 해시 알고리즘을 사용하여 타겟을 선택한다. UDP 흐름은 소스와 목적지가 동일하기 때문에 수명이 다할 때까지 일관되게 단일 타겟으로 라우트된다. 서로 다른 UDP 흐름에는 서로 다른 소스 IP 주소와 포트가 있으므로 다른 타겟으로 라우팅될 수 있다.

다중 AZ의 활용

Auto Scaling과 ELB를 활용해 애플리케이션을 구현할 때는 가능한 다중 AZ를 기반으로 할 것을 권장합니다. 왜냐하면 AZ가 고가용성을 구현하기 위한 기본 구조이기 때문. ELB가 트래픽을 AZ간에 균등하게 배분할 수 있으므로, AWS 생태계를 기반으로 서비스를 구현할 때 다중 AZ 구조의 활용은 당연합니다.

다중 AZ의 문제점은 무엇이고 어떻게 해결 할 수 있나요? 아래 키워드를 통해 스스로 학습해보기 바랍니다.

  • Cross Zone Load Balancing
  • Sticky Session
profile
내기 이해한 것을 보관하는 곳

0개의 댓글